# Bettor POV — moneycanbuy.fun

The completed 30-second film is artifacts/bettor-9x16.mp4. It uses only the supplied screenshots and brand artwork, with typography, animation, fire and an original score composed in code.

## Offline rebuild

Run from the repository root:

```sh
python3 src/bettor/build.py
```

The command regenerates all six named outputs without network access. The complete, deliverable source is in src/bettor/. A matching local copy is placed in artifacts/src/ for the requested artifact layout; src/bettor/ is the repository copy retained by submission.
Tools: Python 3.14 standard library, the included Pillow 13.0.0 wheel for CPython 3.14 on Linux x86-64, FFmpeg and FFprobe. The wheel is extracted into test/scratch/ automatically, so deleting that directory does not affect the rebuild. No package installation or download is needed.
Runtime binaries are machine-provided. The vendored raster library and its license notices are ordinary repository files inside the wheel. This rebuild is targeted to the supplied Linux x86-64 / Python 3.14 runtime.
Encoder build: ffmpeg version 8.0.1-3ubuntu2 Copyright (c) 2000-2025 the FFmpeg developers.

## Output and self-check

| Check | Measured result | Result |
| --- | --- | --- |
| MP4 duration | 30.000 s | PASS |
| Video | 1080 × 1920; H.264 High; yuv420p | PASS |
| Frame count and rate | 720 decoded frames; constant 24 fps; every PTS advances exactly 1/24 s | PASS |
| Audio | AAC; 48000 Hz; 2 channels; 30.000 s presentation duration | PASS |
| File size | 2,778,872 bytes; below 40,000,000 bytes | PASS |
| Browser playback structure | H.264 plus AAC, moov before mdat (faststart) | PASS |
| Caption strings | Every frame's caption matches its exact SCENES text after joining the permitted line break with a space | PASS |
| Decoded middle captions | All 13 compared to the exact text render; maximum mean absolute RGB error 0.1128/255; contact sheet is decoded video | PASS |
| Caption layout | Quicksand weight 700, 92 px, white; one or two lines; fixed baselines throughout each scene | PASS |
| Safe zone | All 720 frames checked; every sixth frame listed in safe-zone.md; zero FAIL entries | PASS |
| Text integrity | All visible native text rectangles stay whole; no text rectangles overlap; tap rings cover no text | PASS |
| Scene separation | Exactly one group per frame; 13 scenes; zero crossfades; every cut is on a 120 BPM beat | PASS |
| Claim transition | Tap starts at frame 576 / 24.000 s; hard cut to claimed at frame 588 / 24.500 s | PASS |
| Motion | Longest decoded identical-frame run before 28.000 s: 1 frames, maximum allowed 12 | PASS |
| Native band geometry | Width at least 920 px; uniform XY scale; zoom at most 1.6 times the 0.8 fit scale; crop only | PASS |
| Source integrity | All used screenshot and brand PNG SHA-256 values match before and after render; no source files modified | PASS |
| Numbers outside bands | Only 24 and 5%, in the exact required captions; both are in NUMBERS | PASS |
| Added card typography | Domain is Quicksand Bold 64 px; no other added card text | PASS |
| Fire | Only scene 12; every frame has different procedural tongues and rising sparks; red, orange and yellow; no band or text intersection | PASS |
| Music structure | One original 120 BPM arrangement, exact drop at 23.000 s and final hit at 28.000 s, UI taps/coin/fire in code | PASS |
| Audio master, final AAC decoded | -14.70 LUFS; -1.45 dBTP; crest 14.695 dB; above −1 dBFS 0.000000% | PASS |

## Composition notes and limits

The title-only dare crop and the timer-only crop exclude author metadata and reward details. The burn crop excludes the destination controls. Source-native icons and native type remain unchanged; the minimum added-text sizes apply to captions and added card text. Native source type is preserved at its uniform image scale.
The supplied wordmark lockup contains a second mascot; its complete lettering is cropped for the final card. The separate requested toad mark is displayed unaltered. Both source PNG files retain their original hashes. The wordmark's lettering is an image, not retyped UI. The domain is also typeset below it as requested.
The existing flame illustration within burn-total.png stays part of the unmodified screenshot. The additional fire effect is independently drawn and changes every frame. No NFT scene is included because none of the thirteen specified scenes calls for one; no NFT file is modified or used.
Captions and images are deliberately isolated on black. Source-native amounts are not rewritten. Added graphics never supply UI or financial claims. The supplied logo's pendant is artwork, not a dollar amount. No people, voice, footage, stock assets or generative models are used.
Audio duration refers to MP4 presentation time. AAC has 16 ms of decoder tail padding, included in the conservative RMS/crest measurements. Loudness and oversampled true peak are measured from the final AAC, not inferred from the source WAV.
The self-check is a local engineering check, not independent certification. Caption verification combines exact source strings, decoded-pixel comparison and inspection of the decoded contact sheet; it is not an OCR claim.

## Scene timing

