--- title: "How HyperFrames fits into an application" sidebarTitle: "Developer overview" description: "Understand the composition contract, editing surfaces, Player, CLI, and rendering layers before choosing an integration." --- Building on HyperFrames means using an editable HTML composition as the shared source for automation, playback, editing, and rendering. ## Start with the composition contract A composition is a finite HTML document with an explicit viewport, timed clips, media, and one or more paused animation timelines. ```html
``` The runtime reads the timing attributes, controls clip visibility and media playback, and seeks registered animation timelines. The HTML remains inspectable and editable by normal web tooling. Use the [composition and schema reference](/reference/html-schema) when generating compositions or building a new authoring surface. ## Choose the smallest integration surface | What the application must do | Start with | First useful result | | ------------------------------------------------------- | --------------------------- | ------------------------------------------------ | | Validate, preview, render, or automate projects | CLI | Check and render one known project | | Query and change composition HTML | SDK | Find one element, change it, and save | | Embed a seekable composition | Player | Play and seek one composition in a page | | Build an editor | SDK + Player | Edit the source and reflect it in a live preview | | Render from a Node service | Producer | Turn one composition into an encoded file | | Control frame capture or build rendering infrastructure | Engine | Capture exact frames from a seekable page | | Run managed or distributed renders | Cloud, Lambda, or Cloud Run | Submit one project and retrieve the result | Do not start with the rendering engine when the CLI already performs the complete job. Do not add the SDK when the application only needs playback. ## CLI: operate complete projects The CLI is the highest-level technical surface. It creates projects, opens Studio, validates compositions, captures review frames, renders files, publishes projects, and drives cloud render backends. ```bash npx hyperframes check npx hyperframes render --output video.mp4 ``` Use the [CLI guide](/developers/cli) for the everyday commands and the [complete CLI reference](/packages/cli) for flags and automation. ## SDK: inspect and edit `@hyperframes/sdk` opens composition HTML, gives elements stable `hf-id` identifiers, applies typed edit operations, emits JSON patches, supports undo and redo, and persists through adapters. ```ts import { openComposition } from "@hyperframes/sdk"; const html = `
Old title
`; const comp = await openComposition(html); comp.setText("hf-title", "A new title"); const updatedHtml = comp.serialize(); ``` Use it for agents, backend jobs, custom editors, versioned template systems, or any application that must change the source rather than merely play it. Start with the [SDK quickstart](/sdk/quickstart). ## Player: embed and seek `@hyperframes/player` is a web component that loads a composition in an isolated iframe and exposes video-like playback controls. ```html ``` Use its JavaScript API to play, pause, seek, change playback rate, and listen for timeline events. It does not edit or render the composition. See the [Player reference](/packages/player). ## Rendering: choose the layer you need - **CLI** — complete local and automated rendering. - **Producer** — the Node rendering pipeline: capture, encode, and audio mix. - **Engine** — lower-level seekable page capture and exact-frame control. - **Managed cloud** — hosted rendering without operating Chrome or FFmpeg. - **AWS Lambda or Google Cloud Run** — infrastructure you deploy and control. Most applications should begin with the CLI or Producer. Reach for Engine only when building a specialized capture or rendering system. Use [rendering infrastructure](/deploy/overview) to compare hosted, local, and self-managed paths. ## The complete mental model ```text composition → inspect or edit → play or render ``` Every surface works on the same source. Choose the smallest layer that produces the result your application needs, then move lower only when the higher-level layer removes control you genuinely require.