Skip to content
Docs
Open Promoeyes
amazon

amazon

AMAZON — a real app-store ad screenshot, rebuilt, then given the one move the screenshot was always implying.

Read the rig's notes
The frame is authored for FIDELITY: every number below is measured off the
reference, which is the only honest test of whether the components can carry
a real product surface instead of a promo-shaped one. Exactly one thing then
moves — the "Customers say" panel lifts off the glass at 1s, holds, and
settles back at 5.6s, so the reel loops on itself. Everything else is held.

Three coordinate spaces, stacked front to back — that is the whole trick.

  THE WALL      `ui#s01-wall` — a 1080x2340 pixel-space billboard at z=0 carrying
                everything that belongs to the AD rather than to the app:
                the blurred backdrop, the letterbox bars, the navy card,
                the headline, the two chrome buttons and the AD tag. The
                camera is solved so this wall is exactly the frame (a 2340
                tall wall at fov 48 sits at z=2628), so every number below
                is a screen pixel.

  THE DEVICE    `<iphone>` in world mm at z=120, scaled 8.6x so its 159.5mm
                body reads 1437px tall once perspective has had its say.
                Its `<ui width=71 height=154>` child is the app itself, laid
                out in the glass's own millimetres — the same tree the
                device promos use, just asked to be a store page.

  THE CALLOUT   `<ui3d overlay=screen>` — the "Customers say" panel. In the
                reference it OVERHANGS the phone on both sides, which a
                texture can never do: the screen raster stops at the glass.
                As surface-anchored real geometry it is authored in the same
                71x154 space (x runs -6 to 78, i.e. off both edges) and
                simply keeps painting past the display. That is the one
                thing in the frame that forces the overlay layer — and,
                being a mesh, the one thing that can leave it.

THE POPOUT. The keyframes sit on the OVERLAY NODE, not on its three cards:
an overlay's node tracks read in the anchor's own stage-mm, so `0 0 16` is
16mm straight off the glass and the shadow stack, the white card and its
copy travel locked together with nothing to keep in sync. Only the two
shadow cards carry tracks of their own — their opacity roughly triples on
the way out, which is what actually sells the height. The panel is flush
and pixel-identical to the reference until 1s, so the shot still reads as
the screenshot before it becomes a product tour.

WHY THE PHONE IS NOT DRAWN. Rounded cards could fake a handset, and it would
be wrong: the device is a GLB, its titanium frame and Dynamic Island are
geometry, and the status bar is authored AROUND the island (safe-top=off,
then a gap at x 20..50) rather than under a hand-drawn notch.

LIT vs UNLIT. The glass takes the plain `basic` screen material and the
overlay's items are MeshBasicMaterial, so both paint exactly as authored —
the lights in here are for the casing alone. The wall is a ui/scene plane and
was never lit to begin with.

SHADOWS. `shadow=true` is a fixed 4/12 offset+blur in STAGE units, which on a
71mm glass is a 4mm drop — so the callout's elevation is three stacked
translucent cards instead, 0.05/0.07 black, each a hair larger than the last.

IMAGES are placeholder-first: `href=""` + a `description`, filled later by
`npm run promo:images -- --in promos/primitives/uis/examples/amazon.promo`.

Capture: `nx run tools:capture:webgl -- --project promos/primitives/uis/examples/amazon.promo --width 1080 --height 2340`
Preview: /packages/runtime/index.html?project=promos/primitives/uis/examples/amazon.promo
Topic
uis
Scenes
3
Kind
reference rig
//
    AMAZON — a real app-store ad screenshot, rebuilt, then given the one move
    the screenshot was always implying.

    The frame is authored for FIDELITY: every number below is measured off the
    reference, which is the only honest test of whether the components can carry
    a real product surface instead of a promo-shaped one. Exactly one thing then
    moves — the "Customers say" panel lifts off the glass at 1s, holds, and
    settles back at 5.6s, so the reel loops on itself. Everything else is held.

    Three coordinate spaces, stacked front to back — that is the whole trick.

      THE WALL      `ui#s01-wall` — a 1080x2340 pixel-space billboard at z=0 carrying
                    everything that belongs to the AD rather than to the app:
                    the blurred backdrop, the letterbox bars, the navy card,
                    the headline, the two chrome buttons and the AD tag. The
                    camera is solved so this wall is exactly the frame (a 2340
                    tall wall at fov 48 sits at z=2628), so every number below
                    is a screen pixel.

      THE DEVICE    `<iphone>` in world mm at z=120, scaled 8.6x so its 159.5mm
                    body reads 1437px tall once perspective has had its say.
                    Its `<ui width=71 height=154>` child is the app itself, laid
                    out in the glass's own millimetres — the same tree the
                    device promos use, just asked to be a store page.

      THE CALLOUT   `<ui3d overlay=screen>` — the "Customers say" panel. In the
                    reference it OVERHANGS the phone on both sides, which a
                    texture can never do: the screen raster stops at the glass.
                    As surface-anchored real geometry it is authored in the same
                    71x154 space (x runs -6 to 78, i.e. off both edges) and
                    simply keeps painting past the display. That is the one
                    thing in the frame that forces the overlay layer — and,
                    being a mesh, the one thing that can leave it.

    THE POPOUT. The keyframes sit on the OVERLAY NODE, not on its three cards:
    an overlay's node tracks read in the anchor's own stage-mm, so `0 0 16` is
    16mm straight off the glass and the shadow stack, the white card and its
    copy travel locked together with nothing to keep in sync. Only the two
    shadow cards carry tracks of their own — their opacity roughly triples on
    the way out, which is what actually sells the height. The panel is flush
    and pixel-identical to the reference until 1s, so the shot still reads as
    the screenshot before it becomes a product tour.

    WHY THE PHONE IS NOT DRAWN. Rounded cards could fake a handset, and it would
    be wrong: the device is a GLB, its titanium frame and Dynamic Island are
    geometry, and the status bar is authored AROUND the island (safe-top=off,
    then a gap at x 20..50) rather than under a hand-drawn notch.

    LIT vs UNLIT. The glass takes the plain `basic` screen material and the
    overlay's items are MeshBasicMaterial, so both paint exactly as authored —
    the lights in here are for the casing alone. The wall is a ui/scene plane and
    was never lit to begin with.

    SHADOWS. `shadow=true` is a fixed 4/12 offset+blur in STAGE units, which on a
    71mm glass is a 4mm drop — so the callout's elevation is three stacked
    translucent cards instead, 0.05/0.07 black, each a hair larger than the last.

    IMAGES are placeholder-first: `href=""` + a `description`, filled later by
    `npm run promo:images -- --in promos/primitives/uis/examples/amazon.promo`.

    Capture: `nx run tools:capture:webgl -- --project promos/primitives/uis/examples/amazon.promo --width 1080 --height 2340`
    Preview: /packages/runtime/index.html?project=promos/primitives/uis/examples/amazon.promo
promo#amazon(width=1080 height=2340 fps=30)
  // ================================================