Known Issues¶
Everything that broke, behaved oddly, or could be improved during the feature sweep.
Severity: blocks a feature · works but wrong/fragile · minor · improvement idea
| # | Sev | Area | Issue |
|---|---|---|---|
| 1 | render | Odd downsample_factor → 0-byte mp4 (fast-proxy encode needs even dims) |
|
| 2 | render | eevee logs a harmless "Failed to create GPU texture" warning on the set | |
| 3 | agents | SetManager hardcoded path (now fixed to this machine) |
|
| 4 | editing | edit_dsl DEFAULT_EDIT_OUTPUT_ROOT is a hardcoded absolute path |
|
| 5 | agents | leftover breakpoint() in test3.py / StoryBoarder |
|
| 6 | camera | pan/jitter helpers not wired into shot.camera() |
|
| 7 | camera | arc accepts only 90 or 180 degrees |
|
| 8 | actors | say() clip length follows the talking animation, not the speech |
|
| 9 | actors | move_to(action="running") progressively collapses the actor — other gaits fine |
|
| 10 | timeline | perform(duration=N) ignored for in-place actions |
|
| 11 | editing | edit.music() BGM near-inaudible — add_bgm amix halves inputs |
|
| 12 | actors | ~~TTS voice doesn't match the character — a male voice on a female role (or vice-versa)~~ — ✅ RESOLVED (voice split from rig) | |
| 13 | blocking | Actors clip through set geometry (posts, fences, props) — there's no collision | |
| 14 | animation | Most gesture actions read as stiff / awkward on the rigs (80–90% feel "off") | |
| 15 | blocking | Blocking is flat and not varied per scenario — needs more realistic, situational staging | |
| 16 | camera | Camera ↔ subject get obstructed by set geometry (a wall/fence ends up in front of the lens) | |
| 17 | agents | Weak spatial reasoning — occlusion/space is hard to reason about (even for a human) | |
| 18 | sets | Sparse anchor points → relative / trailing positioning gets confused | |
| 19 | timeline | Non-locomotion (gesture) anims don't auto-loop to fill a duration — only locomotion does |
The two highest-value functional bugs¶
#9 — move_to(action="running") progressively collapses the actor
Only running is affected: via move_to its pose degrades over the clip — a forward lean,
then crouched, then near-horizontal, then fully collapsed on the ground (a longer clip is
worse, so it isn't a settling start-lean). walking, jogging, sprint all travel
fine, and running in place is fine — so the running action is being evaluated
progressively out of its frame range by the locomotion repeat/strip math. Workaround: use
jogging/sprint/fast_run (or walk_to) for run-travel; play running in place with perform.
#10 — perform(duration=N) ignored for in-place actions
Setting strip.action_frame_end makes Blender recompute strip.frame_end back to the full
action length, discarding duration. So idle(duration=20) still plays ~120 frames.
Fix sketch: set strip.frame_end = start + strip_length last, and/or use strip.scale.
Workaround: use shot.clip() to bound a shot.
Other notable ones¶
#1 — odd render dimensions
libx264/yuv420p needs even width/height. downsample_factor=6 → 213px wide (odd) → the
encode fails after all frames render. Fix: add -vf "scale=ceil(iw/2)*2:ceil(ih/2)*2" to
the ffmpeg command. Workaround: use downsample_factor ∈ {1, 2, 4, 5, 8}.
#7 — arc only 90°/180°
arc_shot hard-rejects other angles, though the math interpolates continuously. Fix: drop
the guard or validate a range. Workaround: use arc=90 or arc=180.
#11 — BGM comes out near-inaudible
add_bgm mixes with amix=inputs=2 (default normalization), which scales each input by ½, so
a low volume BGM lands near-silent (an edit with no dialogue measured −63 dB). Fix
sketch: add :normalize=0 to the BGM amix so the set volume is respected (not applied —
the dsl/ code is kept unchanged here). Workaround used in the samples: raise the music
volume to compensate for the halving (e.g. 0.7–0.8 → ≈0.35–0.4 in the mix).
Generation & realism limitations (#12–#19)¶
A separate class from the bugs above: these are quality and reasoning gaps observed while testing full generated movies — not crashes, and mostly without a one-line fix. Each is shown with a real rendered example (image + video) on the Issue Examples page.
#14 — animations read as awkward (the biggest one)
On most rigs the gesture actions look stiff or subtly wrong — a "sizeup" hunches oddly, a "considers" gesture snaps. Locomotion is the most reliable; in-place gestures are the weakest. It's a retarget/asset-quality limitation, not a code bug. Mitigation: favour the cleaner-reading actions, keep gesture holds short, and lean on camera/edit to sell the moment.
#13 — actors clip through set geometry
There is no collision between actors and the set, so a walk path or blocking offset can put a character straight through a post, fence, or prop. Mitigation: place anchors/blocking with clearance, and frame around contact points.
#16 — camera & subject get obstructed
The camera solve doesn't test line-of-sight, so set geometry (a wall, a fence post) can land
between the lens and the subject — sometimes hiding the actor entirely. Hard to reason about
automatically. Mitigation: pick camera points/angles with a clear sightline; nudge theta.
#12 — RESOLVED: TTS voice/gender mismatch
Fixed by the voice/rig split (dsl/voices.py + dsl/actors.py): every character now carries
a gender and a default_voice, voices are gender-tagged, and all 36 pairings are gender-matched
(0 mismatches) — voice + tone are also overridable at cast time. The three original
mispairings are corrected: james→echo, peasant_girl→coral, alex→verse. See the
Issue Examples entry for the
"before" clip and the resolved casting code.
#15 · #17 · #18 · #19 — blocking, spatial reasoning, anchors, looping
The remaining open items: flat un-varied blocking (#15), weak spatial reasoning (#17), too-sparse
anchors confusing relative placement (#18), and gesture animations not auto-looping to fill a
duration (#19). See the examples page for each, with the say()-splitting pattern that works
around #19.
These are tracked in full in the repo's docs/ISSUES.md.