Skip to content
Docs
Open Promoeyes
popup

popup

morph="popup" — pop-up book (match-morph-popup.ts).

Read the rig's notes
The element tips back to lie like an open book page; its picture rises off
the page in hinged paper layers — horizontal bands of the picture standing
on their folds at staggered depths, each a card with a white die-cut border,
paper thickness, two V-fold tabs and a soft shadow on the page. The diorama
holds, spreads and turns a little on the table, then the layers keep folding
over toward the lens and land face down: their backs are printed with the
incoming picture, and the page tips up into the incoming element.

  left    attribute form, defaults (6 layers · stagger 0.5 · spread 1 · paper #f3eee4)
          1.00 → 2.80   stat card → iphone
          4.20 → 6.00   iphone → music card
  right   nested form, tuned (9 layers · stagger 0.65 · spread 1.6 · cream #f6e7c8)
          1.30 → 3.10   chrome → profile card
          4.50 → 6.30   profile card → ipad

One scene, no cuts: each source names its target with morph-to / morph(to=…),
the target is parked until its morph delivers it. popup's layers are real
hinged cards, so the hand-offs hold up while the camera swings round them.
Camera never stops: linear kfs orbit r 1250 around 0 0 0 from above, each hand-off pair swings side to side (+26°→−35°, −24°→+33°) through a 0.92r dip at its midpoint.

Preview: http://localhost:4444/runtime?project=promos/primitives/morphs/popup.promo
Topic
morphs
Scenes
1
Kind
reference rig
//
    morph="popup" — pop-up book (match-morph-popup.ts).

    The element tips back to lie like an open book page; its picture rises off
    the page in hinged paper layers — horizontal bands of the picture standing
    on their folds at staggered depths, each a card with a white die-cut border,
    paper thickness, two V-fold tabs and a soft shadow on the page. The diorama
    holds, spreads and turns a little on the table, then the layers keep folding
    over toward the lens and land face down: their backs are printed with the
    incoming picture, and the page tips up into the incoming element.

      left    attribute form, defaults (6 layers · stagger 0.5 · spread 1 · paper #f3eee4)
              1.00 → 2.80   stat card → iphone
              4.20 → 6.00   iphone → music card
      right   nested form, tuned (9 layers · stagger 0.65 · spread 1.6 · cream #f6e7c8)
              1.30 → 3.10   chrome → profile card
              4.50 → 6.30   profile card → ipad

    One scene, no cuts: each source names its target with morph-to / morph(to=…),
    the target is parked until its morph delivers it. popup's layers are real
    hinged cards, so the hand-offs hold up while the camera swings round them.
    Camera never stops: linear kfs orbit r 1250 around 0 0 0 from above, each hand-off pair swings side to side (+26°→−35°, −24°→+33°) through a 0.92r dip at its midpoint.

    Preview: http://localhost:4444/runtime?project=promos/primitives/morphs/popup.promo
promo#morph-popup
  scene#one(duration=7.4)
    camera(type=perspective fov=42 near=8.5 far=17000 position="618.9 344.5 1030.0" look_at="0 0 0")
      properties
        frame
          keyframes
            kf(time=0 easing=linear position="618.9 344.5 1030.0" look_at="0 0 0")
            kf(time=1.0 easing=linear position="536.0 259.9 1098.9" look_at="0 0 0")
            kf(time=2.05 easing=linear position="-19.8 179.9 1135.7" look_at="0 0 0")
            kf(time=3.1 easing=linear position="-685.6 365.5 979.2" look_at="0 0 0")
            kf(time=4.2 easing=linear position="-505.6 130.7 1135.7" look_at="0 0 0")
            kf(time=5.25 easing=linear position="39.4 219.4 1128.2" look_at="0 0 0")
            kf(time=6.3 easing=linear position="660.6 302.4 1017.2" look_at="0 0 0")
            kf(time=7.4 easing=linear position="776.1 323.5 924.9" look_at="0 0 0")
    background(top=#101626 bottom=#05070d)
    environment(hdr="studio_small_04_2k" as_background=false background_color=#05070d exposure=1.0 blurriness=0.5 intensity=0.6)
    lights
      light#amb(type=ambient color=#9fb4ff intensity=0.8)
      light#key(type=directional color=#ffffff intensity=2 position="340 680 510")
      light#fill(type=directional color=#7aa2ff intensity=0.6 position="-510 170 340")
    haze#hz0(blend=add opacity=0.4 position="-900 400 -1600" color=#3b5bff size="120000 100000" pulse=0 decay=0)
    haze#hz1(blend=add opacity=0.3 position="900 -500 -1700" color=#9b3bff size="110000 90000" pulse=0 decay=0)
    text#title(text="popup" kind=layer font="Roboto" size=200 worldHeight=40 color=#e8eefc weight=700 align=center position="0 400 0")
    text#sub(text="tip back · layers rise · turn · fold over · tip up" kind=layer font="Roboto" size=110 worldHeight=18 color=#8ea3c8 weight=500 align=center position="0 358 0")

    // ── left · attribute form · defaults ──────────────────────────────────────
    ui3d#l-card(morph=popup morph-to=l-phone morph-at=1 morph-dur=1.8 width=600 height=440 world_width=280 position="-330 -10 0" rotation="0 -10 0")
      card(x=0 y=0 w=600 h=440 r=34 fill=#0b1622 stroke=#35e0ff stroke_width=3 shadow=true layout=column align=start padding="36 0 0 36" gap=16)
        card(w=hug h=hug fill=transparent shadow=false layout=row align=center gap=14)
          icon(set=tabler name=activity size=40 color=#35e0ff stroke_width=2.4)
          text(text=Pulse size=32 weight=900 color=#f2fbff align=left)
        text(text="Active users" size=22 weight=600 color=#8fb4c6 align=left)