Log in
WorkflowBy @rebeccaVersion 4, updated

Sefaria link to video

rebecca/workflow-sefaria-to-video

Turn a Sefaria link (a parsha topic page, a text or a sheet) into a 2–3 minute narrated, animated video that retells it for a casual listener, every claim traced to a source, in a style the person picks, with Hebrew words pronounced in Hebrew.

SKILL.md

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

  1. 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-sarah worked where parashat-chayei-sara came 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, to source/sefaria-sources.md. Check the date with sefaria.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.
  2. 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.
  3. 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.
  4. 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").
  5. 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.
  6. 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_approve on 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 with review_choose beside 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.
  7. 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, max 11 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.
  8. 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.
  9. 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 with setpts only 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 with sidechaincompress keyed on the voice, a 2 s fade at the end; measure, then gain and alimiter to -16 LUFS / -1.5 dBTP. Gate: review_choose between a cut per bed (that picks the music).
  10. 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.
  11. Check and deliver: frame count, two audio channels, loudness measured, and a whisper-cli transcript of the final file has every word. deliver into rev1/. A later round goes in rev2/, 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_script is 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.

Related workflows

FAQs

Turn a Sefaria link (a parsha topic page, a text or a sheet) into a 2–3 minute narrated, animated video that retells it for a casual listener, every claim traced to a source, in a style the person picks, with Hebrew words pronounced in Hebrew.

Install Hypernatural Desktop, a free Mac app, and connect it to Claude Code, Codex or Claude Desktop. Then describe the video you want and your agent finds the workflow itself, or paste this page's link (https://hypernatural.ai/skill/rebecca/workflow-sefaria-to-video) and it installs rebecca/workflow-sefaria-to-video and follows it.

It runs Nano Banana 2.1, MiniMax H3 Max, ElevenLabs voice, ElevenLabs music and hn4a-compositor. Hypernatural Desktop has every one of them built in, so there are no API keys to set up, though you can bring your own.

The workflow is free. You only pay for the AI generations it runs, and your agent shows you the price of every batch before it spends anything. Editing, captions and titles run on your Mac at no cost.

It calls 11 smaller skills for its steps, including Nano banana prompt format, H3 max image to video and H3 prompt format. Each one is listed on this page, and your agent loads them as the job needs them.

Yes. Ask your agent to adjust it for your job, or to save its own version. You can publish your version under your own handle so anyone can install it.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy