My plan is only 13 Mb. “15.216Kb”
I do not think so
An 1,100-line YAML card looks ugly, but floor3d-card slowness is mostly:
- GLB/OBJ size & triangle count
- Number of lights casting shadows
- Browser/GPU
If it actually feels slow, you’ll get more impact from:
- Converting to GLB and simplifying the model mesh
- Turning
shadow: 'no'on most lights - Enabling
extralightmode: 'yes'so only active lights cast shadows
than from shaving a few hundred YAML lines.
You have done a good job, I can’t remember off the top of my head but I think each of my 3 floors is around that figure. Unfortunately my house has curved walls.
It has been a while since I played around with my model. I did convert the roof and the windows on the top floor to one object. My model could use optimisation that is for sure.
shadow: yes is required to stop it going through like that
With these settings can i solve the light direction? (going to upper floor)
- Turning
shadow: 'no'on most lights - Enabling
extralightmode: 'yes'so only active lights cast shadows
Should be, I am pretty sure they are the settings I used to stop my middle floor bathroom spilling light everywhere. But it should be shadow: yes for the particular light that is spilling light
Adding some tutorials to the other software methods would be of value.
Of course. I need time for writing tutorials.
Other professional programs to evaluate;
If you want to use Rhino;
way:1
use ExportToHASS and then you have an obj file. Import to Rhino for editing you need these settings
Then you will see
After this you can edit, delete or add whatever you need.
way:2
Beginning from Strach.
layer=object groups
Remember
All layers must be unique
Obj File->Group (door)->object1(wing)+object2(frame)+obj3(handle) etc. (sweet home 3D)
Layer (door)For another app->object1(wing)+object2(frame)+obj3(handle) etc. (professional app always use layers))
g lvl001wall_0_1 adizanni format
“lvl000” “lvl001” “lvl002” are the levels so layer name must be “lvl001(1or0 or2 )xxx”
save as obj (convert layer names to group)
For save as or export to obj file use these settings
the important thing is obj group is equals to layer.
In fact other professional pragrams have the the same logic “object groups=layers”
Floor3D [PRO] Card
Your Home Digital Twin – Game Engine Backbone Edition
floor3d-card (aka Your Home Digital Twin)
by @andyHA — with respect and thanks for the original vision and work.
A new upgraded version “Pro” is coming…
Built on a real game-engine backbone, shaped by professional architectural experience — not just code.
Floor3D [PRO] Card (source & documentation):
Context
The original floor3d-card works great and introduced a powerful idea: a true digital twin inside Home Assistant.
However, when models grow large and entity counts increase, natural performance and lifecycle limits begin to appear — not because of bad design, but because UI-driven architectures don’t scale like engines.
This work focuses on scaling and stabilization, not rewriting the idea.
What we improved (without changing the vision)
Single render exit (Render Scheduler)
Original behavior:
Render calls could be triggered from many places — state changes, attributes, resize events, editor lifecycle events.
Under heavy load this caused high CPU/GPU usage and unintentionally masked lifecycle edge cases.
What we did:
We introduced a game-engine style render scheduler:
100 triggers → 1 render path → 1 scheduled frame
All updates now flow through a single render exit.
No render storms. No duplicated geometry work. Clear and deterministic execution.
Faz-0 Engine Backbone – Stability Enhancements
Hostile lifecycle guards
- Context: Home Assistant editor dialogs, overlays, and z-index changes create a hostile lifecycle for custom cards.
- Improvement: Defensive guards ensure rendering and animation only happen in valid environments.
- Result: Stable runtime and predictable editor behavior at scale.
State is not geometry
- Context: In large setups, indirect geometry updates via state changes cause visual snapping and “refresh fixes it” symptoms.
- Improvement: Geometry updates are driven only by real positional data (e.g.
current_positionfor covers). - Result: Smooth motion, accurate visuals, no false updates.
Index-space invariant
- Context: As entity counts grow, internal arrays must remain perfectly aligned.
- Improvement: A strict index-space rule: one slot per entity, always aligned, never skipped.
- Result: Backbone stability even with hundreds of entities.
Real-world validation
This is not theoretical tuning.
- 5-story real house
- 47 MB GLB architectural model
- 200+ Home Assistant entities
The result:
A significantly faster, cleaner, and more stable foundation —
built like a real structure, not a UI hack.
Additional PRO Features
pro_log?: 'engine' | 'level' | 'all'
Optional detailed logging for debugging engine behavior.
Allows tracing render scheduling, level activation, and lifecycle decisions without polluting normal logs.
Level-Based Entity Filtering (Engine-Level Optimization) Mode (PRO)
Only visible and relevant levels are active.
Example:
If levels 0 → 1 → 2 → 3 are visible, only -1 and 3 are active.
(-1 means = 7/24 active exteriors, covers, alarm, etc.)
All other levels (0, 1, 2) are fully dormant:
- no state updates processed
- no render / update logic executed
- no click, double-click, long-press, or gesture handling
This dramatically reduces unnecessary workload in large multi-floor models.
Editor-only Mode (PRO)
pro_skill?: 'editor' | 'mobile' | 'all'
Editor mode is treated as a configuration scene, not real life:
- object mapping
- camera setup
- visual alignment
Real Home Assistant behavior is intentionally disabled here.
In short:
“Edit Card = setup scene, not runtime.”
This avoids false interactions and keeps editing predictable.
Mobile-only Mode (PRO)
A dedicated mode optimized for tablets and phones:
- adjusted pixel ratio
- reduced shadow cost
- mobile-friendly render parameters
Result: smoother interaction and better battery/performance balance on mobile devices.
@levonisyas , I welcome this initiative and I’m impatient to test it! I was really waiting for a professional coder to take over the project and I will try to be a sponsor and active tester. Thanks
@adizanni
Thank you so much for your kind words — they truly honor me. My Home Assistant background isn’t very long, mostly limited to hobby use and my own needs, but the original floor3d-card idea was so strong and inspiring that I put a lot of effort into making it more scalable and stable.
I only tried to place the existing structure on a more robust and engine‑like foundation; the core architectural vision and the whole “digital twin” concept are entirely your creation. For me, you will always remain the true master coder behind this project.
Your support, feedback, and active testing mean a lot. I’m confident we can take this to an even higher level together.
Thanks…
Levent





