R&D Report · Interim

AI Camera Match.

Integrating a real, keyed greenscreen actor into an AI-generated Jefferson Memorial background whose camera move matches the live plate — what was tried, what won, what died, what runs next.

Report · 2026-07-03 v0.6.0 · interim
3 stages solved 3 interim / pending 3 dead ends closed 8 research notes 34 evidence proxies · 17 MB
01

Executive Summary

The pipeline works end-to-end. Keying is broadcast-clean, the locked-shot composite is proven, and the camera problem is solved two ways: pushed to Seedance's interpretive ceiling for look, and hard-locked by construction with local depth-conditioned generation for accuracy. The central law learned:

Every reference-video model we tested repaints the subject (Seedance 2.0, confirmed independently on two platforms). "Keep the person, replace the background" is only achievable by keying the real subject and compositing — so the pipeline splits: real subject (key) + generated background (camera-matched), married in the comp. Seedance is the current BG recommend — a SOTA shootout (Kling, Runway, Veo) is planned before locking it.
StageStateEvidence
Keying (CorridorKey)solvedAll 3 plates keyed clean; true-alpha ProRes 4444 delivered (jib)
Locked-shot compositeprovenStatue-reframe comp v1 — §07
Camera match — look-firstmodel ceilingSeedance start+end keyframe clamp — §05
Camera match — accuracy-firstprovenLTX depth render-to-real, trajectory locked by construction — §06
Dolly / jib moving compsinterimDolly comp over Seedance BG done; move-amount matching open — §07
Relight / harmonizationpendingBuild-our-own stack scaffolded, not installed — §09
02

The Pipeline

Four workflows were tested (or designed) this cycle. W1 is the production path — everything else feeds it or was eliminated reaching it. Arrows show data direction; every generated background ultimately meets the real keyed subject in W1's composite.

W1

Key + Composite — the production path

adopted
GREENSCREEN PLATE4K source · 3 shotsCORRIDORKEY → ALPHAneural key · ProRes 4444 · 5090CAMERA SOLVE2D track · push-ramp 1.82×SEEDANCE BG GENA · clamp — B · empty presetCOMPOSITEreal subject over gen BGRELIGHTpendingDELIVERYEXR · AEcamera scale
W2

Render-to-Real — camera hard-lock

proven
GREENSCREEN PLATEdolly · 143fCAMERA SOLVEplanar → push-ramp 1.82×BLENDER PREVIZclay guide · measured rampLTX DEPTH IC-LoRAexact camera · photoreal · 220s▸ COMPOSITEinto W1WAN2.2 FUN CONTROLcamera exact · look 3/10 ✗
W3

Video-Ref Regenerate

dead end
RAW GREENSCREEN VIDEOreference · real crane moveREFERENCE BG IMAGEJefferson platePROMPTreplace BG · keep subjectSEEDANCE VIDEO-REFmagnific + Higgsfield runsREPAINTED SUBJECT ✗identity lost · staging randomEMPTY BG · REAL CRANE MOVEusable jib BG plate▸ COMPOSITEinto W1
W4

Obscura Hybrid

planned
SEEDANCE VIDEO-REF · 4Kaccurate move · repainted personOBSCURA REMOVALTX-2.3 V2V removal · 1080pMASK-BACK INTO 4Kreveal sliver onlyCOMPOSITE REAL SUBJECTplanned · not yet run
solved / adopted works with caveats pending / planned dead end
StrategyCamera accuracyLookUse when
A · Seedance + keyframesendpoint-clamped, mid-path drifts10/10Hero look, forgiving moves
B · Seedance empty-BG presetinterpretive (preset vocabulary)10/10Key+composite shots, art-directed plates
C · LTX depth render-to-realexact, by constructionphotoreal, below SeedanceAccuracy-critical camera, local, free
03

The Three Test Shots

One performer, three camera behaviors: a locked-off medium, a push-in dolly, and a crane-down jib. Together they cover the camera-matching problem space from trivial to hard.

LOCKED · 151f · 2D track confirms static (worst drift 1.56% ≈ handheld micro-motion)
DOLLY · 143f push-in · planar solve (1 marker) → feature-spread ramp measured 1.82×
JIB · 151f crane high→low · planar; move read from footage, no 3D solve
04

Keying

solved

CorridorKey on the 5090 (BiRefNet hint → neural key + despill → sharp hybrid composite) outputs the subject on flat gray-148 for clean matte extraction. Naive chroma keying failed outright — the warm dark-olive "green" had r≈g. A distance-ramp matte off the gray, plus interior hole-fill for near-gray dress folds, yields the delivered true-alpha ProRes 4444.

