Beat sync video editor via API: plan cuts from a stated BPM

Sume has no beat-detection tool. You can ask Music 1.0 for a BPM, then set Timeline 1.0 slot starts and durations as multiples of one beat.

4 min readSume
All posts

Sume does not detect the beat of an existing track. What it offers is the reverse: write a BPM into a Music 1.0 brief, then place Timeline 1.0 video slots at starts and durations that are whole multiples of one beat (60 divided by the BPM). Cuts land on the grid you chose, not on a grid measured from audio.

YouTube's September 2026 blog post says its new editing assistant can suggest ways to "reorder frames, trim and sync music to the beat". That is a feature inside YouTube's editor. This page covers what a Sume API caller can build, from Music 1.0 and Timeline 1.0, read 2026-09-30.

Can Sume measure the beat of a track?

No. The Music 1.0 docs say provider lyrics metadata may describe tempo and structure, but it is model-reported and "not an audio measurement". I found no analysis endpoint in the docs that returns beats per minute for an uploaded file, so treat any tempo you read back as a claim to verify by ear or with your own tool.

How do I ask Music 1.0 for a tempo?

The brief has seven axes and tempo is one of them, written as a number such as "72 BPM". The docs call these axes creative directions, not guaranteed output settings, and Music 1.0 has no seed, guidance or duration parameter. So a stated BPM is a request. Generate, listen, and re-run if the feel is off. The same brief form also takes an arc with a named moment, for example "full return at 0:28", which helps you aim a cut at a known time. The paid tool in hosted MCP is music_create.

How do I place cuts on a beat grid?

Timeline 1.0 treats declared slot starts as authoritative: "Declared starts are authoritative", and the compiler compensates for crossfades rather than shifting your starts. Slot duration must be at least 0.2 s, video[0].start must be 0, and later starts must increase. That is enough to lay out a grid. At 120 BPM one beat is 0.5 s, so a shot of four beats is 2 s and each next start is 2 s later.

const bpm = 120;
const beat = 60 / bpm;
const beatsPerShot = 4;
const shots = 8;
const video = Array.from({ length: shots }, (_, i) => ({
  source_url: "https://media.sume.com/artifacts/artf_demo/shot-" + (i + 1) + ".mp4",
  start: i * beatsPerShot * beat,
  duration: beatsPerShot * beat,
}));
const audio = { duration_seconds: shots * beatsPerShot * beat };
console.log(JSON.stringify({ audio, video }, null, 2));

What does the plan look like at common tempos?

Shot length is beats per shot times 60 over BPM. Values below are arithmetic, not Sume output.

Slot length for a four-beat shot, computed 2026-09-30; slot minimum is 0.2 s per https://docs.sume.com/models/timeline.
BPMOne beatFour-beat shotEight shots total
720.833 s3.333 s26.667 s
1000.600 s2.400 s19.200 s
1200.500 s2.000 s16.000 s
1420.423 s1.690 s13.521 s

What should I check before rendering?

Timeline slots need Sume-hosted media.sume.com media, so import your clips first. Round starts to a sensible precision, since a generated track may drift from its stated tempo. Run the unbilled /plan preflight described in the Timeline docs, then listen to the first render against the grid. For the full assembly flow see assemble long-form video with the Timeline API, and for tempo wording see AI music BPM control.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume