Skip to content
Docs
Open Promoeyes
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
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