Skip to content

v2.0.0 — plan → glTF scene → SDXL shots, 360° panoramas, photo declutter, MCP

Latest

Choose a tag to compare

@yakden yakden released this 24 Sep 14:43

Floor plan → 3D scene → photoreal, now agent-ready.

Added

  • Floor plans read like an architect reads them. plan_knowledge.py encodes drawing conventions
    (ГОСТ 21.501 / 21.201, ISO 4157/7519): room labels vs. level marks (+13,50), ceiling heights (h=3000),
    opening sizes (11x14), window/door marks, fire ratings, section marks, dimension chains. Multilingual room
    abbreviation dictionary (FI/PL/RU/UK/EN/DE). Mis-read OCR numbers that are really level marks no longer
    become room areas.
  • Room partitioning by neural walls. A VLM grounds every room label on the image; seeds are refined by
    OCR area labels; cubicasa-service /partition floods rooms between the neural walls (doors closed, exterior
    masked, terraces from Outdoor polygons, unseeded pockets auto-filled). Seeds are cross-checked by printed
    area vs polygon area (bad seeds rejected, up to 3 rounds). 13/13 rooms on the test plan, areas within ±0.5 m².
  • Whole-floor 2.5D scene for rendering (interior-render/app/floorscene.py): walls, openings, rooms and
    typical furniture become vertical prisms; a column ray-caster produces depth/material maps from any camera —
    you see the next room through a doorway and the outside through a window. Equirectangular 360° variant.
  • Shot planner (shots.py): wide_corner, toward_window, from_door, through_door (enfilade views
    from the neighbouring room), along, pano. Light is described from the real window positions relative to
    the camera; neighbours behind doors are named. Style presets ×7, mood presets ×6, two SDXL prompts
    (scene / style) to stay within CLIP limits.
  • SDXL engine: RealVisXL 4.0 + ControlNet-depth (/shot, /restyle), seamless 360° panoramas via
    circular convolution padding, panorama viewer, per-shot camera map drawn on the plan.
  • glTF 2.0 export (glb_export.py, GET /api/jobs/{id}/scene.glb): walls with cut openings, door leaves,
    window glass and sills, per-room floors/ceilings, furniture, node extras with room metadata — opens in
    Blender/Unreal/Unity/Three.js. Built-in GLB viewer at /glb/{id}/{floor}.
  • Photo tools (type=photo): a VLM lists personal items and clutter with boxes (two passes, merged),
    SAM2 refines masks, LaMa removes them; then tidy (img2img cleanup, same room), restyle (MiDaS depth →
    SDXL redesign with the same layout), declutter or enhance. Removal overlay + full room inventory for
    handover acts.
  • Render-only jobs on an analysed project (POST /api/jobs/{id}/shots) — no re-analysis.
  • MCP service (services/interior-mcp): streamable-HTTP MCP server exposing the whole pipeline
    (submit_plan, job_status, get_analysis, get_scene_3d, get_scene_glb, render_shots,
    list_images, get_image, submit_photo, get_photo_report, my_usage) with API keys shared with the
    gateway, per-key ownership and daily limits, HMAC-signed result links. Client guide included.

Changed

  • Broker /api/project accepts mood, engine, scenarios, max_shots, pano, user_style; the queue
    console has selectors for all of them plus the photo modes.
  • Per-room crops for VLM reading fade everything outside the room polygon so neighbours don't leak into the reading.
  • Category resolution counts kitchens/bathrooms from partitioned rooms; a single-kitchen dwelling is never an
    "apartment-building floor".

Fixed

  • Scene JSON now stores the source image and analysed rooms per floor, so later render jobs and GLB export
    work after a broker restart.
  • release-time regressions guarded: syntax checks for the broker and render server before restart.

Docs: INTERIOR3D.md · MCP.md · full CHANGELOG.