pp-lab.shuffled
pp-lab.shuffled
Post-processing lab — SHUFFLED. pp-lab.next.promo, identical in every element, with every postprocessing block written in scrambled order. The engine decides the chain order (lib/postprocessing/post-steps.ts), so this must render pixel-identical to pp-lab.next.promo.
Read the rig's notes
The steps, and the order the ENGINE runs them in whatever order they are
written:
dof 20 focus=auto|mm|node|"x y z" range blur method depth — owned by
the chain, not the camera (camera focus attrs are ignored)
bloom 30 strength radius threshold selective …
output 40 tone_mapping=aces|agx|neutral|reinhard|cineon|linear|none exposure
aa 50 method=smaa|fxaa|none
film 60 grain scanlines line_count vignette vignette_start
Every numeric param is a channel (pug short rows or properties > kf, any
easing); `enabled` is a channel too.
Shots 1–3 translate pp-lab.promo one to one:
film_grain(output_transform=1) + fxaa → output(aces) + aa(fxaa) + film
film_grain(output_transform=2) → output(none)
camera focus/dof_range/dof_blur → dof(focus=auto|keyed, range, blur)
Expected differences, and only these: DOF now blurs the LINEAR image before
bloom and the tone curve (legacy appended it after grain), and FXAA runs
before grain instead of over it.
4 · LIVE everything keyed: the lens opens (blur 4 → 22) as focus=auto
follows the push from phone to laptop, bloom swells, AgX
exposure lifts, SMAA on the edges, and the film layer switches
off at 3.5 s.
THE SET and THE SCREENS as pp-lab.promo.
Preview: http://localhost:4444/runtime?project=promos/primitives/postprocessing/pp-lab.shuffled.promo&renderer=webgpu- Topic
- postprocessing
- Scenes
- 4
- Kind
- reference rig
//
Post-processing lab — SHUFFLED. pp-lab.next.promo, identical in every
element, with every postprocessing block written in scrambled order.
The engine decides the chain order (lib/postprocessing/post-steps.ts), so
this must render pixel-identical to pp-lab.next.promo.
The steps, and the order the ENGINE runs them in whatever order they are
written:
dof 20 focus=auto|mm|node|"x y z" range blur method depth — owned by
the chain, not the camera (camera focus attrs are ignored)
bloom 30 strength radius threshold selective …
output 40 tone_mapping=aces|agx|neutral|reinhard|cineon|linear|none exposure
aa 50 method=smaa|fxaa|none
film 60 grain scanlines line_count vignette vignette_start
Every numeric param is a channel (pug short rows or properties > kf, any
easing); `enabled` is a channel too.
Shots 1–3 translate pp-lab.promo one to one:
film_grain(output_transform=1) + fxaa → output(aces) + aa(fxaa) + film
film_grain(output_transform=2) → output(none)
camera focus/dof_range/dof_blur → dof(focus=auto|keyed, range, blur)
Expected differences, and only these: DOF now blurs the LINEAR image before
bloom and the tone curve (legacy appended it after grain), and FXAA runs
before grain instead of over it.
4 · LIVE everything keyed: the lens opens (blur 4 → 22) as focus=auto
follows the push from phone to laptop, bloom swells, AgX
exposure lifts, SMAA on the edges, and the film layer switches
off at 3.5 s.
THE SET and THE SCREENS as pp-lab.promo.
Preview: http://localhost:4444/runtime?project=promos/primitives/postprocessing/pp-lab.shuffled.promo&renderer=webgpu
promo#pp-lab-shuffled(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 (pp-lab.screens.html)
// ===================================================================
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
| #b0603a
card(x=7.28 y=54.62 w=56.44 h=40.05 r=20.03 fill=#1a1420)
card(x=41.87 y=12.74 w=16.38 h=16.38 r=8.19 fill=#ffd9a0)
card(x=21.85 y=32.77 w=27.31 h=27.31 r=3.28 fill=transparent stroke=#ffb347 stroke_width=0.55 stroke_align=inside)
card(x=23.3 y=61.9 w=23.85 h=4.73 r=2.37 fill=#00000099)
text(x=1.82 y=2.28 size=2.