Go to file
type-two 5baebb410a [m11-B] camera moves become keyframes, snapped to the beat
applyDirect handles op:'move': one group() = transform keys at t0 and t0+dur
from the op's from/to, fov param keys at BOTH times (the only thing a zoom
moves, and an unkeyed fov gets dragged by its neighbours), ease on the leading
key of each pair. Repeating a move over the same span REPLACES the window
rather than interleaving, and reports how many keys it displaced. No automatic
cut - a move usually continues a shot - but the toast discloses when no cut
selects the moved camera, and cut:true is honoured if asked.

Snap config moved onto the model so a model-level op lands on the beat exactly
like a mouse drag: with a grid and snap=bar, t0 AND t0+dur land on downbeats.
Double-clicking the Cameras row now cuts to the camera you are looking through.

Verified live on music-video: playhead off-grid at 4.2s -> keys at 3.2907 and
8.9146, both exact bar lines, fov keyed at both, cuts unchanged, mid-move pose
interpolating, one undo deep-equal. 5 suites green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 20:19:55 +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 [m11-B] camera moves become keyframes, snapped to the beat 2026-07-28 20:19:55 +10:00
logs [m11-B] camera moves become keyframes, snapped to the beat 2026-07-28 20:19:55 +10:00
scenegod [m11-B] camera moves become keyframes, snapped to the beat 2026-07-28 20:19:55 +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 [m11-B] camera moves become keyframes, snapped to the beat 2026-07-28 20:19:55 +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.