Flow Agent batch edits and asset tidying: keep a Sume manifest

Flow Agent can batch edit and organize assets inside Flow. Sume has no asset organizer; a manifest of job ids and media URLs does the job. Code included.

5 min readSume
All posts

Flow Agent can plan multi-step tasks, batch edit, and organize assets inside Flow. Sume has no equivalent folder-tidying agent in its public API, so on Sume you keep a small manifest that maps each prompt to its job id and Sume media URL.

The Flow facts come from Google's I/O 2026 roundup, read 2026-10-02: Flow Agent executes multi-step tasks with planning and reasoning, helps with brainstorming, creating and editing, and offers batch editing and asset organization to Flow users globally. It does not say how assets are exposed outside Flow.

What do I get from Sume instead?

Every Sume generation is a durable job. The Jobs and results page tells you to store the job id from the submit response so work survives a restart, and the Media inputs page says completed jobs mirror outputs into media.sume.com URLs that you should store instead of raw provider links.

A job is readable only by the member whose key created it, plus Studio Agent turns in the same thread, so a manifest is also how a teammate finds your results.

What goes in the manifest?

One row per request is enough. The fields below are the minimum that makes a batch recoverable.

Manifest columns for a Sume batch, read 2026-10-02
ColumnWhy
idempotency_keyRetry the exact request without billing twice
prompt or video_urlWhat was asked, for later reruns
job_idPoll and recover after a crash
statusqueued, processing, completed, failed, canceled
media_urlThe Sume-hosted result to download or reuse

What does the code look like?

This script submits a few edits and appends one JSON line per job. It assumes the submit response carries the job id as id or request_id; check your live response, since envelopes differ slightly between surfaces.

import json, os, requests

KEY = os.environ["SUME_API_KEY"]
H = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}
clips = {"a": "https://example.com/a.mp4", "b": "https://example.com/b.mp4"}

with open("manifest.jsonl", "a") as out:
    for name, url in clips.items():
        idem = f"warm-grade-{name}"
        body = {"model": "gemini-omni-flash-1.1",
                "prompt": "Warm the colour grade. Keep everything else the same.",
                "video_url": url, "mode": "async"}
        r = requests.post("https://api.sume.com/v1/video-router/generate",
                          headers={**H, "Idempotency-Key": idem}, json=body)
        r.raise_for_status()
        job = r.json()
        row = {"key": idem, "source": url,
               "job_id": job.get("request_id") or job.get("id")}
        out.write(json.dumps(row) + "\n")

What does this not replace?

A second pass reads each job's GET /v1/jobs/:id/result and fills media_url. Sume does not sort, tag or rename files for you, and it does not plan a batch from a chat message in the API. If you want a chat-driven batch, the Studio Agent route exists, but it is a separate product surface from this API manifest.

Reusing an idempotency key with the same body returns the original job, which makes it safe to rerun the script after a crash.

Sources

Related posts

More in Agents

All Agents posts

Written by Sume