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