Fabric audio under 10 MB: how many seconds of wav and mp3 fit
Fabric lip-sync takes Sume-hosted audio under 10 MB, 300 s max. Stereo wav hits the size cap near 56 s; 128 kbps mp3 would reach 625 s, so length binds first.

Under Fabric's 10 MB audio limit, uncompressed 44.1 kHz stereo wav lasts about 56 seconds, while 128 kbps mp3 would reach about 625 seconds, past the 300-second cap, so for long clips the length cap bites first. The pricing page, read 2026-10-03, says Fabric audio must be Sume-hosted and under 10 MB, with a 300-second maximum. The seconds below are arithmetic from standard bitrates, not Sume figures, and I treat 10 MB as 10,000,000 bytes to stay conservative.
How many seconds fit?
Uncompressed audio costs bytes per second equal to sample rate times channels times two bytes. Compressed mp3 is just its bitrate divided by eight.
| Format | Bytes per second | Seconds under 10 MB |
|---|---|---|
| wav, 44.1 kHz stereo, 16-bit | 176,400 | 56 s |
| wav, 48 kHz stereo, 16-bit | 192,000 | 52 s |
| wav, 16 kHz mono, 16-bit | 32,000 | 312 s |
| mp3, 128 kbps | 16,000 | 625 s |
RATES = {
"wav 44.1 kHz stereo 16-bit": 44100 * 2 * 2,
"wav 16 kHz mono 16-bit": 16000 * 2,
"mp3 128 kbps": 128000 // 8,
}
LIMIT = 10_000_000 # treat 10 MB as 10,000,000 bytes to stay on the safe side
for name, bytes_per_second in RATES.items():
print(name, bytes_per_second, "B/s ->", LIMIT // bytes_per_second, "seconds")
How do I get a smaller file out of Sume?
Audio detach returns wav (pcm_s16le, sample-exact) by default, or mp3 at 128 kbps, and accepts channels: "mono" and a sample_rate of 16000, 44100 or 48000. Mono halves the bytes, and 16 kHz mono wav is about 32,000 bytes a second. Timeline audio also takes output.format of wav or mp3; the docs warn that mp3 re-adds priming padding at every edge, and advise wav for audio that will be joined again or that drives lip-sync.
What are the limits of this math?
- Real mp3 files carry tags and padding, so leave headroom below the computed seconds.
- A mono voice at 16 kHz may sound thinner than the original; listen before you commit to it for a face.
- The docs do not say whether the 10 MB check uses decimal or binary megabytes, which is why the table uses the smaller one.
Sources
Related posts
More in Developers
- Fan out four Omni Flash clips in parallel and poll the jobs
Submit four Gemini Omni Flash requests at once on Sume, store each job id, poll status with backoff, then join the clips with Timeline.
- Where to find a voice ID for Sume text to speech: voices_list and voi_
Sume TTS wants a voice UUID or a voi_ library id, never a voice name like alloy. Where to copy it from, and the error you get for a name.
- Find dead air in a Reel: sentence segments and silence split
Sume video inspect splits a transcript into sentence segments at pauses of 0.2 to 3 s. Use the gaps between segments to find dead air before you trim.
- Find every Sora call left in your codebase: a retired-id scan
OpenAI's Videos API shut down 2026-09-24. A 20-line Python scan lists every file still naming a retired sora-2 model id so you can swap them.
Written by Sume