---
name: device-roles
description: Explain how two photographed tools divide work, reveal a dashed collaboration link, and emphasize the contributor in an editable video.
version: 1.0.2
category: video
delivery: local
---

# Device Roles

Create an 8.5-second, 1920 × 1080 relational explainer from two local photographs. This is a parameterized two-object composition, with a fixed choreography and editable GSAP/HyperFrames output. It does not turn arbitrary prompts into scenes.

Read [brief requirements](references/brief.md), [motion and review](references/direction.md), and [dependencies](references/dependencies.md). Obtain two raster photographs you have permission to use. Record each permission in `rights`; examples and photos are deliberately outside this package.

Use Node.js 22 and install the exact locked toolchain once:

```sh
npm ci
node scripts/compose.mjs --brief /path/to/brief.json --dest /path/to/new-project --palette mist
node scripts/render.mjs /path/to/new-project /path/to/film.mp4
```

A locally installed Chromium is required for HyperFrames. Set `HYPERFRAMES_BROWSER_PATH` if browser discovery cannot find it. No model service, API credential, or payment is required. Dependencies are pinned by the lockfile; GSAP and fonts are included with their notices. Normal npm installation can run dependency lifecycle scripts. See the known unresolved dependency advisory before installing.

The four palettes are `mist`, `abyss`, `clay`, and `silver`. They keep identical motion. Edit the generated HTML or the input JSON for further changes; regenerate into a fresh destination to preserve prior projects. Only JPEG, PNG and WebP local image inputs are accepted; drawings do not replace photographic subjects. `contain` preserves the full frame; `cover` needs crop review.

Subjects enter separately, the dashed bridge expands, its explanation appears, then the selected contributor receives a short border pulse and a persistent fine outline. Text stays editable. English and CJK choose the bundled fonts automatically. The final state holds for 3.35 seconds. Output is intentionally silent, without an audio editor or mixed soundtrack.

Review the full film at 1×, native frames, the appearance of both subjects, bridge handoffs, zero and reverse seeks, text bounds, and all palettes. Decode and build checks do not constitute visual or user acceptance. Keep the generated asset-rights record with any shared project.
