Block Media Format (BMF) — Composable On-Chain Audio/Video
Audio and video on chain is usually a single large file that cannot be edited, reused in part, or owned by more than one person. This describes it as a short timing document referencing separately owned pieces instead.
Summary
- Why
- Video files bundle their component clips and audio into one opaque blob, so individual pieces can't be independently owned, reused, or credited.
- What
- BRC-224 (Block Media Format, BMF) is a manifest format that describes a video as a timeline of cues pointing to separately owned WebP, FLAC, or MP3 media components instead of one merged file.
- How
- A developer writes or generates a .bmf manifest (LRC-style text or JSON) listing an audio track and timed scene cues, each pointing to a media component either by on-chain txid or by local filename, and a player resolves those references and plays the audio while switching and restarting scene loops on cue.
What this lets you do
- Reference a media clip by on-chain txid instead of duplicating the file
- Compose a video as a timing manifest of scene cues over a master audio track
- Package a manifest and its media into one portable .bmc zip
- Restart looping WebP clips exactly on the beat using cue timestamps
- Build a player using only standard WebP, FLAC and MP3 decoders
Written by claude-sonnet-5 from the specification text. Where the two differ, the original is correct.
Reference for an AI
Everything an assistant needs to answer questions about BRC-224 accurately, including what it depends on.
The specification
Abstract
Block Media Format (BMF) is an open format for composable, on-chain-native audio/video. Instead of one monolithic encoded file, a "video" is expressed as a small timing manifest that references independently-owned media components — each of which can be minted once on-chain, provenanced, and reused many times. BMF defines two file types: .bmf (the manifest / "recipe") and .bmc (a portable ZIP container bundling a .bmf with its media). BMF introduces no new codec — it carries standard WebP, FLAC and MP3 inside — and requires no IANA registration to use. It is the media-composition layer that sits above component-level token/provenance standards.
The Abstract section should concisely describe your proposal at a high-level.
Motivation
Conventional video is a single opaque file: content is duplicated wherever it recurs, and the individual parts (a loop, a stem, the master audio) carry no independent ownership. On a chain that can carry media payloads, each component can instead be its own on-chain asset with its own author and royalty.
BMF exists to make that structure expressible and playable:
- Store once, reference many. A clip used at five moments is one stored component plus five cue lines — not five copies.
- Component-level provenance. Every clip and the song is an owned on-chain asset; a composition is a composition of owned parts, each independently attributable and monetizable. This complements token/provenance standards (e.g. BRC-113, MPT<sup>1</sup>).
- Fully on-chain composable video. When a manifest references components by txid, the "video" is nothing but a tiny manifest; a player fetches each component from chain and sequences it — no fat file anywhere.
- Standard media, universal decode. No bespoke codec; anything that plays WebP/FLAC/MP3 can implement a player.
- Tempo-native authoring. Cues are absolute seconds, so scenes can be placed on the beat.
The Motivation section should let people know the context for your proposal, and why it was written.
Specification
-
Two file types.
.bmf— Block Media Format: the manifest — a timeline that references media components (by on-chain txid/outpoint or by local filename) with start-time cues..bmc— Block Media Container: a ZIP holding exactly one.bmfplus the media files it references by local name — the portable, self-contained form. A.bmccontains a.bmf+ media; a standalone.bmfreferences on-chain content. One spec, two delivery forms.
-
Manifest encodings. A
.bmfMAY be written in either encoding, and a conformant player SHOULD accept both:A. Cue form (LRC-compatible). References components by local filename. Lines are
[mm:ss.cc]<name>, with optional# key: valueheaders:# bmf: 0 # audio: supersonic.mp3 # tempo: 110 [00:00.00]forgotten-control-room.webp [00:04.36]power-low.webp [00:08.72]power-high.webpB. JSON form. Carries on-chain txid references (the pure on-chain form):
{ "bmf": 0, "audio": { "tx": "6059dfef894d83be6df1ca858e7d644dfbc1256b7611f98abb1a1111765ba0e5", "name": "supersonic.mp3" }, "tempo": 110, "scenes": [ { "t": 0.00, "tx": "dff809f6ab5052ed96f7a75e2f9751e88cedcf9aca2e8211b9c46b1ec76de128", "name": "forgotten-control-room" }, { "t": 4.36, "tx": "2722b170aace00cc992bf671dc458f30588e96ad4a5992308c46dc01f574e5bc", "name": "power-low" }, { "t": 8.72, "tx": "2722b170aace00cc992bf671dc458f30588e96ad4a5992308c46dc01f574e5bc", "name": "power-high" } ] } -
Fields.
bmf— format version integer (currently0).audio— the master audio track, bytx(on-chain) and/orname(local).tempo— OPTIONAL BPM metadata to aid beat-aligned authoring.scenes[]— ordered scene cues:t= scene start in seconds;tx= on-chain reference (txid/outpoint of the minted component);name= filename/label (used inside a.bmc, or as a human label).
-
Playback semantics. A scene plays until the next scene's
t. Looping media (e.g. animated WebP) restarts from frame 0 on its cue, so loops stay phase-locked to the beat. -
Resolution algorithm. To resolve a
.bmfa player MUST:- Load the manifest (cue or JSON).
- Resolve
audioand each scene reference: iftxis present, fetch that component from chain (raw tx → extract media payload); else readnamefrom the accompanying.bmc/ folder. - Play the audio; at each cue time, switch to that scene and restart its loop; hold until the next cue.
-
Media constraints. Components MUST use standard, universally-decodable media — WebP (including animated and variable-frame-rate, where a long hold costs a single frame), FLAC, or MP3. BMF defines no new codec.
-
MIME types (informal).
.bmf→application/x.bmf(orapplication/vnd.blockmedia+jsonwhen JSON);.bmc→application/x.bmc(orapplication/vnd.blockmedia+zip). Thex.experimental tree is used today; avnd.registration MAY follow if native OS/browser recognition is ever required.
The Specification section of your proposal should stipulate all information needed to implement the standard, and make up the bulk of the document. Generally, people should be able to create a compatible implementation with only the specification.
Implementations
- Authoring tool — a local-first studio ("Pole Position") whose music-video timeline exports a
.bmc(media files + a.bmfcue manifest). - Player — a smart-NFT player reads the manifest, resolves each component (by txid from chain, or by name from the container), and sequences the scenes to the audio, restarting loops on cue.
- Reference repository (MIT):
https://github.com/sun-dive/block-media-format— full v0 spec, examples, and the.bmf/.bmcdefinitions. - First real-world components (BSV mainnet). The "Supersonic" release ships its building blocks as individually-minted, provenanced, reusable on-chain assets — each resolvable today and composable in a
.bmfby{tx, name}reference<sup>2</sup>:- Forgotten Control Room — an SOS-flicker loop BMF atom:
dff809f6ab5052ed96f7a75e2f9751e88cedcf9aca2e8211b9c46b1ec76de128. - Suited Up — three tube-power loops published as ONE
.bmcset, each member addressable by{tx, name}:2722b170aace00cc992bf671dc458f30588e96ad4a5992308c46dc01f574e5bc(memberspower-low,power-medium,power-high). - Supersonic master audio:
6059dfef894d83be6df1ca858e7d644dfbc1256b7611f98abb1a1111765ba0e5.
- Forgotten Control Room — an SOS-flicker loop BMF atom:
The Implementations section should contain information about places where the standard is implemented, or examples of its implementation.
References
- <a name="footnote-1">1</a>: Merkle Proof Token (MPT) protocol — BRC-113, https://github.com/bitcoin-sv/BRCs
- <a name="footnote-2">2</a>: Block Media Format reference implementation and examples, https://github.com/sun-dive/block-media-format
The References section should contain any footnotes used throughout the document.