GameFrame3D
GameFrame3D turns flat game and animation references into explorable 3D scenes.
Core trick
Reconstructs 3D scenes from flat references by combining scene-understanding output with generated assets and Blender composition.
Description
GameFrame3D turns flat game and animation references into explorable 3D scenes. Users can orbit, zoom, and inspect characters and environments from new viewpoints.
We built a scene reconstruction workflow combining Astra scene understanding, Meshy asset generation, and Blender composition and refinement, with a browser-based 3D gallery. The project includes an automated reconstruction pipeline and scenes refined by coding agents. The demo shows prepared scenes with live 3D interaction.
README excerpt
# GameFrame3D GameFrame3D turns image and text inputs into 3D scenes with downloadable generation evidence. This checkout supplies the HTTP/runtime foundation; the independent `pipeline/`, `web/` and `demo/` work lines supply generation, the viewer and materials. `contracts/scene.schema.json` is the sole shared HTTP and Python contract. The server loads its definitions at runtime; it does not maintain an OpenAPI or Pydantic copy. Run from the repository root with Python 3.11+, uv and npm installed: ```sh uv sync --locked npm ci uv run python -m server --config config.example.yaml ``` The example binds to `127.0.0.1:8765`. Copy it to `config.yaml` to select another host/port, isolated data directory, generation YAML path, execution/queue capacity, upload/request byte limits, prompt length and decoded image pixel limit. Paths resolve relative to the root YAML file. Pydantic rejects unknown keys and invalid limits. Keep credentials in the pipeline's own local configuration, outside public assets; root configuration contains only its explicit path. Generation YAML parsing and validation belong to pipeline. `GET /api/health` separates HTTP liveness from generation capability. The adapter requires callable `pipeline.runner.generate` and `pipeline.runner.preflight`, then calls `preflight(config_path: str | None) -> list[str]` with the same resolved path (or null) used for generation. Start generation configuration from `pipeline/config.example.yaml`; pipeline owns executable, l