If you previously built a 3D floor plan for Home Assistant with floor3d-card, this is a card that picks up where it stopped. If you never did, because the model files were huge, the lights looked flat, or the whole thing seemed like too much effort, this post is also for you: the hard parts have got easier, and an existing Sweet Home 3D house (or a Blender/SketchUp export) is all it takes.
Floor3DX Card is a fork of floor3dpro-card and, through it, of Andrea Di Zanni’s original floor3d-card. It shows a live 3D model of your home and binds the model’s objects to your entities: lamps lit in the bulb’s colour and brightness, doors and shades moving with their covers, fans spinning at their speed, camera feeds and video on screens, the time of day falling through the windows.
Repository and documentation: GitHub - FortranFour/floor3dx-card: Home Assistant 3D floor plan card. Fork of floor3dpro-card – Game Engine Backbone Edition (which, itself, was forked from Andrea Di Zanni's floor3d-card) with Draco/Meshopt/KTX2 models, full-resolution rendering and a door-cache fix, along with many new features · GitHub (MIT). Current release: 2.3.0.
If you already use floor3d-card or floor3dpro-card
Your configuration works as it is. Change one line:
type: custom:floor3dx-card
The card registers its own element names, so it installs next to the cards you have and can go on the same dashboard. The way to try it is to duplicate an existing card, change the type, and compare. Every new behaviour is off unless you configure it; a config written for the parent cards renders exactly as it did. Model files, object names, object_groups, entities, type3d rows, zoom_areas: nothing changes.
What the fork adds
Compressed models. Draco, Meshopt, KTX2 and WebP glTF files load with the decoders kept next to the card (HACS downloads them with it), so a house that was 30 MB is 4 MB, loads in a couple of seconds on a phone, and works with no internet. Compression scripts are in the repo. This alone made the card usable for me on iOS.
Lights that behave like the real ones. Brightness and colour from the entity (follow_entity), a wall switch for the state and the bulb behind it for the colour (color_entity), one light for a multi-part fixture, a light placed in front of its object so a slatted headboard throws its pattern on the wall. A color: entity condition tints the lamp shade in the light’s colour.
Pictures and video on any surface (type3d: image). A camera’s entity_picture on the wall display, album art on the stereo, an animated GIF decoded in the card, a looping video while a switch is on and a dark still while it is off. It works on surfaces the model exported without texture coordinates (Sweet Home 3D panels, plain boxes), which is most of them. In my garage the security camera video feed shows on the desktop monitor and the arcade game Zaxxon cabinet’s marquee and screen animates while the machine is on:
Time of day without a roof (daylight). Ambient light and colour from the sun’s elevation and a weather entity, beams through the windows that follow the real sun round the house, glass that glows after dark, and a slider to scrub through the day.
Themes (look). The neon, blueprint and day looks of NeonPlan 3D and NextFloor (see table below), on your own model: glowing edge lines, lit lamps that shine, outlines that know to skip wall seams and room borders. Three more of this card’s own (paper, ember, pastel) and a custom theme with your colours as colour pickers in the editor.
Shades that shrink with their position (type3d: shade), with a second motor for top-down/bottom-up shades. Transparent walls, by a fixed amount or an amount a slider sets, down to not drawn at all. Fans that ramp up and down. A loading bar with the model’s name, the step and the megabytes.
A visual editor on Home Assistant’s own form components (adapted from giosci1994’s fork, see table below): sections, sortable lists of entities and groups, every object of the model in the menus with a search, and a pick button that turns the preview into a picker: tap an object, the field fills in. The objects of the row you are editing are outlined in the preview.
Fixes to things the parent cards got wrong: doors and windows displacing on a return visit, Draco models rendering in a random order, scenes with more shadow-casting lights than the GPU can take going black, a re-render on every state change when colour tracking is on, the canvas staying low-resolution in masonry views.
Version 2.x: current three.js, same picture
The parent cards run three.js r130 (2021). Floor3DX 2.0 moved to r186, Lit 3 and TypeScript 5, and it was done methodically: the reference views of two real models differ minimally from the prior iteration using an earlier version of three.js. Two things three.js changed on the way (physical light units, sRGB colour management) are kept at their old behaviour by default and offered as options (lights: physical, color_management: managed), tuned so that switching them on needs no re-tuning of your lamps.
2.1 added merge_static: a Sweet Home 3D export is one mesh per wall, panel and chair leg, and the card issued a draw call for each, every frame. Merging the ones nothing refers to dramatically improved performance; it took a real house from 3,054 draw calls to 401 and a frame’s CPU time from 26 ms to 8 ms, with a pixel-identical picture. 2.2 made the card sturdier (one bad entity no longer blanks the card; a texture leak on updating text panels fixed) and added unit tests and a fake-WebGL test rig that counts draw calls and textures in CI without a GPU.
Two optional companions
Neither is required; both use the model and configuration you already have for the card.
Floor3D Snapshot Card turns the model behind a floor3d card (any of the three) into a static, tappable 2D floor plan for wall tablets, phones and guests. Its editor finds the floor3d cards on your dashboards, renders the model once in your browser, detects the rooms and places the card’s entities in the room each one stands in. Tablets then load a 34 KB module and two images; no 3D runs on them. Tap a room for its controls; a guest mode limits locks, garage doors, alarms and volume. It offers the same themes as Floor3DX (plus custom colours) and a sunlight layer that follows the real sun. There is a separate thread for it.
Home Scheduler & Simulator is a custom integration with a weekly quarter-hour grid for lights, switches, fans, covers and scenes. It embeds the installed Floor3DX card, so you can play a day in your own model before any real device moves, then arm it to run the house. Since 0.4 it can learn from actual use: it observes your linked lights, switches and fans, proposes a weekly routine from matching weekdays, and lets you review and play the proposal in the model before saving it as a schedule. It ships a fictional demo home, so you can try it without a model of your own.
How it relates to the other 3D floor plan projects
There are more of these than there were a year ago, so here is where each stands as of this writing (October 2026), to the best of my ability to determine their features.
| floor3d-card (original) | floor3dpro-card | floor3d-card mod (giosci1994) | NeonPlan 3D | NextFloor | Floor3DX | |
|---|---|---|---|---|---|---|
| Repository | adizanni/floor3d-card | levonisyas/floor3dpro-card | giosci1994/floor3d-card | Mastershort/neonplan3d | therealMRBK/NextFloor | FortranFour/floor3dx-card |
| Forum thread | Your Home Digital Twin (2021) | Floor3D Pro Card (Jan 2026) | floor3d-card mod (Sep 2026) | NeonPlan 3D (Oct 2026) | NextFloor (Oct 2026) | this thread |
| Kind | card | card | card | integration + card | integration + card | card |
| Your model | import (OBJ/GLB) | import | import | drawn in its own editor | drawn in its own editor (own GLB only for vehicles) | import |
| Last release | 1.5.3 (2024) | 1.5.3-Pro.Faz.2.1 (2026) | 2.13.0 (Oct 2026) | 1.15 (Oct 2026) | new (Oct 2026) | 2.3.1 (Oct 2026) |
| three.js | r130 | r130 | r186 | its own | its own | r186 |
| Runs floor3d-card configs | — | yes | yes (sky → sun) |
no | no | yes, unchanged |
| Element name | floor3d-card |
floor3dpro-card |
floor3d-card (replaces the original) |
neonplan3d-card |
nextfloor-card |
floor3dx-card (installs beside the others) |
| Compressed models (Draco/Meshopt/KTX2/WebP) | no | no | Draco, Meshopt | n/a | n/a | all four, decoders shipped |
| Visual editor | partly broken on recent HA (mwc-menu) |
yes | yes, HA components, pick in preview | yes (drawing) | yes (drawing) | yes, HA components, pick in preview |
| Lights from the entity | state | state | state | colour + brightness | colour + brightness | colour + brightness, switch/bulb split, offset, shade tint |
| Pictures / video on surfaces | — | — | TV screen (media picture) | cameras | cameras, TVs | any surface: cameras, GIF, video, state maps |
| Sun / daylight | sky | sky | sunlight + shadows | sun | sun | daylight: ambient, window beams, glow, scrub slider |
| Themes | — | — | — | neon, blueprint, day | neon, blueprint, day | same three on your model + paper, ember, pastel, custom |
| Also has | render scheduler, model cache, mobile profile | person trackers, room state colours, animated shower, loading screen, languages | heatmaps, vacuum, warnings, kiosk | heatmaps, energy flow, furniture packs, kiosk | shades, transparent walls, merge_static, fan ramp | |
| HACS | default | default | default (Oct 2026) | custom (default pending) | custom | custom |
| AI assistance acknowledged | none stated | none stated | Claude (as commit author in the git history; not stated in the docs) | none stated (a CLAUDE.md is in the repo) |
Claude Code (stated in the README) | Claude (co-author trailer on every commit, and here) |
Two notes on that table. NeonPlan 3D and NextFloor are a different approach, not competitors: you draw the house in Home Assistant instead of importing a model, which is far quicker to start and gives up the detail of a real model. Floor3DX borrowed their looks for people who have a model and want that style. And giosci1994’s mod and Floor3DX now use the same three.js version and have some overlapping and distinct features. giosci1994’s mod keeps the original’s element name and replaces it; Floor3DX takes a new name and sits beside it.
Installation
HACS → Custom repositories → https://github.com/FortranFour/floor3dx-card, type Dashboard → install Floor3DX Card → reload the browser. HACS adds the resource and downloads the decoder files with it. Manual installation and the full option reference are in the README; the two parent cards’ documentation applies to everything not listed there.
If you have never built a model: Sweet Home 3D is free, the floor3d-card wiki still describes the process well, and the compression scripts in the repo take it from there.
Thanks to Andrea Di Zanni for the original card, Levent Erdem for the Pro engine this is built on, and Giovanni (giosci1994) for the editor foundation. Much of the code since the fork was written with Claude (Anthropic) under my direction and testing on two real models; every commit carries a co-author trailer saying so.






























