Beersy
BRC-224

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.

sun-dive4 min read
audioscene1scene2scene3

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 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 , 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 / "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:

  1. Store once, reference many. A clip used at five moments is one stored component plus five cue lines — not five copies.
  2. 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>).
  3. 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.
  4. Standard media, universal decode. No bespoke codec; anything that plays WebP/FLAC/MP3 can implement a player.
  5. 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

  1. Two file types.

    • .bmfBlock Media Format: the manifest — a timeline that references media components (by on-chain txid/ or by local filename) with start-time cues.
    • .bmcBlock Media Container: a ZIP holding exactly one .bmf plus the media files it references by local name — the portable, self-contained form. A .bmc contains a .bmf + media; a standalone .bmf references on-chain content. One spec, two delivery forms.
  2. Manifest encodings. A .bmf MAY 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: value headers:

    # 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.webp
    

    B. 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" }
      ]
    }
    
  3. Fields.

    • bmf — format version integer (currently 0).
    • audio — the master audio track, by tx (on-chain) and/or name (local).
    • tempo — OPTIONAL BPM metadata to aid beat-aligned authoring.
    • scenes[] — ordered : t = scene start in seconds; tx = on-chain reference (txid/outpoint of the minted component); name = filename/ (used inside a .bmc, or as a human label).
  4. 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.

  5. Resolution algorithm. To resolve a .bmf a player MUST:

    1. Load the manifest (cue or JSON).
    2. Resolve audio and each scene reference: if tx is present, fetch that component from chain (raw tx → extract media payload); else read name from the accompanying .bmc / folder.
    3. Play the audio; at each cue time, switch to that scene and restart its loop; hold until the next cue.
  6. 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.

  7. MIME types (informal). .bmfapplication/x.bmf (or application/vnd.blockmedia+json when JSON); .bmcapplication/x.bmc (or application/vnd.blockmedia+zip). The x. experimental tree is used today; a vnd. 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

  1. Authoring tool — a local-first studio ("Pole Position") whose music-video timeline exports a .bmc (media files + a .bmf cue manifest).
  2. 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.
  3. Reference repository (MIT): https://github.com/sun-dive/block-media-format — full v0 spec, examples, and the .bmf / .bmc definitions.
  4. 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 .bmf by {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 .bmc set, each member addressable by {tx, name}: 2722b170aace00cc992bf671dc458f30588e96ad4a5992308c46dc01f574e5bc (members power-low, power-medium, power-high).
    • Supersonic master audio: 6059dfef894d83be6df1ca858e7d644dfbc1256b7611f98abb1a1111765ba0e5.

The Implementations section should contain information about places where the standard is implemented, or examples of its implementation.

References

The References section should contain any footnotes used throughout the document.

Was this helpful?

Search Beersy

Search standards by number, title, author or topic