-
Notifications
You must be signed in to change notification settings - Fork 2
Headless Capture and QA Hooks
Alex Coulombe edited this page Jun 10, 2026
·
1 revision
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
| 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) |
| 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) |
| 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 |
| 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) |
| 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) |
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.