ChatGPTCreativeVideoAI score · PendingAI-assisted edit · no obvious prompt-injection riskn8n.io

Auto-generate cinematic multi-scene videos from text prompts with n8n

Google Sheets row → GPT-4o narrative & storyboard → Fal.AI Seedance per-scene rendering → merged MP4 with ambient audio

Some experienceStepsWorkflowPromptTip
Who
Content creators, short-form video marketers, educators, and n8n users with some automation experience
You get
Turn a spreadsheet row into a multi-scene cinematic video (MP4) with optional auto-upload to YouTube
You need
n8n · fal-ai · google-sheets · youtube

Constraints

Prerequisites: n8n instance (self-hosted recommended); Fal.AI Header Token; OpenAI API Key; Google Sheets OAuth2; optional YouTube OAuth2. Costs depend on API usage; Seedance and MM-Audio are billed via Fal.AI.

What they did

Author jaruphatj published this workflow template on the n8n official template gallery. It demonstrates a full automation pipeline: read a story prompt from Google Sheets, generate narrative and storyboard with GPT-4o, render 5-second clips per scene using Fal.AI Seedance V1.0, optionally add MM-Audio ambient sound, merge into a final MP4 via FFmpeg API, and optionally auto-upload to YouTube. The template includes 38 nodes across 4 functional zones (Story-to-Scenes / Generate Video / Add Audio / Merge & Output) and provides an example output link.

How it went

Author-reported example (author_report): prompt 'A rabbit flies to the moon on a dragonfly and eats watermelon together' produced 3 scenes, 5s each, cinematic camera pans, soft ambient audio, and auto-uploaded to YouTube. The template has 32,670 views on n8n.io.

Worth knowing

1. This site has not tested the workflow (reproduction=not_tested); actual cost and stability must be verified independently. 2. Seedance V1.0 uses queue-based async rendering; each clip is ~5–6s, and full multi-scene output requires multiple poll-wait cycles with uncertain total duration. 3. Credentials required: openAiApi, httpHeaderAuth (Fal.AI), googleSheetsOAuth2Api, youTubeOAuth2Api (optional). 4. The Google Sheet must strictly contain columns: story, number_of_scene, duration, aspect_ratio, resolution, model; the model value should match a Fal.AI model path (e.g., seedance-v1). 5. Node prompts are in English; for non-English narrative output, add a language instruction in the GPT Agent node's text parameter, but keep Seedance prompts in English for best results. 6. The merge API uses a fixed 6000ms per-clip duration; if you change duration, update the duration value in the jsonBody accordingly. 7. The example YouTube upload sets regionCode=TH; change this in the node parameters if you need a different region.

n8n workflow template

Structure checked · Not run-tested

Use “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.

Setup and test checklist

Credentials to connect

  • OpenAI Chat Model node: connect OpenAI API credentials.
  • OpenAI Chat Model1 node: connect OpenAI API credentials.
  • Get the video status node: connect HTTP Header Auth credentials.
  • Get the video node: connect HTTP Header Auth credentials.
  • Get audio status node: connect HTTP Header Auth credentials.
  • Get video with audio node: connect HTTP Header Auth credentials.
  • Start adding audio to the video node: connect HTTP Header Auth credentials.
  • Start merging videos node: connect HTTP Header Auth credentials.
  • Get merge videos status node: connect HTTP Header Auth credentials.
  • Get merged video node: connect HTTP Header Auth credentials.
  • OpenAI Chat Model2 node: connect OpenAI API credentials.
  • Get Data node: connect Google Sheets OAuth2 credentials.
  • Call Fal.ai API (Seedance) node: connect HTTP Header Auth credentials.
  • YouTube node: connect YouTube OAuth2 credentials.
  • Get the video1 node: connect HTTP Header Auth credentials.

Configuration to replace

  • Source template is n8n public workflow #5741 (~38 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
  • Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.

