URL: /code/apps/media · Id: `page:/code/apps/media`

# Media

> Videos, images and voice made from your records, cut to each site’s format, and finalized only once every claim reads from a live record.

[Videos](https://startupbuilder.dev/business/nouns/video), images and voice made from your records, cut to each site’s format, and finalized only once every claim reads from a live record.

- **System:** [Media](https://startupbuilder.dev/systems/media)
- **Nouns:** 3
- **Verbs:** 6
- **Events:** 6

## Nouns
| Noun | What it is |
| --- | --- |
| [Video](https://startupbuilder.dev/business/nouns/video) | A Video is a timed composition held as data: a timeline of scenes and spoken lines, drafted from records and rendered per format. |
| [File](https://startupbuilder.dev/business/nouns/file) | A File is the stored bytes of an upload or a rendering. |
| [Voice](https://startupbuilder.dev/business/nouns/voice) | A Voice is a reusable synthetic speaking voice, cloned from a consenting speaker or designed from a description, that speech Files are rendered in. |

## Properties
The hub defines each Noun’s core Properties; Media adds the ones a sale needs.

### Video
| Property | Type | What it holds | Defined by |
| --- | --- | --- | --- |
| `status` | `string` | One of `Draft`, `Rendered`, `Final`, or `Superseded`. | The hub |
| `timeline` | `json` | The ordered scenes on a fixed grid, the only timing truth for picture, voice and captions. | The hub |
| `brand` | `brand` | The Brand whose voice, palette and type the Video uses. | The hub |
| `offer` | `offer` | The offer the Video presents, when it presents one. | The hub |
| `cuts` | `File[]` | One render per site format, such as 9:16 for TikTok and 1:1 for a feed. | Media |

### File
| Property | Type | What it holds | Defined by |
| --- | --- | --- | --- |
| `contentType` | `string` | The media type, such as `application/pdf`. | The hub |
| `size` | `integer` | The size in bytes. | The hub |
| `name` | `string` | The file name it was uploaded with. | The hub |
| `visibility` | `string` | Who may read it: `Owner`, `Customer`, or `Public`. The default is `Owner`. | The hub |
| `uploadUrl` | `url` | The signed URL to upload the bytes to, returned by `File.create`. | The hub |
| `madeWith` | `json` | The prompt and reference Files it came from, kept with the File. | Media |

### Voice
| Property | Type | What it holds | Defined by |
| --- | --- | --- | --- |
| `origin` | `string` | `cloned` from a real speaker’s recordings, or `designed` from a description and sounding like no real person. | The hub |
| `speaker` | `person` | The real person a cloned Voice sounds like. | The hub |
| `consent` | `consent` | The speaker’s Consent, recorded in that voice, naming the startup and the uses allowed; required for a cloned Voice. | The hub |
| `scope` | `string` | Who may speak in it: every sibling, one startup, or one customer. | The hub |
| `samples` | `file[]` | The recordings it was trained from, kept forever. | The hub |
| `status` | `string` | `training` until the upstream finishes, `ready` for speech, `retired` once its trained copy is deleted. | The hub |

## Lifecycle
Every move names the Verb that makes it, or the Event it waits on.

### Voice
| State | What it means | Moves to |
| --- | --- | --- |
| `training` (first) | The upstream is training it from the speaker’s recordings. | `ready` on `Voice.trained`; `retired` by [`Voice.retire`](https://startupbuilder.dev/business/nouns/voice/retire) |
| `ready` | Speech Files render in it, within its scope. | `retired` by [`Voice.retire`](https://startupbuilder.dev/business/nouns/voice/retire) |
| `retired` | Its trained copy is deleted at the upstream; its record and every File made in it stay. | None: it ends here. |

## Verbs
| Verb | What it does | Approval |
| --- | --- | --- |
| [`Video.draft`](https://startupbuilder.dev/business/nouns/video/draft) | Writes a Video’s timeline from your records, your Brand and a Template, with a draft mark on every frame. | Runs on its own |
| [`Video.finalize`](https://startupbuilder.dev/business/nouns/video/finalize) | Lifts a Video’s draft mark once every claim it makes reads from a live record, so its cuts can publish. | Runs on its own |
| [`File.generate`](https://startupbuilder.dev/business/nouns/file/generate) | Makes an image, a clip, speech or music from a prompt and your reference Files, and records how it was made. | Runs on its own |
| [`File.edit`](https://startupbuilder.dev/business/nouns/file/edit) | Makes a new File from one you have, by instruction, such as upscaling or animating a still; the original stays. | Runs on its own |
| [`Voice.clone`](https://startupbuilder.dev/business/nouns/voice/clone) | Trains a Voice on a real speaker’s recordings, after the speaker records consent in that same voice. | Runs on its own |
| [`Voice.retire`](https://startupbuilder.dev/business/nouns/voice/retire) | Deletes a Voice’s trained copy and refuses new speech in it, keeping the record and every File it made. | Runs on its own |

## Events
| Event | Emitted by |
| --- | --- |
| `Video.drafted` | [`Video.draft`](https://startupbuilder.dev/business/nouns/video/draft) |
| `Video.finalized` | [`Video.finalize`](https://startupbuilder.dev/business/nouns/video/finalize) |
| `File.generated` | [`File.generate`](https://startupbuilder.dev/business/nouns/file/generate) |
| `File.edited` | [`File.edit`](https://startupbuilder.dev/business/nouns/file/edit) |
| `Voice.cloned` | [`Voice.clone`](https://startupbuilder.dev/business/nouns/voice/clone) |
| `Voice.retired` | [`Voice.retire`](https://startupbuilder.dev/business/nouns/voice/retire) |

A [Trigger](https://startupbuilder.dev/business/nouns/trigger) can start a Workflow on any of them, and a Watch delivers each to your endpoint, signed ([Events and webhooks](/code/events)).

## Who operates it
| Part | Media |
| --- | --- |
| Accountable | [Content lead](https://startupbuilder.dev/agents/marketing/content-lead) |
| Also calls its Verbs | [Paid Media Manager](https://startupbuilder.dev/agents/marketing/paid-media-manager) |
| Seat | An agent holds each seat until you seat a person in it. |
| Asks you first | None of its Verbs: each runs within its seat’s Limits |

## Integrations
[YouTube](/code/integrations/youtube) · [TikTok](/code/integrations/tiktok) · [Instagram](/code/integrations/instagram)

## Import and export
| Direction | What | How |
| --- | --- | --- |
| Import | Your product shots and recordings | `File.edit` works from any File you upload |
| Export | Every cut, at its site’s size | `Collection.export` of Files |

## Example
**A walkthrough cut for three sites.**

1. `Video.draft` writes a 45-second walkthrough of the rent ledger from the product’s own records.
2. `Video.finalize` lifts the draft mark once each on-screen number reads from a live record.
3. Cuts render at 9:16 for TikTok and YouTube Shorts and 1:1 for LinkedIn.