ui-devices
ui-devices
UI on devices — ten product shots, every screen a REAL ui stage.
Read the rig's notes
The companion to ui.promo: the same component vocabulary, but always inside a device (`iphone` / `ipad` / `laptop` / `imac` / `chrome`), authored in the glass's own millimetres — an iphone stage is 71x154, ipad 197x262, laptop 346x223, imac 520x293, chrome 480x300, and a `text(size=5)` on a phone is a 5mm glyph. No coords_width step: a ui stage IS mm, so the numbers you type are the numbers on the glass. Every scene is a product shot: a mirror floor (reflector-ground), a shadow-casting key + rim, a studio HDR, onyx or tinted haze banks, film grain, and a `frame` camera program that closes in on the LIVE DISPLAY (`node=<device>` frames the screen, not the casing). 01. bank iphone · space-black · onyx studio · wallet, gradient card 02. rings iphone · porcelain · bronze studio · stat-rings on ring-fill 03. music iphone · graphite · cool studio · now playing, waveform bars 04. tablet ipad · warm · editorial travel cover, image + text-block 05. analytics laptop · space-black · onyx · dark dashboard, charts + table 06. ide laptop · cool · editor with tree, tabs, syntax runs, terminal 07. imac imac · daylight interior · design tool, panels, artboards 08. browser chrome window · SaaS landing page, glass hero, pricing 09. handoff iphone -> laptop · checkout on the phone lands on the desk 10. family imac + laptop + ipad + iphone · one system, four glasses AUTHORING NOTE — only the tags in the emitter's CONTENT_TAGS list group into a parent's <children>; everything else (paragraph, headline, rich-text-block, input-*, action-set, window-frame, cursor) is emitted loose and is appended AFTER its plain siblings at parse time, silently reordering the flex. Each one below therefore sits in its own `card(w=hug h=hug fill=transparent shadow=false)`. Capture: `nx run tools:capture:webgl -- --project promos/primitives/uis/ui/ui-devices.promo` Preview: /packages/runtime/index.html?project=promos/primitives/uis/ui/ui-devices.promo
- Topic
- uis
- Scenes
- 10
- Kind
- reference rig
//
UI on devices — ten product shots, every screen a REAL ui stage.
The companion to ui.promo: the same component vocabulary, but always inside
a device (`iphone` / `ipad` / `laptop` / `imac` / `chrome`), authored in the
glass's own millimetres — an iphone stage is 71x154, ipad 197x262, laptop
346x223, imac 520x293, chrome 480x300, and a `text(size=5)` on a phone is a
5mm glyph. No coords_width step: a ui stage IS mm, so the numbers you type
are the numbers on the glass.
Every scene is a product shot: a mirror floor (reflector-ground), a
shadow-casting key + rim, a studio HDR, onyx or tinted haze banks, film
grain, and a `frame` camera program that closes in on the LIVE DISPLAY
(`node=<device>` frames the screen, not the casing).
01. bank iphone · space-black · onyx studio · wallet, gradient card
02. rings iphone · porcelain · bronze studio · stat-rings on ring-fill
03. music iphone · graphite · cool studio · now playing, waveform bars
04. tablet ipad · warm · editorial travel cover, image + text-block
05. analytics laptop · space-black · onyx · dark dashboard, charts + table
06. ide laptop · cool · editor with tree, tabs, syntax runs, terminal
07. imac imac · daylight interior · design tool, panels, artboards
08. browser chrome window · SaaS landing page, glass hero, pricing
09. handoff iphone -> laptop · checkout on the phone lands on the desk
10. family imac + laptop + ipad + iphone · one system, four glasses
AUTHORING NOTE — only the tags in the emitter's CONTENT_TAGS list group into
a parent's <children>; everything else (paragraph, headline, rich-text-block,
input-*, action-set, window-frame, cursor) is emitted loose and is appended
AFTER its plain siblings at parse time, silently reordering the flex. Each
one below therefore sits in its own
`card(w=hug h=hug fill=transparent shadow=false)`.
Capture: `nx run tools:capture:webgl -- --project promos/primitives/uis/ui/ui-devices.promo`
Preview: /packages/runtime/index.html?project=promos/primitives/uis/ui/ui-devices.promo
promo#ui-devices
// =======================================================================
// 01 · BANK — iphone, onyx studio, a wallet with a gradient card
// =======================================================================
scene#s01-bank(duration=8 transition=none)
renderer(tone_mapping=None shadow_map=true)
camera(type=perspective fov=32 near=8.5 far=17000 position="0 190 900" look_at="0 90 0" dof_range=500 dof_blur=4.32)
properties
frame(smooth=0.35)
keyframes
kf(time=0 position="60 200 980" look_at="0 90 0" fov=32)
kf(time=1.4 node=s01-phone fill=74 side=front easing=easeInOutCubic)
kf(time=3.2 node=s01-phone fill=74 side=front easing=linear)
kf(time=4.6 node=s01-phone fill=125 side=front offset="0 22 0" easing=easeInOutCubic)
kf(time=6.4 node=s01-phone fill=125 side=front offset="0 -34 0" easing=linear)
kf(time=8 node=s01-phone fill=80 side=front easing=easeInOutCubic)
background(top=#2a2a30 bottom=#08080a)
lights
light(type=ambient color=#ffffff intensity=0.3)
light(type=directional color=#f4f1ea intensity=3.2 position="-340 468 425" cast_shadow=true)
shadow(radius=4 bias=-0.0002 map_size="2048 2048")
camera(near=10 far=3600 left=-900 right=900 top=600 bottom=-300)
light(type=directional color=#c2cad4 intensity=0.7 position="383 -127 340")
light(type=directional color=#d8dee8 intensity=2.4 position="140 300 -540")
environment(hdr="photo_studio_01_2k" as_background=false background_color=#0b0b0b exposure=1.15 blurriness=0.16 intensity=1.0 environment_rotation_y_deg=35)
haze#s01-hz-a(opacity=0.85 color=#2c2d34 size="5200 3000" pulse=0 decay=0 position="-900 900 -1500")
position
0 0 0 0