<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Monica</title>
    <description>The latest articles on DEV Community by Monica (@veemoai).</description>
    <link>https://dev.to/veemoai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4182183%2Fd69dc8c4-7564-4b46-910e-6103c1ae87c5.png</url>
      <title>DEV Community: Monica</title>
      <link>https://dev.to/veemoai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/veemoai"/>
    <language>en</language>
    <item>
      <title>How to Make AI Videos with Seedance 2.5 (Using Nano Banana for Keyframes)</title>
      <dc:creator>Monica</dc:creator>
      <pubDate>Tue, 13 Oct 2026 12:29:38 +0000</pubDate>
      <link>https://dev.to/veemoai/how-to-make-ai-videos-with-seedance-25-using-nano-banana-for-keyframes-29a2</link>
      <guid>https://dev.to/veemoai/how-to-make-ai-videos-with-seedance-25-using-nano-banana-for-keyframes-29a2</guid>
      <description>&lt;p&gt;Most "AI video" tutorials stop at &lt;em&gt;type a prompt, press generate&lt;/em&gt;. That works for a demo, but the moment you need a specific opening shot, a specific ending, or a clip that matches a brand, prompt-only generation turns into an expensive slot machine.&lt;/p&gt;

&lt;p&gt;This post walks through a more controlled workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design your &lt;strong&gt;keyframes&lt;/strong&gt; as still images with &lt;strong&gt;Nano Banana&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Animate between them with &lt;strong&gt;Seedance 2.5&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extend&lt;/strong&gt; or &lt;strong&gt;edit&lt;/strong&gt; the clip if the shot needs it.&lt;/li&gt;
&lt;li&gt;Stitch the final shots together locally with &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll use &lt;a href="https://veemo.ai" rel="noopener noreferrer"&gt;Veemo AI&lt;/a&gt; for steps 1–3 because it hosts both models in one studio, so there's one account and one credit balance instead of two separate tools. The ideas carry over to any host that exposes the same controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Seedance 2.5 actually gives you
&lt;/h2&gt;

&lt;p&gt;Before writing prompts, it helps to know which knobs exist. On Veemo's Seedance 2.5 page, the model is exposed through four operations:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Use it when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Create&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prompt + optional image, video or audio references&lt;/td&gt;
&lt;td&gt;You're generating a new shot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A primary video + prompt (+ optional references)&lt;/td&gt;
&lt;td&gt;You want to change existing footage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A primary video + a description of what happens next&lt;/td&gt;
&lt;td&gt;The shot needs to keep going&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;First &amp;amp; Last Frames&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exactly two images&lt;/td&gt;
&lt;td&gt;Both the opening and closing compositions are fixed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The video controls are: duration from &lt;strong&gt;4 to 30 seconds&lt;/strong&gt;, &lt;strong&gt;480p or 720p&lt;/strong&gt; output, aspect ratio, an audio toggle, output format, and an optional last-frame return.&lt;/p&gt;

&lt;p&gt;Two things worth noting from the docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extension is prompt-guided. Veemo states plainly that it "does not guarantee frame-exact seamless continuation", so plan your edit with that in mind.&lt;/li&gt;
&lt;li&gt;720p is the ceiling here. If your delivery needs higher resolution, that's a separate step (or a different model).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 0: Set up
&lt;/h2&gt;

&lt;p&gt;You'll need a Veemo account with credits. Paid plans start at $29.90/month and the visible tiers go up to $199.90/month; subscription credits refresh each billing cycle. If you only generate occasionally, the one-time credit packs (Starter, Creator, Professional, Advanced) are worth a look because pack credits don't expire. New users also get 16 free credits, which is enough to generate a video, so you can try the workflow before paying.&lt;/p&gt;

&lt;p&gt;Each generation shows its credit cost on the Generate button before you submit, and the number changes with model, duration and resolution. Get into the habit of reading it before you click.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Design keyframes with Nano Banana
&lt;/h2&gt;

&lt;p&gt;Seedance's &lt;strong&gt;First &amp;amp; Last Frames&lt;/strong&gt; operation needs two images. You could use photos, but generating them gives you full control over composition and style, and that's where Nano Banana fits.&lt;/p&gt;

&lt;p&gt;Veemo positions &lt;a href="https://veemo.ai/nano-banana" rel="noopener noreferrer"&gt;Nano Banana as its fast image model&lt;/a&gt;, built for quick iteration and batch variations. Its prompting guidance is short and useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep prompts concise.&lt;/li&gt;
&lt;li&gt;Focus on &lt;strong&gt;mood, color palette and subject&lt;/strong&gt; instead of very precise spatial instructions.&lt;/li&gt;
&lt;li&gt;Use style keywords such as &lt;em&gt;watercolor&lt;/em&gt;, &lt;em&gt;cel-shaded&lt;/em&gt; or &lt;em&gt;concept art&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a pair of keyframe prompts for a short product-style shot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FIRST FRAME
A matte-black ceramic coffee mug on a pale oak table, early morning,
soft window light from the left, warm neutral palette, minimal,
product photography, empty space on the right

