Go to file
type-two 915f653525 [m9-B] snap-to-beat + FILM shot-list panel
Beat grid consumed from Lane C's /beats: one top-level scene.beatGrid (beats
kept in FILE seconds, effective offset re-derived from the audio clip so
dragging the audio drags the grid and head-trim leaves it put). beat and bar
join the snap selector, so keys, clip and audio blocks, both trim edges, cuts
and the playhead all became musical for free. Grid drawn faint on beats and
brighter on downbeats, suppressed below ~7px spacing. Low confidence still
snaps but says so. Tempo extrapolates past the analysed range.

FILM panel mounts inside #timeline: sequence CRUD, editable shot rows (scene
dropdown, in/out, cut|dissolve + seconds, reorder, delete), live runtime, size
picker, and Render film with per-shot/per-frame progress - gated behind
hasContent() + a confirm that says plainly every shot replaces the open scene,
and locked while running so it cannot be started twice. film.js imported
lazily so its absence cannot stop the timeline mounting.

Verified live: grid 128.02 BPM/35 beats off house128.wav, snapped positions
8-10ms from the true 0.468735s grid across the whole file, bar snap hits a
downbeat, grid survives toJSON->load; FILM lists both sequences with the
server's 11.50s runtime and 3 editable rows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 00:32:39 +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 [m8-C] multi-shot sequencing — a film is now a first-class object 2026-07-25 23:21:45 +10:00
lanes [m9-B] snap-to-beat + FILM shot-list panel 2026-07-26 00:32:39 +10:00
logs [m9-B] snap-to-beat + FILM shot-list panel 2026-07-26 00:32:39 +10:00
scenegod [m9-B] snap-to-beat + FILM shot-list panel 2026-07-26 00:32:39 +10:00
scripts [m9-C] beat detection + audio trim at mux 2026-07-26 00:13:40 +10:00
sequences [m8-C] multi-shot sequencing — a film is now a first-class object 2026-07-25 23:21:45 +10:00
templates [m7-C] starter templates: read-only API + three working scenes 2026-07-25 22:34:53 +10:00
.gitignore [m8-C] multi-shot sequencing — a film is now a first-class object 2026-07-25 23:21:45 +10:00
CLAUDE.md docs: note that prod asset sync is separate from deploy.sh 2026-07-25 22:52:55 +10:00
PLAN.md plan: M7 (rig aliases, world backdrops, templates) + sequencing/beat-sync backlog 2026-07-25 21:42:50 +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-8020.log [m9-B] snap-to-beat + FILM shot-list panel 2026-07-26 00:32:39 +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.