Locked key · gray-148 output
Dolly key · re-keyed after byte-verified transfer fix (stale-footage bug caught & killed)
Jib key · full crane range; alpha master: 03-keyed/jeff_jib_key_ALPHA.mov (ProRes 4444, 4K, 246 MB — local)

Keyer validation suite — the keyer was proven on harder cases before touching production footage: flying dark hair mid-motion, fine blonde strands against a dark suit, and full-body dance moves at 4K. Composited on a gradient specifically to expose edge artifacts.

before / afterGreen plate → keyed — split-screen validation, dancer at 4K
sharp hybridSharp-hybrid composite — the keyer's signature pass: neural matte + high-freq detail recovery
hard caseFlying dark hair, mid-motion — the classic keyer killer; strands survive
hard caseFine blonde strands + dark suit — low-contrast edges hold

Matte QC — the hole-fill fix. The silk camisole's near-gray folds sat close to the key gray and punched semi-transparent holes in the body interior. Interior hole-fill (solidify enclosed regions, preserve the soft hair rim) produced the delivered alpha:

Alpha matte with interior holes
first passRaw distance matte — dress folds read as background: interior holes
Alpha matte after hole-fill
deliveredAfter interior hole-fill — solid body, hair edge still soft; this matte ships in the ProRes 4444
Pipeline bug worth remembering: the original key run silently keyed stale footage — scp to a fixed filename dropped without error. Fix: dd-over-ssh push with byte-count gate before every key. Upgrade path researched: MatAnyone 2 (−26% MAD) as the single highest-leverage keyer swap.
05

Camera Match — Seedance Track

model ceiling

Four iterations pushed Seedance 2.0 from "statue flung anywhere" to a pinned trajectory. The law that emerged: Seedance interprets a camera, it never hard-locks one — it is architecturally diffuse-follow. Composition obeys legibility; trajectory obeys nothing but keyframes.

dead endv1 · techhalla method — generic still reference; Seedance re-composed hard-right, wrong camera
leverTextured previz at the solved camera — legibility is the composition lever; grey clay gets ignored, legible geometry lands
partialv2 · legible previz reference — composition lands (statue centered, low angle) but depth direction inverted: our camera pushes in, Seedance widens
bestv4 · start+end keyframe clamp — trajectory pinned at both ends; residual mid-path drift = comp stabilize, not regen. This is Seedance's ceiling. Master: routeB_seedance4_keyframes.mp4
Stress test · previz camera vs clamped Seedance, side by side
06

Camera Match — Hard-Lock Track

