A ~10-minute (1920×1080, 25 fps) teaching video on Du'a Abu Hamza al-Thumali (source: Mafātīḥ al-Jinān). It teaches the structure in a big-picture-first, Justin Sung–style way (method only; generic TTS voice, not his voice or likeness).
Files
| Path | What |
|---|---|
dua-abu-hamza-explainer.mp4 |
Final video (H.264 + AAC, with an embedded English subtitle track) |
dua-abu-hamza-explainer.srt |
Subtitles / timed narration |
gen.py |
Generator: scenes, narration script, Arabic quotes, layout, TTS, frame rendering |
build.sh |
Full rebuild: runs gen.py, then muxes with ffmpeg |
../../transcripts/dua-abu-hamza-explainer.txt |
Plain narration transcript |
Outline
- The problem: linear reading = storing items; aim for relationships.
- Layer 1, the logic: "My hope rests on who You are, not on what I have done."
- Layer 2, concepts: two lenses (self → fear, God → hope); swap the measuring stick (أمل hope vs عمل deeds).
- Map: six movements (Foundation, Case for hope, Honest audit, Diagnosis, Mortality, Unbreakable hope) and a fear/hope wave.
- One scene per movement with anchor quotes.
- Study plan (prime, "which lens?", anchor, retrieve, recite) and recap.
How it is built
- Each scene in
gen.pyis HTML with elements taggeddata-s="N"; beat N reveals them (fade-in, SVG paths "draw" in over 10 frames). - Narration per beat comes from
edge-tts(en-US-AndrewMultilingualNeural, rate +4%). Beat length = audio length + 0.55 s (+0.6 s at scene end). - Frames are screenshots from headless Chromium via Playwright; ffmpeg concat assembles video, audio and subtitles.
- Fonts: Amiri (Arabic), Caveat (handwriting), Inter (body).
Caveats
- English renderings of the Arabic are approximate and were written for this video; have them reviewed before sharing.
- The six-movement split is an interpretive reading, not official sections.
- Arabic is shown on screen only, never spoken by TTS (to avoid mispronouncing a prayer).