How was the Quran compiled? — credits
How the Quran went from palm stalks, thin stones, leather, bone and people's hearts to one standard copy, copied and sent to every region: Abu Bakr's (ra) gathering after al-Yamama, Uthman's (ra) standard copies, and the teachers who carried the recitation. A hand-made-style paper-collage animation, rendered live in your browser with plain JavaScript and canvas.
Sources for the story
- Sahih al-Bukhari 4990: "Call Zayd for me, and let him bring the board, the inkpot and the shoulder blade"; Ibn Umm Maktum (ra) and the words "other than the disabled" (also Bukhari 2831)
- Sunan Abi Dawud 2507 (hasan sahih, al-Albani): Zayd (ra) wrote on a shoulder blade; Ibn Umm Maktum (ra), a blind man, asked; "Read, Zayd"; the added words fitted "by a crack in a shoulder blade"
- Sahih al-Bukhari 5 and Quran 75:16–19: the Prophet ﷺ moving his lips; Ibn Abbas (ra): "its gathering in your heart"
- Sahih al-Bukhari 4982 and 3902: revelation over about 23 years, abundant before his death
- Ibn Hajar, Fath al-Bari 9/12–22, and al-Suyuti, al-Itqan 1/202–211: written in his lifetime but not gathered in one place; why it was not bound; Zayd's (ra) rule; the regional copies; "Abu Bakr gathered the Quran, Uthman gathered the people"
- Sahih al-Bukhari 4999: "Take the Quran from four"
- Sahih al-Bukhari 3623–3624 and 4998: the review once a year, twice in his last year
- al-Dhahabi, Tarikh al-Islam and al-'Ibar; Ibn al-Athir, Usd al-Ghaba; Ibn Sa'd, al-Tabaqat: the date of al-Yamama and Salim (ra) among those killed
- Sahih al-Bukhari 4986 (also 4679, 7191): Umar's (ra) fear, Abu Bakr's (ra) hesitation, Zayd (ra) chosen, "moving one of the mountains", palm stalks, thin stones and the chests of men, the end of Surat al-Tawba with Abu Khuzayma (ra), the sheets with Abu Bakr, Umar and Hafsa (ra)
- Abu Shama, al-Murshid al-Wajiz 1/57–58: Zayd (ra) required writing made before the Prophet ﷺ, not memory alone
- Ibn Abi Dawud, Kitab al-Masahif 1/48 (chain hasan, Ibn Hajar): Ali (ra) on Abu Bakr (ra), "the first to gather it between the two boards"
- Sahih al-Bukhari 4987: Hudhayfa's (ra) warning, the sheets borrowed from Hafsa (ra), the four copyists, "the tongue of Quraysh", copies to every region, the other copies burned
- Ibn Abi Dawud, Kitab al-Masahif (Suwayd ibn Ghafala; chain sahih, Ibn Hajar): Ali (ra), "only with the counsel of all of us"; Mus'ab ibn Sa'd (isnad sahih, Ibn Kathir): Uthman (ra): "Did you hear it from the Messenger of Allah ﷺ?" and "it pleased them"
- Ibn Battal, Sharh Sahih al-Bukhari, on Bukhari 4987: burning as a way of honouring writing that carries Allah's name; al-Damamini, Masabih al-Jami' 8/514–515, and Fath al-Bari 9/20 on "burned" or "torn"
- Sahih Muslim 2462: Ibn Mas'ud (ra), "According to whose reading do you order me to recite?"; Ibn Kathir, Tafsir 1/31–41, and al-Dhahabi, Siyar 1/487: his objection and later acceptance
- Abu 'Ubayd, Fada'il al-Qur'an, and al-Dani, al-Muqni': the small differences between the regional copies (Quran 2:132)
- Ibn al-Jazari, al-Nashr fi al-Qira'at al-'Ashr 1/7, 1/9, 1/271: copies left bare of dots and vowel marks to carry what was soundly transmitted; maaliki and maliki; the three conditions of an accepted reading
- al-Dani, al-Muhkam fi Naqt al-Masahif 1/3–7: Abu al-Aswad al-Du'ali's vowel dots and al-Khalil's vowel signs
- Sahih al-Bukhari 5027: "The best of you are those who learn the Quran and teach it"; al-Sulami's forty years in Kufa (al-Mizzi, Tahdhib al-Kamal 14/407; al-Dhahabi, Siyar 4/269)
- al-Dhahabi, Ma'rifat al-Qurra' al-Kibar 1/52: the chains of Hafs and Shu'ba from Asim
- King Fahd Complex, Reading according to Warsh, and A. Brockett (St Andrews, 1985): Hafs in most printed copies, Warsh in North and West Africa
- University of Birmingham, The Birmingham Quran manuscript: FAQs: parchment radiocarbon-dated 568–645 CE (95.4%)
- M. Marx and T. Jocham, Radiocarbon (14C) Dating of Qur'an Manuscripts (Brill, 2019): what radiocarbon dates, and the gap before writing
- M. van Putten, 'The Grace of God' as Evidence for a Written Uthmanic Archetype, BSOAS 82.2 (2019): a shared spelling in early manuscripts
- Sahih Muslim 2865a: "a Book that water does not wash away"
- UNICEF Nigeria (2026), Where faith meets future, and the Horniman Museum: wooden writing boards in Quran schools today
- Quran translations: Sahih International (75:17, 4:95, 9:128, 2:132); 15:9 and 1:4 in our own plain rendering
Out of respect, the Prophet ﷺ, the other prophets and the angels, peace be upon them, are never depicted; the Prophet's ﷺ wives appear only through places and objects; people are shown only from behind, with no faces.
Made with
- Narration: Google Gemini 3.8 Flash TTS (voice “Algieba”), directed and edited for this film.
- Illustrations: Google Gemini 3.1 Flash Image (backgrounds) and OpenAI GPT Image 2.5 (cut-outs), art-directed and reviewed frame by frame.
- Typefaces (SIL Open Font License): Caveat Brush, Caveat, Patrick Hand, Aref Ruqaa.
- Animation engine, sound design and mix: written for this series.
Sound
No music is used. All sound effects are CC0 unless noted.
- amb_city_dawn_distant — AMB CITY, DAWN, BACKYARD, DISTANT-TRAFFIC, BIRDS (Freesound) by tferrino, CC0 1.0. Edits: source 33.0-57.0 s (after a passing car at 0-5 s and 25-28 s; no voices, horns, sirens, bells or call to prayer in this window, judge + envelope checked); highpass=f=70:poles=2; present-day city at dawn, distant traffic hush and birds; 20 s seamless loop (2 s crossfade), -26 LUFS; 48k/16-bit
- amb_copy_room_pens — house `amb_quiet_room_day.wav` (#837996, bruno.auzet, CC0) + Quill and Parchment.WAV (Freesound) by bruno.auzet + Nickh69, CC0 1.0 (both). Edits: room tone looped x2 (48 s, seamless) + quill strokes from source 4.0-50.0 s: highpass=f=400, lowpass=f=2600, aecho 41/73/109 ms (pushed back into the room), soft-clipped at +9.5 dB over its active rms, ~22 dB under the room, faded at the seam; a quiet copying room with far, sparse pen strokes; -26 LUFS; 48k/16-bit
- amb_creek_flowing — WATRFlow-Ext_Small FLowing Creek_HvD_OwSFX_Loop (Freesound) by Hano_van_Dalen, CC0 1.0. Edits: source 10.0-70.0 s; highpass=f=60:poles=2; small flowing creek (the full wadi river); 40 s seamless loop, -24 LUFS; 48k/16-bit
- amb_desert_dusk_wind — #666175 "Wind in dry tall grass bulrush type, close recording with muffled air sometimes, gust of wind, far away tree, recorded in Arivaca Road desert in Arizona" by felix.blume, CC0 1.0. Edits: cut 92.0-114.5 s; HPF 100 Hz; 20 s seamless loop (2 s crossfade), -26 LUFS
- amb_jm_hollow_wind — #843069 "A light breeze, the rustle of reeds. The rustle of dry grass" by ReflektWave, CC0 1.0. Edits: cut 12.0-36.0 s; HPF 120 Hz x2, spike limiter; 22 s seamless loop (2 s crossfade), -24 LUFS
- amb_jm_lane_quiet — #653946 "Quiet breeze with bird singing softly, insect noises, a horse neighs far sometimes" by felix.blume, CC0 1.0. Edits: cut 25.0-49.0 s (no horse/insect buzz in this window); HPF 150 Hz x2; 22 s seamless loop (2 s crossfade), -24 LUFS
- amb_kaaba_court_open — Monastery ruins_3(birds, pigeons, wings, wind).wav (Freesound) by o_ciz, CC0 1.0. Edits: source 31.0-55.0 s (no crow caw or tapping in this window); highpass=f=90:poles=2, lowpass=f=8000:poles=2; open stone court in light wind with distant doves, no crowd or voices (the Ka'ba court, 8 AH); 20 s seamless loop (2 s crossfade), -26 LUFS; 48k/16-bit. The source is quiet (about -63 dBFS), so the loop carries a soft air/hiss floor: keep it at -28 dB or lower
- amb_oasis_palms — #640526 "Dried_Banana_Leaves.wav" by gokalp_gonen, CC0 1.0. Edits: cut 55.00-79.20 s (bird-free stretch); HPF 120 Hz; -26 LUFS, 1.5 s fade-in/2 s fade-out
- amb_palm_orchard_breeze — #423800 "Wind through Palm Trees.wav" by klangfabrik, CC0 1.0; #517526 "dove calling with out other side noise" by idreesbari, CC0 1.0. Edits: palm wind src 4.0-78.5 s, HPF 120 Hz, LPF ~4.2 kHz, -3 dB high shelf, -4 dB at 560 Hz; 72 s seamless loop (2.5 s crossfade) with slow loop-periodic ±4 dB swells that darken in the lulls; 3 laughing-dove phrases (src 0.60-1.75, 6.15-7.60, 17.50-18.90 s; band-limited 250 Hz-3 kHz, short diffuse echo) placed at 11.0 / 34.5 / 55.0 s; -24 LUFS. Made for fasting-monday-thursday (Madinah palm orchard, late morning)
- amb_palm_wind — #423800 "Wind through Palm Trees.wav" by klangfabrik, CC0 1.0. Edits: source 35-83 s; HPF 120 Hz (removes mic buffeting); 45 s seamless loop (2 s crossfade), -24 LUFS
- amb_predawn_room — #210091 "room small night" by Yuval, CC0 1.0. Edits: source 270-323 s (clean stretch, no footsteps); HPF 50 Hz, LPF 9 kHz; 50 s seamless loop (2 s crossfade), -26 LUFS
- amb_quiet_room_day — #837996 "windy roomtone ile callot" by bruno.auzet, CC0 1.0. Edits: cut 190.0-216.0 s; HPF 40 Hz, LPF 14 kHz; 24 s seamless loop (2 s crossfade), -26 LUFS
- amb_sahel_morning_yard — Un matin à Matam /Morning at Matam.wav (Freesound) by indieground, CC0 1.0. Edits: source 275.0-316.0 s (birds and distant, indistinct children; no intelligible speech, engines, squeaky pump, donkey, music, Athan or recitation in this window: blind judge x2 + a pitched-voice detector, longest voiced run 0.21 s); highpass=f=90:poles=2, lowpass=f=11000:poles=2; a Sahel village morning (stands in for northern Nigeria); 38 s seamless loop (2 s crossfade), -26 LUFS; 48k/16-bit
- sfx_blind_unroll — #532775 "roller shade up.mp3" by twinpix, CC0 1.0. Edits: full 0.00-1.05 s; HPF 80 Hz; trim, fades, peak -1 dBFS
- sfx_bone_tap — #640602 "Small_Wooden_Box_Hits.wav" by gokalp_gonen, CC0 1.0. Edits: cut 26.38-26.75 s; left channel only (dual mono), HPF 100 Hz; trim, fades, peak -1 dBFS
- sfx_card_thud — #824385 "Softcover book hitting table" by nyxlitten, CC0 1.0. Edits: cut 3.80-4.25 s; HPF 60 Hz; trim, fades, peak -1 dBFS
- sfx_clay_knock — #513775 "putting coffee mug to table.wav" by lartti, CC0 1.0. Edits: cut 0.70-1.15 s; HPF 60 Hz; trim, fades, peak -1 dBFS
- sfx_dream_shimmer_short — synthesized for this series: Same engine, 1.6 s dense sparkle sting.
- sfx_jm_basket — #288943 "suitcase-down-4.aif" (wicker case set down) by toefur, CC0 1.0. Edits: cut 0.00-0.85 s; HPF 60 Hz; trim, fades, peak -1 dBFS
- sfx_jm_stone_slide — #558254 "Heavy Stone Push" by msavioti, CC0 1.0. Edits: full 0.00-1.13 s; HPF 40 Hz; trim, fades, peak -1 dBFS
- sfx_leather_slap — #545545 "leather couch sounds impact thud strike.wav" by rsellick, CC0 1.0. Edits: cut 24.47-24.85 s; HPF 60 Hz; trim, fades, peak -1 dBFS
- sfx_palm_stalk_rasp — #403653 "Wood_Sliding_Various-Objects.wav" by LamaMakesMusic, CC0 1.0. Edits: cut 10.20-11.95 s; HPF 80 Hz; trim, fades, peak -1 dBFS
- sfx_paper_rustle_1 — #181774 "rustling paper.wav" by keweldog, CC0 1.0. Edits: cut 0.30-2.55 s; HPF 80 Hz; trim, fades, peak -1 dBFS
- sfx_paper_rustle_2 — #181774 "rustling paper.wav" by keweldog, CC0 1.0. Edits: cut 2.50-4.45 s; HPF 80 Hz; trim, fades, peak -1 dBFS
- sfx_paper_rustle_5 — #211246 "PageRustle" by Tomoyo Ichijouji, CC0 1.0. Edits: cut 0.10-1.90 s; HPF 80 Hz; trim, fades, peak -1 dBFS
- sfx_paper_slide_1 — #464302 "PaperSlide.wav" by eyesonlegs, CC0 1.0. Edits: cut 0.00-1.64 s; HPF 60 Hz,FFT denoise 10 dB (floor -55); trim, fades, peak -1 dBFS
- sfx_paper_slide_2 — #444431 "Sliding Envelope.wav" by MTJohnson, CC0 1.0. Edits: cut 0.20-1.10 s; HPF 80 Hz; trim, fades, peak -3 dBFS
- sfx_paper_tear_1 — #272028 "Ripping Paper" by aldenroth2, CC0 1.0. Edits: cut 0.00-1.96 s; HPF 60 Hz,FFT denoise 8 dB (floor -60); trim, fades, peak -1 dBFS
- sfx_paper_tear_2 — #342541 "Fast Paper Rip" by sgrowe, CC0 1.0. Edits: cut 0.00-0.89 s; HPF 60 Hz; trim, fades, peak -1 dBFS
- sfx_pen_tick_1 — #85703 "Pencil_scibble.aif" (via house `sfx_pencil_scribble_2.wav`) by tmkappelt, CC0 1.0. Edits: one tick cut from sfx_pencil_scribble_2 at 0.545-0.785 s; trim, fades, peak -1 dBFS
- sfx_pen_tick_2 — #85703 "Pencil_scibble.aif" (via house `sfx_pencil_scribble_2.wav`) by tmkappelt, CC0 1.0. Edits: one tick cut from sfx_pencil_scribble_2 at 1.245-1.505 s; trim, fades, peak -1 dBFS
- sfx_pencil_scribble_1 — #257518 "Scribble_short.wav" by waldram, CC0 1.0. Edits: cut 0.00-1.27 s; HPF 150 Hz,FFT denoise 12 dB (floor -50); trim, fades, peak -1 dBFS
- sfx_pencil_scribble_2 — #85703 "Pencil_scibble.aif" by tmkappelt, CC0 1.0. Edits: cut 0.00-3.20 s; HPF 150 Hz,FFT denoise 12 dB (floor -62); trim, fades, peak -1 dBFS
- sfx_roller_thunk — #812363 "Knocking once on wood, single footstep" by CuboRodante, CC0 1.0. Edits: cut 0.35-0.66 s (one dry knock + small settle); HPF 60 Hz; trim, fades, peak -1 dBFS
- sfx_stamp_thump_2 — #470710 "traditional stamp.wav" by I.fekry, CC0 1.0. Edits: cut 0.40-1.20 s; HPF 40 Hz; trim, fades, peak -1 dBFS
- sfx_stone_clack — #319226 "Single rock hitting wood.wav" by worthahep88, CC0 1.0. Edits: cut 0.10-0.38 s; HPF 80 Hz; trim, fades, peak -1 dBFS
- sfx_thread_creak — #862995 "26.07.04- Creaky Playground Swing - Rope Friction 1" by Valerie-Vivegnis, CC0 1.0. Edits: cut 24.50-25.05 s (one creak); HPF 300 Hz; trim, fades, peak -1 dBFS
- sfx_thread_pull — #408578 "27.Needle_thread.wav" by miguelab1998, CC0 1.0. Edits: cut 1.24-1.76 s; HPF 150 Hz; trim, fades, peak -1 dBFS
- sfx_thread_pull_1 — #646586 "Sewing cloth.wav" by heifabaisi, CC0 1.0. Edits: cut 92.55-93.30 s; HPF 100 Hz,FFT denoise 10 dB (floor -60); trim, fades, peak -1 dBFS
- sfx_thread_pull_2 — #646586 "Sewing cloth.wav" by heifabaisi, CC0 1.0. Edits: cut 29.15-30.10 s; HPF 100 Hz,FFT denoise 10 dB (floor -60); trim, fades, peak -1 dBFS
- sfx_tick — synthesized for this series: A short synthesized key click for typing in the Qaf app screen (made for this series). Non-instrumental.
- sfx_water_drop — #174718 "Single Water Drop" by paespedro, CC0 1.0. Edits: cut 0.00-0.46 s; HPF 120 Hz; trim, fades, peak -1 dBFS
- sfx_whoosh_soft_synth — synthesized for this series: White noise through a time-varying log-Gaussian band-pass sweeping 300 Hz -> 2.2 kHz, swell envelope, slow L->R pan.
- sfx_wood_lid_knock — #475294 "Wooden Box: Open / Close 2 (Compilation)" by Sheyvan, CC0 1.0. Edits: cut 7.98-9.00 s; HPF 60 Hz, LPF 17 kHz (removes a 19 kHz whine); trim, fades, peak -1 dBFS