---
title: Stills to motion | FLORA API
description: Branch from one Technique into another, carrying selected outputs as inputs.
---

Once you’ve nailed the stills, branch into a different Technique using the winners as keyframes — without losing context. This is where FLORA MCP starts paying for itself: fast iteration in chat, then background mode for the longer-running motion work.

**Prerequisite:** A set of approved stills from [Discover and run](/mcp/recipes/discover-and-run/index.md) or [Iterate on favorites](/mcp/recipes/iterate-on-favorites/index.md).

## What you type

> Take the winners and run them through the Social Motion Technique. I need 3-second loops for IG.

## What the agent does

1. Switches to background mode

   Motion generation takes longer than stills. Most agents propose moving the task to a background panel — Claude calls this **Cowork**, Cursor calls it an **agent run**, and so on. The task runs while you keep working in chat.

2. Finds and inspects the motion Technique

   The agent calls `client.techniques.list()` to find the Social Motion Technique, then `client.techniques.retrieve(techniqueId)` to read its inputs. It expects keyframes as `imageUrl` inputs and accepts `duration` and `loop` parameters.

3. Submits one run per chosen still

   The agent calls `client.techniques.runs.create(techniqueId, { inputs: [...] })` for each chosen still, passing the output URL as a keyframe. The background panel displays the task: “Generating motion versions of 5 thumbnails.”

4. Polls each run for results

   The agent calls `client.techniques.runs.retrieve(runId, { techniqueId })` to poll each run. Inline MP4 previews start playing on autoplay-loop as each one finishes, labeled with the source thumbnail number.

## What you see

A task panel appears with progress per run. As each motion version finishes, it pops into the chat as a short looping MP4, tagged “from #4”, “from #7”, and so on. Click any one to open it full-size or download.

## Why context survives the branch

You didn’t re-describe the brand direction, the brief, or your favorites. The Social Motion Technique didn’t need to know any of that — the agent just passed the chosen output URLs as keyframes. The Technique system handles the rest.

This is the part that’s hard with single-shot generative MCPs. With FLORA, **your choice of favorites doesn’t get lost when you switch from stills to motion.**

## Variations

- *“Run only #4 through Social Motion — 3 seconds, loop. And #7 through the Hero Motion Technique — 6 seconds, no loop.”*
- *“Use #4 as the start frame and #7 as the end frame for a single morphing loop.”* (Requires a Technique that accepts paired keyframes.)
- *“Generate the motion versions in 9:16 vertical for IG Stories.”* (Most motion Techniques expose an aspect ratio input.)

## Under the hood

```
async function run(client) {
  // Find the motion Technique
  const { techniques } = await client.techniques.list({ query: "social motion" });
  const technique = await client.techniques.retrieve(techniques[0].technique_id);


  // One run per chosen still, submitted in parallel
  const chosenUrls = ["<url for #4>", "<url for #7>"];  // ...etc
  const runs = await Promise.all(
    chosenUrls.map(url =>
      client.techniques.runs.create(technique.technique_id, {
        inputs: [
          { id: "keyframe", type: "imageUrl", value: url },
          { id: "duration_seconds", type: "text", value: "3" },
          { id: "loop", type: "text", value: "true" }
        ]
      })
    )
  );


  // Poll each run independently
  for (const run of runs) {
    let status;
    do {
      status = await client.techniques.runs.retrieve(run.run_id, {
        techniqueId: technique.technique_id
      });
    } while (status.status !== "completed" && status.status !== "failed");
    console.log(status.outputs);
  }
}
```

## When to use background mode vs chat

\| | Inline chat | Background mode | | --- | --- | --- | | Run time | Seconds to \~30s | Anything longer | | Inline rendering | Yes | Yes, when ready | | Keep working in parallel | Blocked while polling | Unblocked | | Best for | Discovery, iteration, single runs | Motion, batches, anything >30s | | Examples by client | Default chat | Claude Cowork, Cursor agent runs, VS Code agent mode |

Most clients auto-pick background mode for longer tasks. You can override: *“Do this inline — I want to watch it.”*

## Tips

- For consistent motion across a set, run all keyframes through the same Technique in one batch — don’t mix Techniques mid-set.
- Motion Techniques cost more per run than stills. Confirm `run_cost` (USD) via `client.techniques.retrieve(techniqueId)` before kicking off a big batch.
- Save approved motion outputs to a Project (`client.projects.assets.attachAsset(...)`) so they show up in FLORA’s canvas alongside the stills.
