Go to file
type-two 128e24a7cb [deploy] digalot.fyi hosting: prefix-agnostic frontend, ship-check hardening, docker+nginx kit
- web: all URLs relative (imports ./web/..., fetches assets/...) so the app
  serves at / locally and under /scenegod/ behind nginx; esc() on dock
  innerHTML interpolations (ship-check XSS class)
- server: capped_body on every POST (scenes 5MB, frames 25MB, meta/director
  256KB-1MB), render begin sanity (fps<=60, dims<=4096, frame idx<=20000)
- deploy/: Dockerfile (slim+ffmpeg), compose (project 'scenegod' — avoids
  the shared-'deploy'-project orphan trap with meshgod), nginx location
  (suite basic-auth), deploy.sh (rsync model, meshgod-style)
- live: digalot.fyi/scenegod/ -> 401 unauthed, app healthy on dealgod_default

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 02:43:26 +10:00
.claude [sync1] wire TimelineUI to real Stage, null-mixer guard, M2 unlock + orchestrator updates 2026-07-18 18:36:16 +10:00
deploy [deploy] digalot.fyi hosting: prefix-agnostic frontend, ship-check hardening, docker+nginx kit 2026-07-21 02:43:26 +10:00
lanes [m5+m6] DIRECTOR MODE + FLOW VIDEO PLATES — all lanes + sync6 seam fixes 2026-07-20 17:51:28 +10:00
logs [m5+m6] DIRECTOR MODE + FLOW VIDEO PLATES — all lanes + sync6 seam fixes 2026-07-20 17:51:28 +10:00
scenegod [deploy] digalot.fyi hosting: prefix-agnostic frontend, ship-check hardening, docker+nginx kit 2026-07-21 02:43:26 +10:00
scripts [m5+m6] DIRECTOR MODE + FLOW VIDEO PLATES — all lanes + sync6 seam fixes 2026-07-20 17:51:28 +10:00
.gitignore [laneC] M1 server: statics, assets tree/file, scenes CRUD+validation, render stubs, tests 2026-07-18 17:53:52 +10:00
CLAUDE.md [deploy] digalot.fyi hosting: prefix-agnostic frontend, ship-check hardening, docker+nginx kit 2026-07-21 02:43:26 +10:00
PLAN.md [m6] Flow video plates spec + flow_intake.py; M6 queued behind M5 2026-07-19 01:25:14 +10:00
README.md [sync5] viseme matcher side-suffix fix, v1 complete: README, git-hygiene rule 2026-07-18 21:33:53 +10:00
requirements.txt [laneC] M1 server: statics, assets tree/file, scenes CRUD+validation, render stubs, tests 2026-07-18 17:53:52 +10:00

SCENEGOD — machinima director's sandbox

Drop characters, Mixamo clips, and photo backdrops onto a 3D stage; keyframe transforms, cameras (with cuts), and lights on a timeline; render an mp4 with muxed audio. The Movies / Source Filmmaker energy on the GODVERSE stack.

Run

.venv/bin/uvicorn scenegod.server:app --port 8020
# → http://127.0.0.1:8020

Assets live in assets/{characters,animations,props,backdrops,audio}/ (plain folders, scanned live — files sharing dir+stem are one entry; a same-stem image becomes the thumbnail). Scenes save to scenes/*.json, renders to renders/ (reaped after 48h).

What works (v1)

  • GLB/FBX/OBJ characters & props; spec-gloss (Character Creator) GLBs are converted on load. Image backdrops: flat plane, corner, or 360 dome.
  • Mixamo-style clip retarget onto any mixamorig-named skeleton, client-side (world-space rotation-delta bake, ported from MESHGOD rigroom).
  • Timeline: transform + param keyframes with easing, clip blocks with trim/loop/crossfade, multiple cameras + cut list, keyframable sun/ambient, audio tracks (Web Audio preview; server-side ffmpeg mux in the final mp4), viseme/morph track with Rhubarb JSON import (GET /rhubarb?path= if the rhubarb binary is installed).
  • Render: draft webm (MediaRecorder) or deterministic PNG-sequence → ffmpeg h264 (+aac) mp4 at any resolution.
  • scripts/graft_limb.py: headless-Blender armature graft (add a rigged hand/limb to a rigged body; refuses when the bones already exist).
  • scripts/test_server.py (9 groups) + node scenegod/web/timeline_test.mjs.

Repo docs

PLAN.md — architecture, scene-JSON schema, module contracts, milestones. CLAUDE.md — lane-agent protocol (3 parallel Opus lanes + orchestrator), stack rules, inherited gotchas. lanes/ + logs/ — per-lane instructions and session logs; the build history of this repo is readable there.