| Scene | Start–end (s) | Exact caption | Middle frame / time |
| ---: | --- | --- | --- |
| 1 | 0.000–2.000 | nobody will ever do this. | 24 / 1.000 s |
| 2 | 2.000–4.000 | the crowd bets WON'T DO. | 72 / 3.000 s |
| 3 | 4.000–6.000 | you bet WILL DO. | 120 / 5.000 s |
| 4 | 6.000–8.000 | early bets weigh more. | 168 / 7.000 s |
| 5 | 8.000–11.000 | you against everyone. | 228 / 9.500 s |
| 6 | 11.000–13.000 | time runs out. | 288 / 12.000 s |
| 7 | 13.000–15.000 | then a proof lands. | 336 / 14.000 s |
| 8 | 15.000–18.000 | nobody disputes. | 396 / 16.500 s |
| 9 | 18.000–20.500 | 24 hours. tick. tick. | 462 / 19.250 s |
| 10 | 20.500–23.000 | WILL DO wins. | 522 / 21.750 s |
| 11 | 23.000–25.500 | you take their bank. | 582 / 24.250 s |
| 12 | 25.500–28.000 | 5% of all bets burn. | 642 / 26.750 s |
| 13 | 28.000–30.000 | bet against the crowd. | 696 / 29.000 s |

## SHA-256 of every repository input

The hashes cover every asset, font, palette reference, source file and vendored dependency used by the rebuild. Generated outputs and disposable scratch intermediates are not inputs.

| Repository file | SHA-256 |
| --- | --- |
| explainers/brand/colors.md | c10eee873d218890f84f3301e4d3447431719809a7d2ae71ba9b1c22d22d1f82 |
| explainers/brand/fonts/Quicksand-VariableFont_wght.ttf | 39c9b64223561f56aaff6062a6f04063c4fc86809ad6768722c06614d977e1cc |
| explainers/brand/mark-transparent-1024.png | cb2eabccda8b2aaac6ecbe94c3e625ca8e6bb9a251ba5c2d8d2c3e52f10b0738 |
| explainers/brand/wordmark.png | 94fa6c462a8df39bd21e4a90cd72b2da8c13ac89012407ded1be886a45c9527c |
| pov/screens/banana-1d-left.png | c63cfc6ce6df1e7711138adb8957625281f9ef5f6635766840fd8db03255733a |
| pov/screens/banana-banks.png | 08cbca57696dd66654c0b2ed6a0279f008644fdb48f334f0a1d2e8b6c58bafed |
| pov/screens/banana-bet-sheet.png | 6fb05d80488b532875906e739747602d014eb4b4af5c2b5c9a1b3b7fd8565e91 |
| pov/screens/banana-claimed.png | 00a29902ec3b3235b7146c96eda2c1895a20689c07066c37153bf31e8ddbd98f |
| pov/screens/banana-dare-45.png | 26aa06d33eafdf31655fb7e9b403b8761860c9003b2e6f1fcfecbb094db4b46a |
| pov/screens/banana-paused.png | bb29ea17c2927b669ededbb6ff9181328e2636b3c50be53390f4c01c2533ddb6 |
| pov/screens/banana-won-claim.png | 3dc27eed92386c65550b44ebccdac2cde90cf59d68bd4afecc842257eefbd1b1 |
| pov/screens/burn-total.png | 66880fa2623dd94ccb9343e3e9de852dd3fafc6c4b99c5aff478f22b7c78f1e3 |
| src/bettor/audio.py | cdd7ca7b33f9255c9fe94688e6f25509eaedcb23d03eefec79d3c0458a3af1c4 |
| src/bettor/bootstrap.py | 8bd39faa4302510cde73598b7d6eaab7d214a25ab7ef627d62c2221b3a86d1d8 |
| src/bettor/build.py | 1934cf41ada847e32919da854312a67d0b480f899b456c9da553a9276c5cb1d4 |
| src/bettor/compositor.py | 3fdb47681a919626f2421c75ad284a7350c818caaa3f5ffb7eeb4a797f04bb18 |
| src/bettor/screen_text.json | dc47d2f974169b927fb7486d9735499bc5913a12fbf51b8f55655722241082f7 |
| src/bettor/vendor/pillow-13.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | e91c2b1cbeae768c98752e67e717e283d68dae45717b41f2d91eaee648e37b7d |

## Output SHA-256

| Output | SHA-256 |
| --- | --- |
| artifacts/bettor-9x16.mp4 | 04c9739c08eb0ad3e2cdacf804a67eb6bc0c3e9aa747c31069f1b433ff6c31f5 |
| artifacts/contact-sheet.png | c1b77e40b0a399f8d591fc0d2ab6a689c900f937d71630327a8f3fb5e80f5495 |
| artifacts/captions.srt | 8c66f6cca67b7947cacac88c94c3e2ce05778c4d40ddb0dc2379c3451a78d301 |
| artifacts/safe-zone.md | 5b87923cd83b474b4b135eb2fcfa324d7f36ea52dc81d340304cc44f96016a80 |
| artifacts/audio-check.md | a2708896af6845f4284540e12cacec73a5da4fb41f6f237697d3dcf9d1dd74aa |
