pp-lab
pp-lab
Post-processing lab — LEGACY grammar. The same three shots are rebuilt with the first-class post steps in pp-lab.next.promo (and scrambled in pp-lab.shuffled.promo); this file was the baseline the post-step engine change reproduced bit-for-bit (docs/plans/postprocess.plan.md). Since then its FXAA became SSAA and shot 1's lens dof_pass=three (house rules), so it no longer matches that baseline.
Read the rig's notes
What each shot exercises, the way promos author post today:
1 · RACK DOF on the CAMERA (dof_pass=three focus dof_range dof_blur),
focus by FRAMING — kfs carry no focus, the lens rides the
look_at target from the phone to the laptop. The engine
appends camera DOF at the END of the chain (after grain).
render > unreal_bloom > film_grain(output_transform=1) > aa(ssaa)
2 · GLOW no DOF; a hot emissive halo for bloom and the prismatic
fringe; heavier vignette.
render > unreal_bloom > prismatic_dispersion > film_grain > aa(ssaa)
3 · FLAT renderer tone_mapping=None + film_grain output_transform=2
(sRGB only, no curve), scanlines on, no bloom; camera DOF
with KEYED numeric focus racking phone → browser, on the
default pass (three's max filter breaks the bright, defocused
browser page's text into scribbles).
render > film_grain > aa(ssaa)
AA is `step(name=aa method=ssaa samples=4)`, written last; never fxaa.
Transitions: 1 → 2 match-move (incoming drawn without post), 2 → 3
blur-dissolve (both chains run).
THE SET · 1 unit = 1 mm. Floor at y = −120. Laptop rig origin sits 119
above its base, screen centre +9 y / −125 z from the origin; iPhone glass
71 × 154; iPad glass 197 × 262; chrome height=240 → a 346 × 240 window.
THE SCREENS · Lumen, a grading app. Tailwind HTML (pp-lab.screens.html)
→ scripts/html-screens.mts (pp-lab.sections.json → pp-lab.screens.json)
→ the templates below.
Preview: http://localhost:4444/runtime?project=promos/primitives/postprocessing/pp-lab.promo&renderer=webgpu- Topic
- postprocessing
- Scenes
- 3
- Kind
- reference rig
//
Post-processing lab — LEGACY grammar. The same three shots are rebuilt with
the first-class post steps in pp-lab.next.promo (and scrambled in
pp-lab.shuffled.promo); this file was the baseline the post-step engine
change reproduced bit-for-bit (docs/plans/postprocess.plan.md).
Since then its FXAA became SSAA and shot 1's lens dof_pass=three (house
rules), so it no longer matches that baseline.
What each shot exercises, the way promos author post today:
1 · RACK DOF on the CAMERA (dof_pass=three focus dof_range dof_blur),
focus by FRAMING — kfs carry no focus, the lens rides the
look_at target from the phone to the laptop. The engine
appends camera DOF at the END of the chain (after grain).
render > unreal_bloom > film_grain(output_transform=1) > aa(ssaa)
2 · GLOW no DOF; a hot emissive halo for bloom and the prismatic
fringe; heavier vignette.
render > unreal_bloom > prismatic_dispersion > film_grain > aa(ssaa)
3 · FLAT renderer tone_mapping=None + film_grain output_transform=2
(sRGB only, no curve), scanlines on, no bloom; camera DOF
with KEYED numeric focus racking phone → browser, on the
default pass (three's max filter breaks the bright, defocused
browser page's text into scribbles).
render > film_grain > aa(ssaa)
AA is `step(name=aa method=ssaa samples=4)`, written last; never fxaa.
Transitions: 1 → 2 match-move (incoming drawn without post), 2 → 3
blur-dissolve (both chains run).
THE SET · 1 unit = 1 mm. Floor at y = −120. Laptop rig origin sits 119
above its base, screen centre +9 y / −125 z from the origin; iPhone glass
71 × 154; iPad glass 197 × 262; chrome height=240 → a 346 × 240 window.
THE SCREENS · Lumen, a grading app. Tailwind HTML (pp-lab.screens.html)
→ scripts/html-screens.mts (pp-lab.sections.json → pp-lab.screens.json)
→ the templates below.
Preview: http://localhost:4444/runtime?project=promos/primitives/postprocessing/pp-lab.promo&renderer=webgpu
promo#pp-lab(width=1920 height=1080 fps=30)
materials
// emissive well past the 0.85 threshold: selective bloom only sees emissive light
standard#glow(color=#1a1206 emissive=#ffb347 emissive-intensity=2.2 metalness=0 roughness=1)
standard#glow-cyan(color=#06121a emissive=#7ad7ff emissive-intensity=2 metalness=0 roughness=1)
standard#shell(color=#26262b metalness=0.4 roughness=0.3 envmap-intensity=1.1)
standard#deck(color=#08090c metalness=0.1 roughness=0.8)
// ===================================================================
// SCREENS — html2ui output (see header)
// ===================================================================
template#scr-ph-cam
card#ph-cam(x=0 y=0 w=71 h=154 r=0 fill=#07080c shadow=false)
card(x=0 y=0 w=71 h=154.02 r=0 fill=#07080c clip=true)
text(x=5.1 y=4.01 size=2.91 weight=700 color=#f4f1ea origin=left font_family=Manrope w=5.86 wrap=false) "9:41"
icon(x=54.43 y=2.46 size=3.09 set=tabler name=antenna-bars-5 color=#f4f1ea stroke_width=2)
icon(x=58.62 y=2.46 size=3.09 set=tabler name=wifi color=#f4f1ea stroke_width=2)
icon(x=62.81 y=2.46 size=3.09 set=tabler name=battery-3 color=#f4f1ea stroke_width=2)
icon(x=3.64 y=12.02 size=4.37 set=tabler name=bolt-off color=#f4f1ea stroke_width=2)
card(x=28.04 y=11.47 w=14.93 h=5.46 r=2.73 fill=#ffb347)
text(x=2.55 y=2.6 size=2.37 weight=800 color=#1a1206 origin=left font_family=Manrope tracking=0.14 w=9.81 wrap=false) LUMEN
icon(x=62.99 y=12.02 size=4.37 set=tabler name=adjustments-horizontal color=#f4f1ea stroke_width=2)
card(x=0 y=20.39 w=71 h=94.67 r=0 clip=true)
gradient
stop
| #1b2a3a
stop
| #3a3040
stop
| #b