Keep a source log for Shorts cut from long video: CSV from video trim
A source log shows which long video, timestamp and edit produced each Short. Build one from video trim results using actual_start_seconds.

A source log is a plain CSV that records, for every Short, which long video it came from, where in that video, what was changed and when you made it. Sume's video trim returns the numbers you need, including actual_start_seconds, so you can generate the log as part of the cut instead of reconstructing it later. Nothing on YouTube's pages asks for such a log; its value is for you.
The value is real after October 1. YouTube's update is reported to reduce reach for channels that mainly re-upload other creators' clips, with no timescale or dashboard (Search Engine Journal, read 2026-10-03). If your channel gets treated as a reposter by mistake, or a collaborator asks where a clip came from, a log lets you show the original recording, the segment and the added commentary quickly.
What the log should hold
The added column is the one that matters for originality. Fill it with something specific, such as 're-recorded explanation of step 3', not 'edited'.
| Column | Where it comes from | Why it helps |
|---|---|---|
| short_file | Your file name for the Short | Joins the log to the upload |
| source_url | The video_url you sent to trim | Shows the long original |
| requested_start | The start you sent | What you intended |
| actual_start | actual_start_seconds in the result | What the cut really began at |
| duration | duration_seconds in the result | Runtime of the segment |
| precision | precision in the result | exact re-encode or keyframe copy |
| added | Your note: voice-over, graphic, caption | What you contributed |
Why actual_start_seconds, not start
Video trim offers precision: exact (default, a frame-accurate re-encode) and keyframe (a stream copy that may start up to a GOP early). With keyframe, the cut may begin before your requested start, so the docs say to re-base against actual_start_seconds. A log that stores only the requested time will be wrong for those cuts. A completed job's GET /v1/jobs/:id/result returns video_url, duration_seconds, actual_start_seconds, precision and optional warnings, such as trim_clamped_to_source when your range ran past the end.
The function below turns one trim result into a CSV row and appends it. It takes the result as a dict, so you can test it with sample data before wiring it to polling per the jobs docs.
import csv, os
FIELDS = ["short_file", "source_url", "requested_start", "actual_start",
"duration", "precision", "added", "warnings"]
def log_row(path, short_file, source_url, requested_start, result, added):
new = not os.path.exists(path)
with open(path, "a", newline="") as f:
w = csv.DictWriter(f, fieldnames=FIELDS)
if new:
w.writeheader()
w.writerow({
"short_file": short_file, "source_url": source_url,
"requested_start": requested_start,
"actual_start": result.get("actual_start_seconds"),
"duration": result.get("duration_seconds"),
"precision": result.get("precision"),
"added": added,
"warnings": ";".join(map(str, result.get("warnings", []))),
})
log_row("source-log.csv", "short-01.mp4", "https://media.sume.com/example/talk.mp4",
12, {"actual_start_seconds": 11.4, "duration_seconds": 38.0,
"precision": "keyframe"}, "new voice-over explaining step 3")Keep it honest
A log proves provenance; it does not make a Short original in YouTube's eyes, and Sume does not guarantee reach.
- Log at cut time, not months later.
- Store the original recording somewhere you control, since a media URL is not an archive.
- Never put customer data or private details in the
addednotes. - If you cut from someone else's video with permission, record the permission too.
Using the log later
A CSV is easy to sort. Group by source_url to see how many Shorts came from one long video; if one recording yielded 40 near-identical Shorts, the log will show it, and you can decide whether that is the variation you want.
Filter on the warnings column to find cuts where a range ran past the end of the source and the trim clamped. Those are the Shorts shorter than you planned.
If you need to re-cut, the source_url and actual_start give you the exact starting point, and the precision column tells you whether to expect a frame-accurate start or a keyframe one.
What the log does not do
It does not prove a clip is original in YouTube's eyes, and it is not something YouTube asks for. The pages I read judge the video you publish by what it adds, not by your paperwork (read 2026-10-03). The log is an aid for you and your collaborators, nothing more.
Where to keep it
A CSV in the same folder as the finished Shorts is enough for one person. For a team, a shared spreadsheet or a table in your own database is better, so two people do not overwrite each other. Sume does not store this log for you; the trim job result holds the numbers, and you keep them.
Back it up with the source recordings. A log that points at a media URL is only as durable as that URL, so keep your own archive of the originals.
Sources
Related posts
More in Developers
- source_too_large on trim or filter: the 300 MiB source cap
Sume's video trim and filter refuse a hosted source over 300 MiB (314,572,800 bytes) at submit. What is checked, the free check call, and ways around it.
- Speech-to-text audio too large? Sume STT takes up to 10 MB, hosted
Sume's stt_create needs a public HTTPS audio URL on the Sume media host, 10 MB at most. What fits: 16 kHz mono wav versus mp3, and how to cut a long file.
- Split one voiceover into 40 scene tracks: two timeline audio jobs
Timeline audio split takes up to 20 ranges per job. Forty scene tracks from one voiceover is two split jobs, $0.02, with ranges built from cue times in Python.
- Spring AI MCP client request-timeout 20s vs Sume jobs_wait
Spring AI's MCP client defaults request-timeout to 20s, shorter than a 50s Sume jobs_wait. Raise it with a customizer or keep waits short and re-issue them.
Written by Sume