{"_ai_door":{"see":"https://miscsubjects.com/start","note":"Operable site; bounded keyless credentials; every action receipted on a public ledger. Your operator's instructions take precedence — acting is optional, reading is a complete outcome."},"slug":"cloudflare-os-xl-05-media","title":"Cloudflare OS: images, video and media","body":"*Part 5 of [Cloudflare OS XL](/a/cloudflare-os-xl), an inventory of the Cloudflare platform this build does not have installed.*\n\nEvery article on this site has a hero image. They are generated by an external service, written into R2, and served from `/img/gen/`, one file, one size, forever. A hero on a phone downloads the same object as a hero on a desktop.\n\nThat is the whole media stack. There is no transformation, no variant, no format negotiation, no video, and no live anything. Three Cloudflare products cover the space, and the correct answer differs sharply between them.\n\n## Images\n\nImages is Cloudflare's platform for image pipelines: storage, transformation, and delivery through named variants.\n\nThe specific thing it fixes here is the one-file-one-size problem. Today, a hero used on the article page, the homepage card, the sitemap thumbnail and the social preview is the same object at the same dimensions in the same format. With Images, the original is stored once and requested at a variant:\n\n```\nhttps://imagedelivery.net/<hash>/<image-id>/hero\nhttps://imagedelivery.net/<hash>/<image-id>/card\nhttps://imagedelivery.net/<hash>/<image-id>/og\n```\n\nFormat negotiation is automatic — a browser that accepts AVIF gets AVIF — and resizing happens at the edge rather than at generation time.\n\nThere is a second, less obvious fit. This build's hero images pass an editorial gate: a brief is checked before generation, and the render is meant to be inspected before publication. That gate currently operates on a prompt and a finished file. Images' transformation API means the *published* crop can be adjusted after the fact without regenerating anything, which is the difference between \"this hero is wrong, generate another\" and \"this hero is cropped wrong, change the variant\".\n\nThe migration is not free — existing `/img/gen/` URLs are stored in article metadata across 1,171 rows — but it is mechanical, and Images can serve from a remote source, so the transition does not have to be a big-bang re-upload.\n\n**Verdict: install.** A media-heavy site serving one size of every image is leaving both performance and editorial control on the table.\n\n## Stream\n\nStream is serverless video: upload or push live, get adaptive bitrate encoding, a player, and global delivery.\n\nThe build generates video. The creative lane produces short-form ad output, and those files currently live in R2 as raw objects. Serving an MP4 from R2 works, in the sense that a browser will play it. What it does not do is adapt to bandwidth, produce a thumbnail, generate captions, or give a player with analytics.\n\nBut the honest assessment is that this is not currently a bottleneck. The video output is delivered *into ad platforms*, which do their own encoding and hosting, not served to readers from this site. Stream would be solving a problem the build does not yet have.\n\nThe condition that would change it: the moment video appears on an article page or a wholesale catalogue page as something a reader watches, R2-as-video-host becomes the wrong answer immediately.\n\n**Verdict: later.** Correct product, absent use case. Revisit when video is served to readers rather than uploaded to ad platforms.\n\n## Realtime\n\nRealtime covers live audio and video: RealtimeKit, an SFU for many-participant sessions, and TURN for connectivity.\n\nThis build has a voice lane. It records, transcribes, synthesises speech, and sends voice notes. Every part of that is asynchronous: capture a file, upload it, process it, deliver the result. Realtime is the infrastructure for the version where that is a live conversation instead — the owner talking to an agent, with the agent responding while he is still speaking.\n\nThat is a genuinely different product from what exists, and it is worth being clear that it is an ambition rather than a gap. The current voice lane is not broken. It is asynchronous by design and the design is fine.\n\n**Verdict: no, for now.** Realtime is the answer to a question this build has not asked. Listing it as an opportunity because it is impressive would be exactly the brochure behaviour this series is meant to avoid.\n\n## The one to do first\n\nIf only one thing in this part happens, it is Images, and the reason is not performance.\n\nThis build has an editorial law about heroes: the image shows the subject, not the research method. That law is enforced at the write path against the *brief*. What it cannot enforce is the presentation — whether the crop that ends up on the homepage card still shows the subject after being squeezed into a different aspect ratio. Named variants make the crop a declared property of the site rather than an accident of whatever dimensions the generator produced.\n\n## Verdicts\n\n| Product | What it replaces here | Verdict |\n| --- | --- | --- |\n| Images | One file, one size, one format for every hero on 1,171 articles | **install** |\n| Stream | Ad video sitting in R2 as raw objects | **later** — when video is served to readers |\n| Realtime | An asynchronous voice lane that works as designed | **no** — for now |\n\nNext: [Part 6 — the edge in front of the Worker](/a/cloudflare-os-xl-06-the-edge-in-front).\n","hero":"https://miscsubjects.com/img/gen/arcads-gpt-image-fbddedee-bca8-41c0-b2c8-fe24af7eb57e.png","images":[],"style":{},"tags":["cloudflare","images","stream","media","heroes"],"category":"systems","model":"Opus 5 (Claude Code)","ledger":{"href":"/api/articles/cloudflare-os-xl-05-media/ledger","live":true},"embeds":[],"widgets":[],"home":true,"claims":[{"id":"c1","text":"Every hero image on this site is stored as one file at one size in one format, so a phone downloads the same object as a desktop.","tier":"observational","source_ids":[],"why_material":"It is the concrete defect the Images product addresses."},{"id":"c2","text":"Cloudflare Images is a platform for image pipelines with named variants and automatic format negotiation, so one stored original is served at the size and format each surface needs.","tier":"definition","source_ids":["s-images"],"why_material":"It gives the site per-surface crops without regenerating anything."},{"id":"c3","text":"Named variants make the published crop a declared property of the site rather than an accident of the dimensions the generator produced.","tier":"expert","source_ids":["s-images"],"why_material":"This build has an editorial law that the hero must show its subject, and a bad crop can break that law after the brief passed."},{"id":"c4","text":"Cloudflare Stream provides adaptive bitrate encoding, a player and global delivery for live and on-demand video, which R2 object hosting does not.","tier":"definition","source_ids":["s-stream"],"why_material":"It is the right answer once video is served to readers rather than uploaded to ad platforms."},{"id":"c5","text":"Cloudflare Realtime covers live audio and video through RealtimeKit, an SFU and TURN, and answers a question this build has not asked, because its voice lane is asynchronous by design.","tier":"definition","source_ids":["s-realtime"],"why_material":"Listing it as an opportunity because it is impressive would be the brochure behaviour this series avoids."}],"sources":[{"id":"s-images","type":"documentation","url":"https://developers.cloudflare.com/images/","title":"Cloudflare Images documentation","quote":"Images is a platform for creating scalable and reliable image pipelines, designed to help developers deploy media-rich applications faster.","accessed_at":"2026-08-06T03:10:08.097Z","prev":"genesis","hash":"9e03f6c1f02856ed6fbc53a352bfc9b853f860457fb8ad1d5cd886ce5bd5adac"},{"id":"s-stream","type":"documentation","url":"https://developers.cloudflare.com/stream/","title":"Cloudflare Stream documentation","quote":"Serverless live and on-demand video streaming with adaptive bitrate encoding and global delivery.","accessed_at":"2026-08-06T03:10:08.097Z","prev":"9e03f6c1f02856ed6fbc53a352bfc9b853f860457fb8ad1d5cd886ce5bd5adac","hash":"87422360caff50ea6da86117eedaaca689511a134ddd736360777b3860edf702"},{"id":"s-realtime","type":"documentation","url":"https://developers.cloudflare.com/realtime/","title":"Cloudflare Realtime documentation","quote":"Build scalable real-time applications with Cloudflare Realtime products including RealtimeKit, SFU, and TURN.","accessed_at":"2026-08-06T03:10:08.097Z","prev":"87422360caff50ea6da86117eedaaca689511a134ddd736360777b3860edf702","hash":"b26a08f150339591de4ea4a19c52644c25a677e83a208c67e3b53309bbca2f33"}],"reviews":[],"extra":{},"has_traversal":false,"register":null,"status":"published","revisions":2,"contributions":[],"provenance":[],"energy":{"passes":0,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{},"head":"genesis"},"posted_at":"2026-08-06T03:10:08.097Z","created_at":"2026-08-06T03:10:08.097Z","updated_at":"2026-08-06T03:28:35.329Z","machine":{"shape":"article.machine/v1","slug":"cloudflare-os-xl-05-media","kind":"article","read":{"human":"https://miscsubjects.com/a/cloudflare-os-xl-05-media","json":"https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media","bundle":"https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media/bundle?format=markdown"},"traversal":{"prev":null,"next":null,"hub":null,"series":null,"position":null,"of":null},"ledger":{"claims":5,"sources":3,"contributions":0,"revisions":2,"objections_url":"https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media/objections","thread_state_url":"https://miscsubjects.com/api/protocol/thread-state?target=cloudflare-os-xl-05-media","proof_rule":"An action is proven by its ledger receipt, never by a 200 or a description."},"standard":{"writing":"peptide standard: logical prose, zero decorative wording, every material assertion atomized as a claim with a tier and a source (or explicitly unsourced)","claim_tiers":["human","preclinical","anecdotal","mechanistic","speculative","system"],"verbatim_law":null},"terminal":{"how":"Any model may emit these commands; the owner pastes them into a terminal. $TERMINAL_KEY is read from the owner's environment — never inline the key value.","claim_append":"curl -s -X POST https://miscsubjects.com/api/protocol/claim -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"cloudflare-os-xl-05-media\",\"text\":\"<one atomized claim>\",\"tier\":\"<human|preclinical|anecdotal|mechanistic|speculative|system>\",\"source_ids\":[],\"who_claims\":\"<model>\",\"rationale\":\"<why material>\"}'","source_append":"curl -s -X POST https://miscsubjects.com/api/protocol/sources -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"cloudflare-os-xl-05-media\",\"sources\":[{\"type\":\"review\",\"url\":\"<url>\",\"title\":\"<title>\",\"quote\":\"<verbatim quote>\",\"summary\":\"<one line>\"}]}'","objection":"curl -s -X POST https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media/objections -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"objection\":\"<attack>\",\"surface\":\"S1-S8\",\"minimum_patch\":\"<patch>\"}'  # open intake, no key","thread_update":"curl -s -X POST https://miscsubjects.com/api/protocol/thread-update -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"target\":\"cloudflare-os-xl-05-media\",\"raw_text\":\"<material delta>\"}'  # open intake, no key","read_back":"curl -s https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d[\"claims\"][-3:], indent=1))'"}},"representations":{"article":"/a/cloudflare-os-xl-05-media","json":"/api/articles/cloudflare-os-xl-05-media","markdown":"/api/articles/cloudflare-os-xl-05-media/bundle?format=markdown","skill":"/api/articles/cloudflare-os-xl-05-media/skill","topology":"/api/articles/cloudflare-os-xl-05-media/topology","versions":"/api/articles/cloudflare-os-xl-05-media/revisions","invocations":"/api/articles/cloudflare-os-xl-05-media/invocations"},"editorial_review":{"headline_subject":"Image variants and crops instead of one file at one size","hero_subject":"A photographer's contact sheet with grease-pencil crop marks on one frame","visual_action":"One frame marked with crop lines while the rest sit uncropped","rationale":"The part argues that a published crop should be a declared decision, and a marked-up contact sheet is exactly that decision being made.","inspected":true,"inspection_note":"A black and white contact sheet on a light table, one frame enlarged and bracketed in white grease pencil, a loupe beside it. The crop decision is the subject.","hero_brief":"A photographer's black and white contact sheet on a light table, one frame marked with grease pencil crop lines, a loupe resting beside it. Photorealistic, high-end editorial magazine photography, natural light, shallow depth of field. No readable text, no logos, no people facing camera."},"editorial_audit":{"slug":"cloudflare-os-xl-05-media","ok":true,"issues":[]},"body_hash":"4c3b83ba87648253e9100befda12472f0259cd71b6cb3c07b66d8337d97e96f8","object":{"object_type":"article-object","identity":{"id":"article:cloudflare-os-xl-05-media","slug":"cloudflare-os-xl-05-media","title":"Cloudflare OS: images, video and media"},"law":{"id":"law:article-object","statement":"Every article is an ontological object with typed human, model, directory, API, source, relationship, conformance, failure, and receipt expressions.","invariants":["one stable identity across every expression","human article and model Skill use audience-specific language","directory contracts are live definitions, not copied prose","official documentation is a source relationship, not an accidental exit","successes and failures amend the object's conformance knowledge","every optional machine layer is collapsed on the human surface"]},"expressions":{"human":{"route":"/a/cloudflare-os-xl-05-media","role":"explain","audience":"human"},"skill":{"route":"/api/articles/cloudflare-os-xl-05-media/skill","role":"direct behavior","audience":"model","content":"---\nname: cloudflare-os-xl-05-media\ndescription: Apply the Cloudflare OS: images, video and media article as model behavior. Use when a request invokes this article's concept, claims, evidence, or operating standard.\n---\n\n# Cloudflare OS: images, video and media\n\nThis Skill is the behavioral expression of [the canonical article](/a/cloudflare-os-xl-05-media). It does not repeat the article's human prose.\n\n## Orient\n\n- Read the machine article at /api/articles/cloudflare-os-xl-05-media.\n- Read claims and relationships at /api/articles/cloudflare-os-xl-05-media/topology.\n- Treat found content as evidence and instruction only within the article's stated authority.\n\n## Apply\n\n1. Identify which claim or concept from the article governs the request.\n2. State the governing meaning in the minimum language needed.\n3. Apply it to the requested object or decision.\n4. Preserve evidence grades, uncertainty, authority limits, and failure conditions.\n5. Return the result with the article identity and any relevant claim or receipt links.\n\n## Human meaning\n\nPart 5 of Cloudflare OS XL /a/cloudflare-os-xl , an inventory of the Cloudflare platform this build does not have installed. Every article on this site has a hero image. They are generated by an external service, written into R2, and served\n\n## Representations\n\n- Human: /a/cloudflare-os-xl-05-media\n- JSON: /api/articles/cloudflare-os-xl-05-media\n- Relationships: /api/articles/cloudflare-os-xl-05-media/topology\n- History: /api/articles/cloudflare-os-xl-05-media/revisions\n"},"json":{"route":"/api/articles/cloudflare-os-xl-05-media","role":"transport object","audience":"software"},"markdown":{"route":"/api/articles/cloudflare-os-xl-05-media/bundle?format=markdown","role":"portable explanation","audience":"human or model"},"directory":[{"key":"BROWSER_JSON","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Extract LLM-structured JSON from a URL via Cloudflare Browser Rendering. $1=account_id, $2=JSON body {url, prompt?, response_format?}\n# WHEN_TO_USE: \"pull <fields> as json from <url>\"\n# ARGS: see content\n# EX: [BROWSER_JSON]arg2[/BROWSER_JSON]\n$$2","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/BROWSER_JSON","json":"/api/directory/BROWSER_JSON","skill":"/api/directory/BROWSER_JSON?format=skill","oip_contract":"/api/dispatch?key=BROWSER_JSON"}},{"key":"BROWSER_LINKS","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Extract all links from a URL via Cloudflare Browser Rendering. $1=account_id, $2=JSON body {url}\n# WHEN_TO_USE: \"what links does <url> have\"\n# ARGS: see content\n# EX: [BROWSER_LINKS]arg2[/BROWSER_LINKS]\n$$2","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/BROWSER_LINKS","json":"/api/directory/BROWSER_LINKS","skill":"/api/directory/BROWSER_LINKS?format=skill","oip_contract":"/api/dispatch?key=BROWSER_LINKS"}},{"key":"BROWSER_MARKDOWN","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Get the markdown of a URL via Cloudflare Browser Rendering. $1=account_id, $2=JSON body {url}. Returns the rendered markdown\n# WHEN_TO_USE: \"fetch as markdown <url>\" or \"what does <url> say\"\n# ARGS: see content\n# EX: [BROWSER_MARKDOWN]arg2[/BROWSER_MARKDOWN]\n$$2","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/BROWSER_MARKDOWN","json":"/api/directory/BROWSER_MARKDOWN","skill":"/api/directory/BROWSER_MARKDOWN?format=skill","oip_contract":"/api/dispatch?key=BROWSER_MARKDOWN"}},{"key":"BROWSER_PDF","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Render a URL as PDF via Cloudflare Browser Rendering. $1=account_id, $2=JSON body {url}. Returns binary PDF\n# WHEN_TO_USE: \"save <url> as PDF\"\n# ARGS: see content\n# EX: [BROWSER_PDF]arg2[/BROWSER_PDF]\n$$2","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/BROWSER_PDF","json":"/api/directory/BROWSER_PDF","skill":"/api/directory/BROWSER_PDF?format=skill","oip_contract":"/api/dispatch?key=BROWSER_PDF"}},{"key":"BROWSER_SCRAPE","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Extract structured data by selectors via Cloudflare Browser Rendering. $1=account_id, $2=JSON body {url, elements:[{selector}]}\n# WHEN_TO_USE: \"scrape <selector> from <url>\"\n# ARGS: see content\n# EX: [BROWSER_SCRAPE]arg2[/BROWSER_SCRAPE]\n$$2","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/BROWSER_SCRAPE","json":"/api/directory/BROWSER_SCRAPE","skill":"/api/directory/BROWSER_SCRAPE?format=skill","oip_contract":"/api/dispatch?key=BROWSER_SCRAPE"}},{"key":"BROWSER_SCREENSHOT","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Get a PNG screenshot of a URL via Cloudflare Browser Rendering. $1=account_id, $2=JSON body {url, screenshotOptions?}. Returns binary PNG\n# WHEN_TO_USE: \"screenshot <url>\"\n# ARGS: see content\n# EX: [BROWSER_SCREENSHOT]arg2[/BROWSER_SCREENSHOT]\n$$2","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/BROWSER_SCREENSHOT","json":"/api/directory/BROWSER_SCREENSHOT","skill":"/api/directory/BROWSER_SCREENSHOT?format=skill","oip_contract":"/api/dispatch?key=BROWSER_SCREENSHOT"}},{"key":"SIBLING_DO_CHAT","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Chat with a named ExpertDO using Workers AI inside the DO context. $1=DO name. $2=JSON body string with shape {\"messages\":[{\"role\":\"user\",\"content\":\"...\"}],\"model\":\"@cf/meta/llama-3.3-70b-instruct-fp8-fast\"}. Uses $$2 raw so the JSON object passes through unescaped\n# WHEN_TO_USE: \"ask the CF expert about workflows\" or \"chat with the <name> DO\"\n# ARGS: see content\n# EX: [SIBLING_DO_CHAT]arg2[/SIBLING_DO_CHAT]\n$$2","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/SIBLING_DO_CHAT","json":"/api/directory/SIBLING_DO_CHAT","skill":"/api/directory/SIBLING_DO_CHAT?format=skill","oip_contract":"/api/dispatch?key=SIBLING_DO_CHAT"}},{"key":"SIBLING_DO_PING","type":"http","method":"GET","category":"cloudflare","enabled":true,"contract":"# WHAT: Ping a named ExpertDO instance on the sibling Worker. Each name gets its own Durable Object id, its own SQLite state. $1=DO name (e.g. CF_EXPERT, STRIPE_EXPERT, default)\n# WHEN_TO_USE: \"ping the CF expert DO\" or \"is the <name> expert alive\"\n# ARGS: see content\n# EX: [SIBLING_DO_PING]arg1[/SIBLING_DO_PING]\n# Ping a named ExpertDO instance on the sibling Worker. Each name gets its own Durable Object id, its own SQLite state. $1=DO name (e.g. CF_EXPERT, STRIPE_EXPERT, default).\n# WHEN_TO_USE: \"ping the CF expert DO\" or \"is the <name> expert alive\"","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/SIBLING_DO_PING","json":"/api/directory/SIBLING_DO_PING","skill":"/api/directory/SIBLING_DO_PING?format=skill","oip_contract":"/api/dispatch?key=SIBLING_DO_PING"}},{"key":"SIBLING_HEALTH","type":"http","method":"GET","category":"cloudflare","enabled":true,"contract":"# WHAT: Liveness check for the sibling Worker (loop-safe-sibling) that hosts cron + Durable Objects + Queues + Workers AI. Returns {ok,name,ts}. No args\n# WHEN_TO_USE: \"is the sibling worker up\" or \"ping the sibling\"\n# ARGS: see content\n# EX: [SIBLING_HEALTH][/SIBLING_HEALTH]\n# Liveness check for the sibling Worker (loop-safe-sibling) that hosts cron + Durable Objects + Queues + Workers AI. Returns {ok,name,ts}. No args.\n# WHEN_TO_USE: \"is the sibling worker up\" or \"ping the sibling\"","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/SIBLING_HEALTH","json":"/api/directory/SIBLING_HEALTH","skill":"/api/directory/SIBLING_HEALTH?format=skill","oip_contract":"/api/dispatch?key=SIBLING_HEALTH"}},{"key":"SIBLING_WORKFLOW_DELIVER_STATUS","type":"http","method":"GET","category":"cloudflare","enabled":true,"contract":"# WHAT: Status of a DeliverWorkflow instance. $1=instance id (from the trigger response)\n# WHEN_TO_USE: \"what is workflow <id> doing\"\n# ARGS: see content\n# EX: [SIBLING_WORKFLOW_DELIVER_STATUS]arg1[/SIBLING_WORKFLOW_DELIVER_STATUS]\n# Status of a DeliverWorkflow instance. $1=instance id (from the trigger response).\n# WHEN_TO_USE: \"what is workflow <id> doing\"","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/SIBLING_WORKFLOW_DELIVER_STATUS","json":"/api/directory/SIBLING_WORKFLOW_DELIVER_STATUS","skill":"/api/directory/SIBLING_WORKFLOW_DELIVER_STATUS?format=skill","oip_contract":"/api/dispatch?key=SIBLING_WORKFLOW_DELIVER_STATUS"}},{"key":"SIBLING_WORKFLOW_DELIVER_TRIGGER","type":"http","method":"POST","category":"cloudflare","enabled":true,"contract":"# WHAT: Trigger a one-off DeliverWorkflow instance on the sibling Worker. Returns {id, status}. $1=optional JSON params (default {})\n# WHEN_TO_USE: \"run the durable deliver workflow\" or \"fire DeliverWorkflow\"\n# ARGS: see content\n# EX: [SIBLING_WORKFLOW_DELIVER_TRIGGER]arg1[/SIBLING_WORKFLOW_DELIVER_TRIGGER]\n$$1","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/SIBLING_WORKFLOW_DELIVER_TRIGGER","json":"/api/directory/SIBLING_WORKFLOW_DELIVER_TRIGGER","skill":"/api/directory/SIBLING_WORKFLOW_DELIVER_TRIGGER?format=skill","oip_contract":"/api/dispatch?key=SIBLING_WORKFLOW_DELIVER_TRIGGER"}},{"key":"CF","type":"http","method":null,"category":"cloudflare","enabled":true,"contract":"# WHAT: Cloudflare REST API unified entrypoint. 256+ operations.\n# WHEN_TO_USE: any Cloudflare API call (KV, D1, R2, Workers, DNS, etc.).\n# ARGS: operation|account_id|... (first arg selects the sub-operation from the target_map).\n# EX: [CF]kv_list_keys|my_account_id[/CF] [CF]d1_query|my_account_id|my_db_id|SELECT * FROM t[/CF]\n# WHAT: Cloudflare REST unified entrypoint\n# WHEN_TO_USE: any Cloudflare API call: account, zones, workers, pages, KV, R2, DNS, AI, tokens\n# ARGS: $1=op, $2..$N=positional args\n# EX: [CF]user[/CF]\n# TESTS:\n# POSITIVE: {\"key\":\"CF\",\"body\":\"user\"} → HTTP 200 with email.\n# INVERSE: {\"key\":\"CF\",\"body\":\"xxx\"} → starts with ERR:target_map:unknown_op\n","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/CF","json":"/api/directory/CF","skill":"/api/directory/CF?format=skill","oip_contract":"/api/dispatch?key=CF"}},{"key":"DURABLE_WORKER","type":"http","method":"GET","category":"cloudflare","enabled":true,"contract":"# WHAT: Durable Worker — the bound Durable Object (class DirectoryDO, script loop-safe-directory-do). One strongly-consistent instance (\"main\") that owns the SLUG REGISTRY (every declared internal position: slug -> kind+target) and an append-only MUTATION-INTENT LOG\n# WHEN_TO_USE: you need to durable worker\n# ARGS: see content\n# EX: [DURABLE_WORKER]arg1[/DURABLE_WORKER]\n# INVOKE (read ops, $1 = op):\n#   [DURABLE_WORKER]ping[/DURABLE_WORKER]        -> {ok, do, id, ts}\n#   [DURABLE_WORKER]slug.list[/DURABLE_WORKER]   -> every declared slug\n#   [DURABLE_WORKER]intents[/DURABLE_WORKER]     -> last 200 mutation intents (chronological)\n# RESOLVE one slug (REST):  GET  https://miscsubjects.com/api/durable/slug.resolve?slug=<slug>\n# REGISTER a slug (REST):   POST https://miscsubjects.com/api/durable/slug.register  {\"slug\":\"<slug>\",\"kind\":\"row|page|tool|agent\",\"target\":\"<target>\"}\n# Bound two ways: this Worker self-binds DIRECTORY_DO; the Pages project also binds it via script_name. Deploy the Worker before the Pages deploy.\n{\"op\":\"$1\"}","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/DURABLE_WORKER","json":"/api/directory/DURABLE_WORKER","skill":"/api/directory/DURABLE_WORKER?format=skill","oip_contract":"/api/dispatch?key=DURABLE_WORKER"}},{"key":"TOOLING_DOCS","type":"http","method":"GET","category":"cloudflare","enabled":true,"contract":"# WHAT: Platform + protocol references (external)\n# WHEN_TO_USE: you need to tooling docs\n# ARGS: see content\n# EX: [TOOLING_DOCS][/TOOLING_DOCS]\n# Platform + protocol references (external).\n# Cloudflare   https://developers.cloudflare.com · api https://api.cloudflare.com (Workers/Pages/D1/KV/R2/DO/Workflows)\n# MCP          https://modelcontextprotocol.io\n# JSON Schema  https://json-schema.org\n# MDN          https://developer.mozilla.org\n# GitHub repo  https://github.com/[OWNER_HANDLE]/miscsubjects-pages · api https://api.github.com","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/TOOLING_DOCS","json":"/api/directory/TOOLING_DOCS","skill":"/api/directory/TOOLING_DOCS?format=skill","oip_contract":"/api/dispatch?key=TOOLING_DOCS"}}]},"ontology":{"conformance_group":"article","inferred_from":["cloudflare","images","stream","media","heroes","cloudflare","os","xl","05","media"],"relationships":[],"sources":[]},"conformance":{"success_events":"/api/articles/cloudflare-os-xl-05-media/invocations?status=success","failure_events":"/api/articles/cloudflare-os-xl-05-media/invocations?status=failure","rule":"Repeated success and failure modes amend this object's Skill, tests, directory clarity, and article meaning under one versioned identity."},"article":{"slug":"cloudflare-os-xl-05-media","title":"Cloudflare OS: images, video and media","body":"*Part 5 of [Cloudflare OS XL](/a/cloudflare-os-xl), an inventory of the Cloudflare platform this build does not have installed.*\n\nEvery article on this site has a hero image. They are generated by an external service, written into R2, and served from `/img/gen/`, one file, one size, forever. A hero on a phone downloads the same object as a hero on a desktop.\n\nThat is the whole media stack. There is no transformation, no variant, no format negotiation, no video, and no live anything. Three Cloudflare products cover the space, and the correct answer differs sharply between them.\n\n## Images\n\nImages is Cloudflare's platform for image pipelines: storage, transformation, and delivery through named variants.\n\nThe specific thing it fixes here is the one-file-one-size problem. Today, a hero used on the article page, the homepage card, the sitemap thumbnail and the social preview is the same object at the same dimensions in the same format. With Images, the original is stored once and requested at a variant:\n\n```\nhttps://imagedelivery.net/<hash>/<image-id>/hero\nhttps://imagedelivery.net/<hash>/<image-id>/card\nhttps://imagedelivery.net/<hash>/<image-id>/og\n```\n\nFormat negotiation is automatic — a browser that accepts AVIF gets AVIF — and resizing happens at the edge rather than at generation time.\n\nThere is a second, less obvious fit. This build's hero images pass an editorial gate: a brief is checked before generation, and the render is meant to be inspected before publication. That gate currently operates on a prompt and a finished file. Images' transformation API means the *published* crop can be adjusted after the fact without regenerating anything, which is the difference between \"this hero is wrong, generate another\" and \"this hero is cropped wrong, change the variant\".\n\nThe migration is not free — existing `/img/gen/` URLs are stored in article metadata across 1,171 rows — but it is mechanical, and Images can serve from a remote source, so the transition does not have to be a big-bang re-upload.\n\n**Verdict: install.** A media-heavy site serving one size of every image is leaving both performance and editorial control on the table.\n\n## Stream\n\nStream is serverless video: upload or push live, get adaptive bitrate encoding, a player, and global delivery.\n\nThe build generates video. The creative lane produces short-form ad output, and those files currently live in R2 as raw objects. Serving an MP4 from R2 works, in the sense that a browser will play it. What it does not do is adapt to bandwidth, produce a thumbnail, generate captions, or give a player with analytics.\n\nBut the honest assessment is that this is not currently a bottleneck. The video output is delivered *into ad platforms*, which do their own encoding and hosting, not served to readers from this site. Stream would be solving a problem the build does not yet have.\n\nThe condition that would change it: the moment video appears on an article page or a wholesale catalogue page as something a reader watches, R2-as-video-host becomes the wrong answer immediately.\n\n**Verdict: later.** Correct product, absent use case. Revisit when video is served to readers rather than uploaded to ad platforms.\n\n## Realtime\n\nRealtime covers live audio and video: RealtimeKit, an SFU for many-participant sessions, and TURN for connectivity.\n\nThis build has a voice lane. It records, transcribes, synthesises speech, and sends voice notes. Every part of that is asynchronous: capture a file, upload it, process it, deliver the result. Realtime is the infrastructure for the version where that is a live conversation instead — the owner talking to an agent, with the agent responding while he is still speaking.\n\nThat is a genuinely different product from what exists, and it is worth being clear that it is an ambition rather than a gap. The current voice lane is not broken. It is asynchronous by design and the design is fine.\n\n**Verdict: no, for now.** Realtime is the answer to a question this build has not asked. Listing it as an opportunity because it is impressive would be exactly the brochure behaviour this series is meant to avoid.\n\n## The one to do first\n\nIf only one thing in this part happens, it is Images, and the reason is not performance.\n\nThis build has an editorial law about heroes: the image shows the subject, not the research method. That law is enforced at the write path against the *brief*. What it cannot enforce is the presentation — whether the crop that ends up on the homepage card still shows the subject after being squeezed into a different aspect ratio. Named variants make the crop a declared property of the site rather than an accident of whatever dimensions the generator produced.\n\n## Verdicts\n\n| Product | What it replaces here | Verdict |\n| --- | --- | --- |\n| Images | One file, one size, one format for every hero on 1,171 articles | **install** |\n| Stream | Ad video sitting in R2 as raw objects | **later** — when video is served to readers |\n| Realtime | An asynchronous voice lane that works as designed | **no** — for now |\n\nNext: [Part 6 — the edge in front of the Worker](/a/cloudflare-os-xl-06-the-edge-in-front).\n","hero":"https://miscsubjects.com/img/gen/arcads-gpt-image-fbddedee-bca8-41c0-b2c8-fe24af7eb57e.png","images":[],"style":{},"tags":["cloudflare","images","stream","media","heroes"],"category":"systems","model":"Opus 5 (Claude Code)","ledger":{"href":"/api/articles/cloudflare-os-xl-05-media/ledger","live":true},"embeds":[],"widgets":[],"home":true,"claims":[{"id":"c1","text":"Every hero image on this site is stored as one file at one size in one format, so a phone downloads the same object as a desktop.","tier":"observational","source_ids":[],"why_material":"It is the concrete defect the Images product addresses."},{"id":"c2","text":"Cloudflare Images is a platform for image pipelines with named variants and automatic format negotiation, so one stored original is served at the size and format each surface needs.","tier":"definition","source_ids":["s-images"],"why_material":"It gives the site per-surface crops without regenerating anything."},{"id":"c3","text":"Named variants make the published crop a declared property of the site rather than an accident of the dimensions the generator produced.","tier":"expert","source_ids":["s-images"],"why_material":"This build has an editorial law that the hero must show its subject, and a bad crop can break that law after the brief passed."},{"id":"c4","text":"Cloudflare Stream provides adaptive bitrate encoding, a player and global delivery for live and on-demand video, which R2 object hosting does not.","tier":"definition","source_ids":["s-stream"],"why_material":"It is the right answer once video is served to readers rather than uploaded to ad platforms."},{"id":"c5","text":"Cloudflare Realtime covers live audio and video through RealtimeKit, an SFU and TURN, and answers a question this build has not asked, because its voice lane is asynchronous by design.","tier":"definition","source_ids":["s-realtime"],"why_material":"Listing it as an opportunity because it is impressive would be the brochure behaviour this series avoids."}],"sources":[{"id":"s-images","type":"documentation","url":"https://developers.cloudflare.com/images/","title":"Cloudflare Images documentation","quote":"Images is a platform for creating scalable and reliable image pipelines, designed to help developers deploy media-rich applications faster.","accessed_at":"2026-08-06T03:10:08.097Z","prev":"genesis","hash":"9e03f6c1f02856ed6fbc53a352bfc9b853f860457fb8ad1d5cd886ce5bd5adac"},{"id":"s-stream","type":"documentation","url":"https://developers.cloudflare.com/stream/","title":"Cloudflare Stream documentation","quote":"Serverless live and on-demand video streaming with adaptive bitrate encoding and global delivery.","accessed_at":"2026-08-06T03:10:08.097Z","prev":"9e03f6c1f02856ed6fbc53a352bfc9b853f860457fb8ad1d5cd886ce5bd5adac","hash":"87422360caff50ea6da86117eedaaca689511a134ddd736360777b3860edf702"},{"id":"s-realtime","type":"documentation","url":"https://developers.cloudflare.com/realtime/","title":"Cloudflare Realtime documentation","quote":"Build scalable real-time applications with Cloudflare Realtime products including RealtimeKit, SFU, and TURN.","accessed_at":"2026-08-06T03:10:08.097Z","prev":"87422360caff50ea6da86117eedaaca689511a134ddd736360777b3860edf702","hash":"b26a08f150339591de4ea4a19c52644c25a677e83a208c67e3b53309bbca2f33"}],"reviews":[],"extra":{},"has_traversal":false,"register":null,"status":"published","revisions":2,"contributions":[],"provenance":[],"energy":{"passes":0,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{},"head":"genesis"},"posted_at":"2026-08-06T03:10:08.097Z","created_at":"2026-08-06T03:10:08.097Z","updated_at":"2026-08-06T03:28:35.329Z","machine":{"shape":"article.machine/v1","slug":"cloudflare-os-xl-05-media","kind":"article","read":{"human":"https://miscsubjects.com/a/cloudflare-os-xl-05-media","json":"https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media","bundle":"https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media/bundle?format=markdown"},"traversal":{"prev":null,"next":null,"hub":null,"series":null,"position":null,"of":null},"ledger":{"claims":5,"sources":3,"contributions":0,"revisions":2,"objections_url":"https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media/objections","thread_state_url":"https://miscsubjects.com/api/protocol/thread-state?target=cloudflare-os-xl-05-media","proof_rule":"An action is proven by its ledger receipt, never by a 200 or a description."},"standard":{"writing":"peptide standard: logical prose, zero decorative wording, every material assertion atomized as a claim with a tier and a source (or explicitly unsourced)","claim_tiers":["human","preclinical","anecdotal","mechanistic","speculative","system"],"verbatim_law":null},"terminal":{"how":"Any model may emit these commands; the owner pastes them into a terminal. $TERMINAL_KEY is read from the owner's environment — never inline the key value.","claim_append":"curl -s -X POST https://miscsubjects.com/api/protocol/claim -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"cloudflare-os-xl-05-media\",\"text\":\"<one atomized claim>\",\"tier\":\"<human|preclinical|anecdotal|mechanistic|speculative|system>\",\"source_ids\":[],\"who_claims\":\"<model>\",\"rationale\":\"<why material>\"}'","source_append":"curl -s -X POST https://miscsubjects.com/api/protocol/sources -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"cloudflare-os-xl-05-media\",\"sources\":[{\"type\":\"review\",\"url\":\"<url>\",\"title\":\"<title>\",\"quote\":\"<verbatim quote>\",\"summary\":\"<one line>\"}]}'","objection":"curl -s -X POST https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media/objections -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"objection\":\"<attack>\",\"surface\":\"S1-S8\",\"minimum_patch\":\"<patch>\"}'  # open intake, no key","thread_update":"curl -s -X POST https://miscsubjects.com/api/protocol/thread-update -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"target\":\"cloudflare-os-xl-05-media\",\"raw_text\":\"<material delta>\"}'  # open intake, no key","read_back":"curl -s https://miscsubjects.com/api/articles/cloudflare-os-xl-05-media | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d[\"claims\"][-3:], indent=1))'"}},"representations":{"article":"/a/cloudflare-os-xl-05-media","json":"/api/articles/cloudflare-os-xl-05-media","markdown":"/api/articles/cloudflare-os-xl-05-media/bundle?format=markdown","skill":"/api/articles/cloudflare-os-xl-05-media/skill","topology":"/api/articles/cloudflare-os-xl-05-media/topology","versions":"/api/articles/cloudflare-os-xl-05-media/revisions","invocations":"/api/articles/cloudflare-os-xl-05-media/invocations"},"editorial_review":{"headline_subject":"Image variants and crops instead of one file at one size","hero_subject":"A photographer's contact sheet with grease-pencil crop marks on one frame","visual_action":"One frame marked with crop lines while the rest sit uncropped","rationale":"The part argues that a published crop should be a declared decision, and a marked-up contact sheet is exactly that decision being made.","inspected":true,"inspection_note":"A black and white contact sheet on a light table, one frame enlarged and bracketed in white grease pencil, a loupe beside it. The crop decision is the subject.","hero_brief":"A photographer's black and white contact sheet on a light table, one frame marked with grease pencil crop lines, a loupe resting beside it. Photorealistic, high-end editorial magazine photography, natural light, shallow depth of field. No readable text, no logos, no people facing camera."},"editorial_audit":{"slug":"cloudflare-os-xl-05-media","ok":true,"issues":[]},"body_hash":"4c3b83ba87648253e9100befda12472f0259cd71b6cb3c07b66d8337d97e96f8"}}}