Instagram Replace Audio on a published post, or re-render with Sume
Instagram added audio replacement on published feed posts. Sume can render a new soundtrack but cannot feed it into that flow. Which route keeps what.

If a published Instagram feed post has audio you want to change, use Instagram's own replace-audio flow, because that is the only route that edits the existing post. Instagram's help page for replacing muted audio on a post says that when the music is muted or unavailable you can replace it with a song from Meta's Sound Collection (read 2026-10-03), which means the replacement comes from Instagram's library. Sume cannot upload a track into that flow: nothing in the Sume docs describes it. What Sume can do is render a new file with a different soundtrack, which you then publish as a new post.
The two routes side by side
I could not load Instagram's announcement page, so what happens to likes, comments and reach on replace is not stated here; read Instagram's current help text before you rely on it.
| Question | Instagram replace audio | Sume re-render |
|---|---|---|
| Edits the existing post | Yes, per Instagram | No, produces a new MP4 to post |
| Source of the new track | Instagram's library | Your own file or Music Router output |
| Needs your original footage | No | Yes, on media.sume.com |
| Cost | Not stated on the page | $0.10 per ceiling output minute for Timeline; music per generation |
Render the new soundtrack
A Timeline 1.0 render takes an audio spine plus ordered video[] slots. The optional soundtrack is a bed with gain_db, loop, fade_out_seconds up to 10 and duck_db 0-20, which lowers the bed under the spine; ducking needs a real spine, not silence (duck_requires_audio_spine). Generate the bed with the Music Router, which has no duration field, so ask for the length in the prompt.
import json, os, urllib.request
API = "https://api.sume.com/v1"
def post(path, body, key):
req = urllib.request.Request(
f"{API}{path}",
data=json.dumps(body).encode(),
headers={
"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Content-Type": "application/json",
"Idempotency-Key": key,
},
method="POST",
)
with urllib.request.urlopen(req) as res:
return json.load(res)
render = post(
"/timeline-1.0/render",
{
"audio": {"url": os.environ["SUME_VOICE_URL"], "duration_seconds": 20},
"video": [
{"source_url": os.environ["SUME_CLIP_URL"], "start": 0, "duration": 20}
],
"soundtrack": {
"url": os.environ["SUME_MUSIC_URL"],
"gain_db": -18,
"loop": True,
"fade_out_seconds": 2,
"duck_db": 8,
},
},
"new-soundtrack-001",
)
print(render["request_id"])
Rights and the honest choice
Using Instagram's own flow keeps you inside its music licensing. A file with music baked in is your responsibility, and Instagram can mute or restrict what it detects as unlicensed. If the goal is only a different library track, use the replace flow. If the goal is a different mix (voice ducking, a looped bed, fades) or a brand-owned track, re-render with the original footage and post fresh.
Set the bed under the voice, not over it
The most common reason to change a track is that it fights the voice. duck_db lowers the soundtrack while the spine speaks, from 0 to 20 dB, and gain_db sets the bed's overall level from -60 to 12. A starting point of -18 dB on the bed with 8 dB of ducking keeps music present without masking speech, but listen on a phone speaker before you commit. loop: true repeats a short bed to cover the render, and fade_out_seconds up to 10 closes it cleanly.
Check the plan first. The unbilled POST /v1/timeline-1.0/plan returns the duration and estimated cost without reserving credits, so you can confirm a 20-second render reserves one minute at $0.10 before you submit.
Generating the bed
For a new bed, send a prompt to POST /v1/music-router/generate and omit model to let sume/music-auto choose; today that is Lyria 3.5. The prompt can run up to 5000 characters, and duration and duration_seconds are rejected, so steer length in the words: a 30-second instrumental at a stated tempo. Put exclusions in the positive prompt, such as no vocals. Music is billed at the fixed Music price per generation, not per second.
A short decision list
Run through these before choosing a route.
- Do you only want a different song from Instagram's library on a post that already exists? Use Instagram's replace-audio flow.
- Do you need your own track, a looped bed, or a voice duck? Re-render with the original footage.
- Is the source footage still on hand? If not, a re-render is not possible and the in-app route is the only one.
- Is the post tied to comments or a campaign link you cannot move? Prefer the in-app route and confirm its behavior in Instagram's current help text.
- Are you producing several versions for testing? Render each with its own idempotency key so the retries stay separate.
Sources
Related posts
More in Use cases
- iOS 27 generated subtitles: do you still need burned-in captions?
iOS 27 generated subtitles are an on-device fallback for uncaptioned video, English in the US and Canada. What they leave to you, and how to burn captions.
- Is an AI thumbnail clickbait on YouTube? The misleading-title rule
YouTube bans maliciously misleading titles and thumbnails. How that reads for AI thumbnails and titles on Shorts, and how to check a frame matches the clip.
- Bulk-generating Shorts from templates after YouTube's update
YouTube named template-based bulk changes as not original. A self-audit of a Sume batch workflow: what to vary per item, and what a bulk run cannot fix.
- Is my AI cartoon Short 'made for kids'? YouTube's factors
YouTube asks every creator to say if a video is made for kids. Its listed factors, why a cartoon character counts, and which production choices affect it.
Written by Sume