Skip to content

Headless Capture and QA Hooks

Alex Coulombe edited this page Jun 10, 2026 · 1 revision

Headless Capture and QA Hooks

The release tool is driven headlessly with environment variables. Do not pass --headless — captures need a real GPU context; the tool runs windowed at --resolution WxH and quits itself.

RELEASE_CHAR=guy RELEASE_PRESET=guy__rembrandt RELEASE_CAPTURE=1 RELEASE_VIEW_ORBIT=1 \
RELEASE_OUT=C:/renders/rembrandt.png \
godot --path <abs-path-to-godot_project> scenes/release.tscn --resolution 1080x1080

Core capture

Var Effect
RELEASE_CHAR=guy|her which character loads (default guy)
RELEASE_PRESET=<basename> starting preset, e.g. her__sunset (default = the character's default preset)
RELEASE_CAPTURE=1 render a still and quit
RELEASE_OUT=<abs path.png> name the still (default out/release/release_<char>_still.png)
RELEASE_MOVIE=1 also record a turntable mp4 (assembled via cv2; frames auto-cropped to even dims)
MOVIE_FRAMES=<n> turntable length (default 120)
SHOW_CHROME=1 keep the UI panels visible in the capture
RELEASE_SMOKE=<secs> run windowed with emote + idle + colour-cycle ON for n seconds, grab a frame, quit (exercises the live _process paths)

Framing

Var Effect
RELEASE_VIEW_ORBIT=1 capture from the interactive orbit camera (otherwise the fixed UE-matched cam)
ORB_YAW / ORB_PITCH / ORB_DIST / ORB_FOV / ORB_TY override the orbit framing
RELEASE_PAN=<f> override the orbit h_offset (0 = centre the subject)
RELEASE_FOV=<f> fixed UE-cam FOV (default 16)
CAP_H=<f> fixed UE-cam h_offset (default = preset cap_pan)

Pose & animation

Var Effect
RELEASE_BS="jawOpen=1.0,mouthSmileLeft=0.8" drive ARKit shapes
RELEASE_FOCAL="x,y,z" set the eye-gaze focal point (eye-midpoint frame)
RELEASE_BODY_ANIM=<clip> select + play a body clip (BodyIdle_Procedural, Idle, Sway, Walk, Turn, Wave, HappyIdle)
RELEASE_ANIM_SEEK=<s> seek the clip (paused for a clean still under RELEASE_CAPTURE)
RELEASE_ANIM=1 face emote + body idle both on
RELEASE_HERO=1, RELEASE_HERO_T=<s> hero (push-in) camera at time t

Look sweeps

Var Effect
RELEASE_EYE_RADIUS / _SCALE / _TINT / _ROUGH / _CC iris radius / iris scale / sclera tint / roughness / clearcoat
RELEASE_EYE_LIMBAL / RELEASE_EYE_LID limbal-ring / lid-shadow amounts
RELEASE_HAIR_ANISO anisotropic hair sheen (0 = legacy GGX)

Diagnostics

Var / script Effect
RELEASE_TOGGLE=1 live-switch character once before capture (regression hook)
RELEASE_CUSTOM=<abs .glb> exercise the custom-GLB loader
RELEASE_HAIR=0 hide all groom cards
RELEASE_NOCLOTH=1 hide the outfit (bust/body seam diagnostics)
RELEASE_RAKE=1 (+ RELEASE_RAKE_E/_FWD/_UP/_SIDE) force the hair-rake light + position sweeps
RELEASE_FOOTDBG=1 print the live skeleton's foot/pelvis world heights in-tool
scenes/diag_feet.gd / scenes/diag_footlock.gd per-clip foot height / world-drift probes (run with --headless --script)

Regression gate

python verify_pipeline.py (repo root of the working tree) loads both characters, live-switches, and asserts the structural invariants (43 morphs, 9 face surfaces, both skeletons, grooms attached, LeaderPose seam map, no script errors). Run it after any change to the tool.

Clone this wiki locally