Test input and expected output

  • Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
  • Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.

Template changes

  • Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
  • No business-logic edits; verify keys, quotas and privacy compliance before use.

Template retrieved: 2026-10-24

Steps

  1. Prepare input and trigger the workflow

    Create a Google Sheet with columns: story (short prompt), number_of_scene, duration (per clip), aspect_ratio, resolution, model. In n8n, click 'Execute workflow' manually or set a Sheet-update trigger.

  2. Generate full narrative

    An AI Agent node calls GPT-4o-mini to generate an immersive, emotionally arced short video story based on the story field. Output is constrained by Structured Output Parser to {story: string}.

    Execution prompt · Source text。AI Agent node 'Generate Full Narrative from Prompt' text parameter

    =Instructions:
    
    Create a captivating, vivid, and detailed short video story based on the idea provided below. The story should feel immersive, emotional, and cinematic — suitable for visual storytelling.
    Please ensure the following:
    
    Include a rich, visually descriptive setting (lighting, weather, architecture, colors).
    
    Describe the main characters clearly: their appearance, mood, clothing, and motivations.
    
    Build a sense of mood, tension, or emotional arc.
    
    Keep the tone aligned with the theme of the original idea.
    
    Format your output as long-form narrative text.
    
    Idea: {{ $json.story }}
  3. Split narrative into scenes and verify count

    A second AI Agent node (GPT-4o-mini) breaks the narrative into exactly number_of_scene scenes, output constrained to {scenes: string[]}. A Code node then verifies sceneCount; if insufficient it loops back, otherwise proceeds.

    Execution prompt · Source text。AI Agent node 'Break Narrative into {{n}} Scenes' text parameter

    =<Instructions>
    
    Break down the following story into a script (for short video) with exacly {{ $('Get Data').item.json.number_of_scene }} scenes.
    
    </Instructions>
    
    <Story>
    {{ $json.output.story }}
    </Story>
  4. Generate structured video description per scene

    A Split Out node separates the scenes array into items. Each item flows into an AI Agent node (GPT-4o) that outputs a structured scene description: characters, background, camera movement, object movement, and sound effects. Constrained by Structured Output Parser to {characters, scene_description, camera_movement, object_movements, sound_effects}.

    Execution prompt · Source text。AI Agent node 'Describe Each Scene for Video' text parameter

    =Prompt Template: Generate Detailed Scene (5s Clip)
    
    Instructions:
    Create a detailed visual breakdown of the following scene.
    Use the full story context to ensure continuity, tone, and emotional flow.
    
    For this scene, include:
    
    1. Characters in the Scene:
    - List all characters present
    - Describe their age, attire, appearance, posture, emotion, and current action
    
    2. Scene Background & Environment:
    - Describe the setting in detail (lighting, background elements, color palette, time of day)
    - Mention any objects in the environment that affect mood or action
    
    3. Camera Direction:
    - Describe camera angle, motion (e.g. dolly, pan, zoom), perspective, or transitions during the 5s scene
    
    4. Object & Character Movement:
    - Describe how characters or objects move within this 5-second clip
    - Use dynamic motion where appropriate
    
    5. Sound Effects & Ambience:
    - Describe background sound, music, or specific SFX
    - Include emotional tone and pacing of sound
    
    Scene Input:
    {{ $json.scenes }}
    
    
    Full Story Reference:
    {{ $('Generate Full Narrative from Prompt').item.json.output.story }}
    
    Output Format Example:
    
    Characters:
    - Anya (17): Wears a tattered blue coat. Snow clings to her hair. She breathes heavily, face flushed from the cold. Her eyes are locked ahead, determined.
    - The Old Man (60s): Frail, cloaked in furs, holding a lantern that flickers with a weak flame.
    
    Scene Background: A narrow trail carved through pine trees covered in frost. The sky is turning orange. In the distance, the silhouette of a crumbling tower. Mist coils low to the ground.
    
    Camera Movement: Slow push-in from behind Anya’s shoulder, transitioning to a side dolly as she steps forward and the tower comes into view.
    
    Movement in Scene: Snowflakes fall steadily. Anya trudges forward. The Old Man stops, raises his lantern slightly, casting light across the branches. A raven flutters from a tree.
    
    Sound Design:
    - Soft wind whistling through trees
    - Crunching snow with each step
    - Distant echo of a bell
    - Faint strings rise in tension as the tower is revealed
  5. Call Seedance to generate video and poll status

    An HTTP Request node POSTs to https://queue.fal.run/fal-ai/{model} with XML-formatted Characters, SceneDescription, CameraMovements, ObjectMovements, plus aspect_ratio, resolution, duration from Sheets. SplitInBatches processes items one by one; a Wait node delays before HTTP polling of status_url; a Switch node routes on status: COMPLETED fetches the video, IN_PROGRESS/IN_QUEUE loops back to wait.

    Execution prompt · Source text。HTTP Request node 'Call Fal.ai API (Seedance)' bodyParameters.prompt field

    =<Characters>
    {{ $json.output.characters.map(character => `<Character>
      <Name>${character.name}</Name>
      <Description>${character.description}</Description>
    </Character>`).join('\n') }}
    </Characters>
    
    <SceneDescription>
    {{ $json.output.scene_description }}
    </SceneDescription>
    
    <CameraMovements>
    {{ $json.output.camera_movement }}
    </CameraMovements>
    
    <ObjectMovements>
    {{ $json.output.object_movements }}
    </ObjectMovements>
  6. Add ambient audio to each video

    An HTTP Request node POSTs to https://queue.fal.run/fal-ai/mmaudio-v2 with video_url (from previous step) and prompt (from scene sound_effects). SplitInBatches loops per scene; Wait+HTTP polls completion status to retrieve audio-enhanced clips.

    Execution prompt · Editorial suggestion。HTTP Request node 'Start adding audio to the video' bodyParameters; replace with actual n8n expressions

    video_url: {{ $json.video.url }}
    prompt: {{ $('Describe Each Scene for Video').item.json.output.sound_effects }}
  7. Merge clips into final video

    An Aggregate node gathers all audio-enhanced clips. An HTTP Request node POSTs to https://queue.fal.run/fal-ai/ffmpeg-api/compose with a jsonBody tracks array, each clip 6000ms sequential. Wait+HTTP polls merge status; finally retrieve the merged video URL.

    Execution prompt · Source text。HTTP Request node 'Start merging videos' jsonBody field

    ={
      "tracks": [
        {
          "id": "1",
          "type": "video",
          "keyframes": {{ JSON.stringify($json.data.map((item, index) => ({ url: item.video.url, timestamp: index * 6000, duration: 6000 }))) }}
        }
      ]
    }
  8. Optional: auto-upload to YouTube

    If YouTube OAuth2 is configured, the final video can be auto-uploaded via the YouTube node, title pulled from the Sheets story field, category ID 28 (Science & Technology), regionCode TH.

Prompt you can copy

Setup guidance · Editorial suggestion。Hand to setup assistant; confirm inputs and permissions first

This block is the prompt. Ads are never placed here.

You are setting up an n8n workflow that turns a Google Sheets row into a multi-scene cinematic video. First confirm you have: an n8n instance, Fal.AI Header Token, OpenAI API Key, and Google Sheets OAuth2 credentials. Then import the template, configure credentials, prepare the sheet columns (story, number_of_scene, duration, aspect_ratio, resolution, model), run it, and watch the queue-polling status.

The template has 38 nodes and relies on Fal.AI queue-based async rendering; expect to wait for polling loops to complete.

Source

Generate cinematic videos from text prompts with GPT-4o, Fal.AI Seedance & Audio · jaruphatj · n8n.io · 2025-07-07

Comments & feedback

Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.

Loading…

    Related