docs(readme): the demo plays at the top, with sound - #207
Open
wine-fall wants to merge 2 commits into
Open
Conversation
A radio you cannot hear is a README nobody can evaluate. The repo had no demo of any kind — no video, no gif, no audio — so judging murmur meant installing Node 24, ffmpeg, yt-dlp, a Claude subscription and a voice endpoint first. Nobody does that for a project they have not heard. The player goes above the fold, before the prose, with `controls` and without `muted` so a click gives the voice — which is the product. The source is GitHub's attachment CDN, not the repo: a 5.1MB mp4 in git would be carried by every clone forever. A release asset was the first attempt and does not work — `releases/download/...` 302s to release-assets.githubusercontent.com, which is absent from github.com's CSP `media-src`, so the player is blocked in a rendered README. The attachment host is on that allowlist. `poster` and `playsinline` are dropped by GitHub's markdown sanitizer (checked against `gh api /markdown`), so the first frame — the title card — is the poster. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6pPTjtKyjcz4rbDKBPVNe
The first attachment URL was minted by an upload that was never posted, so it 404'd — GitHub keeps the asset only once a comment carrying it exists. This one is served for real: 206, content-type video/mp4. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6pPTjtKyjcz4rbDKBPVNe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A radio you cannot hear is a README nobody can evaluate. The repo had no demo of any kind — no video, no gif, no audio — so judging murmur meant installing Node 24, ffmpeg, yt-dlp, a Claude subscription and a voice endpoint first. Nobody does that for a project they have not heard.
The player goes above the fold, right after the one-line pitch, with
controlsand withoutautoplay, so a click gives the voice.Why the video is hosted, not committed
Three routes were tried. Only one can work, and the reason is GitHub's own CSP:
releases/download/…302s torelease-assets.githubusercontent.com— absent from the allowlistraw.githubusercontent.comis also absent — and a 5MB binary is carried by every clone forevergithub-production-user-asset-6210df.s3.amazonaws.com, which is on the listAn attachment uploaded but never posted does not persist — the first URL minted this way returned a plain
404. The asset is durable only once a comment carrying it exists, so it lives on #206.posterandplaysinlineare dropped by GitHub's markdown sanitizer (checked withgh api /markdown);src,controls,mutedandwidthsurvive. GitHub addsmuteditself, which is why the caption tells the reader to turn the sound on.The file is 5.1MB — the original 1080p recording re-encoded at CRF 30, which a mostly-static dark terminal takes without visible loss (checked on a text crop at 1:45).
Verification
Server side, all confirmed:
curlon the asset:206,content-type: video/mp4, valid ISO Media headermedia-srcallowlist<video>element renders in the README withcontrols— screenshot taken on the branchsecuritypolicyviolationevents fireNot confirmed, and owed to a human: actual playback. The automated browser used for this session will not buffer video at all — it fails identically on a direct top-level navigation to the S3 URL, with no GitHub page and no CSP involved. That points at the harness, not at this change, but it means the one thing that matters was not proven by me.
Before merging, please open the branch README, click play, and confirm you hear the host.
AI coding brief
Original request. The user is promoting murmur overseas and had two stars. They supplied a demo video and asked for it to go in the README. They also asked to confirm the promotion sequence: Reddit and HN karma first, Show HN last.
Manual interventions. One permission gate: minting a durable attachment URL requires posting a public comment on the repo, so the user was asked before anything was posted, and chose #206 over a dedicated issue. Two decisions taken without asking: re-encoding to 5.1MB rather than committing 16.4MB, and renaming the asset after the first upload exposed the internal name
murmur-demo-small.mp4in the player's title bar.Retro. Reading the
media-srcheader before trying anything would have skipped the release-asset attempt entirely — onecurl -Icontained the whole answer. The costlier mistake was trusting a probe over the evidence: injected JavaScript reported the video failing three times and each result was treated as a fact about the change, when the harness itself was the variable. A direct navigation to the raw asset — the control case that isolated it — should have been the second step, not the ninth.🤖 Generated with Claude Code
https://claude.ai/code/session_01P6pPTjtKyjcz4rbDKBPVNe