LAST FRAME
The same matte-black ceramic mug on the same pale oak table, steam rising,
morning sun now brighter, a single croissant beside it, warm neutral palette,
minimal, product photography
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tips that save credits later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lock the aspect ratio first.&lt;/strong&gt; Generate keyframes in the same ratio you'll use for the video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change as little as possible between frames.&lt;/strong&gt; The more the two frames differ, the more the model has to invent in between.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick from variations.&lt;/strong&gt; Nano Banana is cheap per image, so generate several of each frame and choose the closest pair.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need sharper detail or consistent characters across frames, Veemo also offers &lt;strong&gt;Nano Banana Pro&lt;/strong&gt;, which its page describes as supporting 1K, 2K and 4K output, character consistency for up to five people, and up to 14 reference images.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Write the shot like a spec
&lt;/h2&gt;

&lt;p&gt;Seedance responds better to a structured brief than to a pile of adjectives. A template I like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SUBJECT:   what must stay the same (shape, color, materials)
ACTION:    what changes, in order, with rough timing
CAMERA:    one camera move, described once
LIGHT:     how the light behaves over the shot
AUDIO:     ambience / effects / silence
EXCLUDE:   things that must not appear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filled in for our mug:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The matte-black mug keeps its exact shape, handle and finish throughout.
From 0–4s steam begins to rise slowly; from 4–7s sunlight warms across the table.
Camera: a single slow push-in, no cuts.
Light: soft morning light gradually brightening from the left.
Audio: quiet kitchen room tone, a faint ceramic clink at the start.
Exclude: text, logos, hands, extra cups.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Generate with Seedance 2.5
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://veemo.ai/seedance-2-5" rel="noopener noreferrer"&gt;Seedance 2.5 video generator&lt;/a&gt; and:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose &lt;strong&gt;First &amp;amp; Last Frames&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Upload the two Nano Banana images.&lt;/li&gt;
&lt;li&gt;Paste the brief from Step 2.&lt;/li&gt;
&lt;li&gt;Set a duration. Start short (around 8 seconds) while you're testing.&lt;/li&gt;
&lt;li&gt;Choose an aspect ratio matching your keyframes, and toggle audio on only if the shot needs it.&lt;/li&gt;
&lt;li&gt;Check the credit quote, then generate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A sensible testing order is: get the motion right first, then worry about audio and resolution. Turning audio off for the first pass removes one variable when you're diagnosing what went wrong.&lt;/p&gt;

&lt;p&gt;If you don't care about a fixed ending, use &lt;strong&gt;Create&lt;/strong&gt; instead and pass the first keyframe as an image reference. That gives the model more freedom with the ending.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Extend or edit
&lt;/h2&gt;

&lt;p&gt;Two follow-up operations make Seedance useful beyond single shots:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extend&lt;/strong&gt;: upload the clip you just made and describe what happens next ("the camera continues to push in until the mug fills the frame"). Since continuation isn't guaranteed to be frame-exact, give yourself a natural cut point or a hold at the end of the first clip.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit&lt;/strong&gt;: upload a clip and describe the change ("replace the croissant with a small bowl of berries"). Keep the request narrow; one change per pass is easier to review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: Stitch it locally
&lt;/h2&gt;

&lt;p&gt;Once you've downloaded your shots, &lt;code&gt;ffmpeg&lt;/code&gt; can join clips that share codec, resolution and frame rate without re-encoding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# clips.txt&lt;/span&gt;
file &lt;span class="s1"&gt;'shot-01.mp4'&lt;/span&gt;
file &lt;span class="s1"&gt;'shot-02.mp4'&lt;/span&gt;
file &lt;span class="s1"&gt;'shot-03.mp4'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; concat &lt;span class="nt"&gt;-safe&lt;/span&gt; 0 &lt;span class="nt"&gt;-i&lt;/span&gt; clips.txt &lt;span class="nt"&gt;-c&lt;/span&gt; copy final.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the clips differ (say, one is 480p and another 720p), drop &lt;code&gt;-c copy&lt;/code&gt; and let ffmpeg re-encode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text and logos&lt;/strong&gt; inside generated video often need fixing in post. Plan to overlay them in your editor rather than prompting for them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep a log.&lt;/strong&gt; Save the prompt, settings, credit quote and output filename for every attempt. That turns "it worked once" into something you can repeat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failed generations&lt;/strong&gt;: Veemo's refund policy says credits are normally returned when a task fails because of a system or provider error. That's a credit return, not a cash refund.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The pattern is simple: &lt;strong&gt;stills for control, video for motion, an editor for the final cut&lt;/strong&gt;. Nano Banana makes keyframes cheap enough to iterate on, and Seedance 2.5's First &amp;amp; Last Frames, Extend and Edit operations let you direct a shot instead of hoping for one.&lt;/p&gt;

&lt;p&gt;If you try this workflow, I'd love to see what you make. Drop your prompt template tweaks in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>video</category>
      <category>generativeai</category>
    </item>
  </channel>
</rss>
