The person gives a Sefaria link: a topic page (/topics/parashat-…), a text
(/Genesis.25.19) or a sheet. You deliver a narrated, animated video that retells it
so a casual listener can follow, with every claim traceable to a source on that page,
in a visual style the person picks, and with Hebrew words said in Hebrew. One
16:9 file by default; ask about 9:16.
Shape: 2–3 minutes. A 60 s version of a whole parsha was "hard to follow": too much story, too fast. Default to about 400–450 words, about 25 shots of 4–8 s, one narrator at natural speed, in 4–5 chapters. Offer 60 s only as a teaser of one episode. Model spend is about $18–21: cast $0.30, stills $1.80, animation $15, voice $0.30, pronunciation tries $0.10, music $0.50. Labels and the cut are free.
Steps
- Read the source. Sefaria's pages are drawn in the browser, so reading the page
address as text returns only "Loading…". Read the read-only API addresses with your
web-reading tool (nothing is downloaded or run):
- A topic:
sefaria.org/api/v2/topics/<slug>?with_refs=1&with_links=0(slugs vary:parashat-chayei-sarahworked whereparashat-chayei-saracame back empty). - One text:
sefaria.org/api/v3/texts/<Ref>?version=english(spaces as_, verse as., e.g.Bereshit_Rabbah.63.6). The reading tool won't quote long passages: ask for each verse you'll quote on its own, under ~120 characters, and note the translation (Sefaria shows RJPS 2023). Write the list, with refs and exact quotes, tosource/sefaria-sources.md. Check the date withsefaria.org/api/calendars?year=…&month=…&day=…for the coming Shabbat. If the link isn't this week's portion, say so; if they still want it, don't call it "this week's" in the title.
- A topic:
- Script for a casual listener. One line per shot, 10–25 words each:
- Open with the portion's name and what it means, and who the story is about.
- Tell the story in order, in chapters. Explain what a newcomer wouldn't know in a few words, inside the line.
- One commentary per turn of the story, named ("The midrash says…", "Rashi says…"). Drop any that takes too long to explain.
- Quote verses exactly; paraphrase commentary faithfully; add nothing the sources don't say. God never appears as a figure: use light, stars, sky.
- Close warmly ("Shabbat shalom").
- List the Hebrew words the narrator will say (the portion's name above all,
and any Hebrew term or phrase), with how the person wants each said.
Show a table per shot (picture, narration) with the chapters marked. Gate:
the script, the folder and the aspect, in chat; offer the labels (step 10) here.
Save it to
source/script.md.
- Style. Ask, never default. Offer three or four looks as outcomes (claymation, paper-cut stop-motion, watercolour storybook, 2D hand-drawn, or their own idea). If an earlier portion's video exists in the same folder of projects, offer its style as the series match. Write ONE style line and keep it identical in every image prompt.
- Cast. One lineup still of every recurring character, full body, side by side
on a plain backdrop, nano banana 2.1 text-to-image, 16:9 2K,
num_images: 2(nano-banana-prompt-format): age, hair, skin, clothing, one prop each. Make paired characters (brothers, rivals) clearly different at a glance, and give related characters skin tones in the same family unless the person says otherwise. Gate:review_choose; fix notes with an edit of ONLY that figure. If the person wants to play a character, edit ONLY that figure with their front-facing photo as image 2 ("use it ONLY for the face and hair"). - Stills, in two waves. One nano banana 2.1 edit per shot, the lineup as image 1:
"use it ONLY for the art style and for the faces, hair, bodies and costumes of
<names, by position>. Do not copy its backdrop or lineup pose." Then the style
line, the camera, each figure's pose and gaze, "Mouths closed", "No text, no
logos." Wave 1: every shot whose place appears first (the set anchors) and the
one-offs, all at once. Wave 2: every shot in a place already drawn, with that
anchor as image 2 ("use it ONLY for the tent, its light and props, so the set
matches"), all at once. A figure with no face (an adversary, a spirit): "a
faceless silhouette cut from flat black paper". Contact-sheet and check.
Gate:
review_approve, each still an item with its narration line. - Voice before animation (
guide-cast-a-voice): their own voice, a library voice, or the narrator of an earlier portion for a series. Voice the whole script in one with-timestamps call (eleven_v4,pcm_48000, seed 7, one bracketed direction tag per line, lines separated by blank lines). Write every Hebrew word in Hebrew letters with nikkud (vowel points) inside the English line, e.g.[warm, inviting] חַיֵּי שָׂרָה means "the life of Sarah."The voice reads the Hebrew as Hebrew and goes straight back to English. Names that are said in English (Sarah, Isaac, Rebecca, Abraham) stay in English letters. Take each line's start and end from the alignment (line_times.py; skip[tag]characters; Hebrew letters count as word characters). Keep it at natural speed; if it runs long, cut words. Add a 0.8 s pause before each chapter's first line (add_gaps.py). Gate:review_approveon the whole track, and ask the person to listen to each Hebrew word by name. 6a. Fix a word without re-voicing everything. When a word is wrong, re-voice only its line, same voice and seed, in 2–3 versions at once (e.g. with and without nikkud), and put them to the person withreview_choosebeside the line as it was. Splice the chosen line in (splice_line1.py: keep the new line to its last character's end + 0.12 s, resume the track inside the silence after the old line, shift every later time by the difference). Clip lengths for later shots don't change; only the first shot's window does, within a ±15% stretch. - Animate one, then the rest (
h3-max-image-to-video,h3-prompt-format): 768P, seed fixed, the medium named first ("Handmade paper-cut stop-motion animation", "3D CG claymation"), big counted motion, lips closed, "every colour stays exactly the same from the first frame to the last", "Slightly stepped, handmade stop-motion movement." Each clip's duration = its window (its line's start to the next line's start, from step 6) + 0.1 s, as a float, max11 s. Render shot 1 ($0.90). Gate: a yes on its motion. Then all others at once. Frame-strip each (4 frames per clip, 13 clips per sheet) and check. - Music (
elevenlabs-generate-music): two composition plans, sections laid on the chapters (opening wonder, each chapter's mood, a soft resolving ending), no vocals, in two flavours (a regional folk bed with oud, ney and frame drum; a storybook film score), the length of the cut. - Cut (
build_cut.py, ffmpeg with-/filter_complex <file>): each shot from its line's start to the next line's start (shot 1 from 0, the last to the final word plus ~1.3 s), stretched withsetptsonly if a clip is short (≤1.15×), scaled to 1920×1080 lanczos, clips' own sound at 0.18. Mix: the voice, the bed at 0.4 ducked withsidechaincompresskeyed on the voice, a 2 s fade at the end; measure, then gain andalimiterto -16 LUFS / -1.5 dBTP. Gate:review_choosebetween a cut per bed (that picks the music). - Labels (
hn4a-compositor-motion-graphics), one spec over the cut, written by a build script cued from the line times, with the mix as its audio:- an opening title over the sky: a small kicker ("THIS WEEK'S TORAH PORTION", or "THE TORAH PORTION" when it isn't this week's), the portion's name large, the chapter-and-verse range under it;
- a part card bottom-left in each chapter pause, ~3.5 s, over a soft dark corner gradient; delay a name tag that would sit under it until after it;
- a name pill under each character the first time they appear (bottom of frame, never over bodies);
- a small source credit top-right on a dark pill while each commentary or verse is quoted (plain text vanished on pale skies, and bottom-right collided with name pills);
- a closing card ("Shabbat Shalom") over the last shot.
Fredoka 500/600 in cream with a warm shadow and a gold kicker. Make a still at
every label, contact-sheet them, and check each against its shot. Gate: the
live spec with
review_approve. Then render.
- Check and deliver: frame count, two audio channels, loudness measured, and a
whisper-clitranscript of the final file has every word.deliverintorev1/. A later round goes inrev2/, reusing every clip that still fits.
Choices this workflow makes
- 2–3 minutes, chaptered, at natural speed: long enough for a newcomer to follow.
- The style is the person's. Asked in step 3, shown on the cast first.
- Sources first, credited on screen as they're quoted.
- Hebrew in Hebrew letters in the voice text; the person checks each word by ear.
- One lineup as the reference for every still; an earlier still as the set reference when a place recurs.
- Voice before animation, so every clip is rendered to its line's length.
Dead ends
- A 60 s cut of a whole parsha: too fast, "hard to follow". Speeding the voice 10% to fit made it worse.
- Rendering clips before the voice: several were too short for their lines.
- Reading the Sefaria page address itself: it returns only "Loading…".
- Trusting "this week" from a link: check the calendar.
- Hebrew in English letters. "Chayei" came out as "shy-ay"; "Khah-yay" fixed the kh but "Sarah" stayed English; "Sah-rah", "Sah-RAH" and a tag like "[Hebrew name, stress on the last syllable]" or "[a throaty kh as in Chanukah]" all failed. Hebrew letters with nikkud worked first time; without nikkud was not the pick.
-filter_complex_scriptis gone in current ffmpeg: use-/filter_complex <file>.- A "red lentil stew" still read as red berries: say "thick, smooth, orange-red lentil stew, like a purée".
- A name tag placed mid-frame covered bodies after the push-in; keep tags at the bottom.
- Review cards don't always appear: if the person can't see one, ask in chat and
record the answer with
answered.