The other side of the deciding axis: structure as conditioning. Two engines tested — one died on look, one is the proven accuracy path. (Naming note: the repo's research docs use "Route A" for Uni3C reference-copy — untested to date; the Wan test below was run as a hard-lock engine trial.)

dead endWan2.2 Fun Control (5090, depth) — camera locked by construction but look = 3/10, unusable for finals. Kept only as a possible guide layer in an untested fusion.
provenLTX-2 depth IC-LoRA render-to-real (5090) — Blender dolly previz in, photoreal rotunda out, trajectory identical frame-for-frame. 220s local, free. Statue blobby (crude proxy + 512×288) — levers identified. Reverses the Jun-27 LTX demotion only under depth conditioning — free generation stays demoted. See research note 2026-07-02.
Blender clay guide, start/mid/end
Structural guide · Blender clay rotunda, 143f measured 1.82× push, real parallax baked in (start / mid / end)
LTX photoreal output, start/mid/end
Photorealized · same frames after depth-conditioned LTX — camera is the model's input, not its guess
Zoom vs dolly — the parallax test. Seedance's pushIn preset renders an optical zoom (uniform magnification, no parallax). Its superDollyIn preset — and the LTX depth path by construction — produce true forward translation: foreground columns slide past frame edges at a different rate than the back wall. Always inspect start/mid/end frames for parallax before accepting a "dolly."
zoomSeedance pushIn — magnification only; flagged in review, replaced
dollySeedance superDollyIn — genuine travel: camera passes between the foreground columns
07

Composites

interim

Real keyed subject over generated backgrounds. The locked shot is proven; the dolly comps exist in two BG flavors; the jib comp is next (its empty Seedance BG already exists — §08).

provenLocked comp v1 — statue-reframe: subject at native scale, Jefferson plate reframed behind her at human scale
interimDolly comp · static BG + ramp zoom — BG is a still given the measured 1.82× push; no BG parallax
interimDolly comp · Seedance BG — moving generated BG behind untouched subject; BG move amount > subject move (matching open)
Jefferson locked BG option A
Locked BG plate (Nano Banana, option A — chosen)
driftedLocked-shot Seedance BG — "static" generation drifts; needs 2D stabilize or regen before the locked comp upgrades to a moving-grade BG (open item)
Dolly eye-level BG plate
Dolly wide eye-level plate — statue right, inscription wall legible (nailed first pass)
Jib end low-angle plate
okJib end low-hero plate
Jib start high-angle plate — failed
failedJib start high-angle — Nano Banana snapped to eye-level and invented a person; stills won't hold composition (known law). Redo or derive from Blender.
08

The Regenerate Dead End — and Its Useful Half

Feeding Seedance the raw greenscreen video + a reference BG image + "replace the background, keep her exactly" produced a repainted stranger on a random stage. Tested on two platforms (magnific + Higgsfield manual runs) — same law both times.

dead endVideo-ref BG-replace (dolly) — output unrelated to the plate; subject repainted
confirms lawHiggsfield manual jib run 1 — she's in the rotunda with the crane move, but the model repainted her face/wardrobe. Second platform, same law.
usableHiggsfield manual jib run 2 — empty rotunda with the real crane move: a ready-made jib BG plate for the key+composite path
Planned test (not yet run): LTX-2.3 Obscura Remova — generate Seedance video-ref at 4K (accurate camera, repainted person), remove the AI person with Obscura, mask the 1080p reconstruction back into the native-4K frame (the real keyed subject re-covers almost all of it), composite the real performer. Best look + camera accuracy if Obscura's temporal reconstruction holds.
09

Relight

pending

Decision locked after a Beeble/SwitchLight build-vs-buy analysis: build our own. IC-Light v1 FBC + DiffusionLight (single-frame HDRI lock — the anti-shimmer trick for our lighting-static BGs) + Marigold, on the 5090. Open stack ≈ 80–90% of SwitchLight on stills; Beeble API ($0.10/gen) kept as the reference bar only. Scaffolded at relight/, ~15 GB install not yet run.

10

Model Capability Map

Model / methodCamera controlPreserves real footage?LookWhere it fits
Seedance 2.0 (keyframes)endpoint clamp; presets; interpretsno — repaints10/10Pipeline base for BG look
Seedance 2.0 (video ref)copies plate move wellno — repaints subject10/10BG-only gen; Obscura candidate
LTX-2 depth IC-LoRA (local)exact — structure conditionedn/a (generates BG)photoreal, sub-SeedanceAccuracy-critical BG
Wan2.2 Fun Control (local)exact — depth conditionedn/a3/10 localRejected; possible guide layer
Uni3C (Wan2.2 cloud)geometry-aware ref copyno — re-renders6–7 cloudRepo "Route A" — untested fusion ingredient
Kling (Motion Control)ref-followno — regenerateshighShootout planned — head-to-head vs Seedance
Runway (Gen-4 / Aleph)prompt + ref modesno — regenerateshighShootout planned
Veo 3.xprompt-levelno — regenerateshighShootout planned
LTX-2.3 Obscura Removan/a (V2V removal)yes — reconstructs behind occluder1080p capPlanned: strip AI person from Seedance ref output
CorridorKey (5090)n/ayes — it IS the footagebroadcast-cleanThe subject track
11

Locked Decisions

12

Open Items — What Runs Next

ItemStateNotes
SOTA BG-gen shootoutplannedSame dolly/jib BG brief across Kling, Runway, Veo vs Seedance — Seedance is the working recommend pending head-to-head
Obscura Remova testplannedStrip AI person from Seedance video-ref output; mask-back into 4K; composite real subject
Jib compositereadyEmpty jib BG exists (Higgsfield run 2) + clean jib key + alpha master — assemble
Jib high-angle plateredoNB still failed; derive from Blender previz or regenerate
Dolly move-amount matchopenSeedance superDollyIn travels further than the plate's 1.82×; gentler re-gen or partial-range comp
LTX r2r quality passopen768×432+, full 143f, real Jefferson statue mesh (Sketchfab/Smithsonian) for legible silhouette
Relight install + first testgatedrelight/SETUP-5090.md (~15 GB); A/B CorridorKey ComfyUI node vs key.sh
Locked-shot Seedance BGopenStatic gen drifted (§07); 2D-stabilize or regen; then rebuild locked comp on moving-grade BG
Fusion experimentuntestedCloud-Wan depth hard-lock guide + Seedance restyle — proposed lever if clamp ceiling isn't enough
Keyer upgraderesearchMatAnyone 2 (−26% MAD); verify weights/licenses
Higgsfield API authpendingManual runs worked; automated path awaits auth callback
13

Assets & Masters

Everything on this page is a 720p H.264 proxy encoded for handoff (site filenames may shorten master names — each caption cites the master where they differ). Full-resolution masters live in the project repo on the workstation: