App Store app preview audio: stereo AAC 256 kbps, check the track
Apple wants stereo AAC at 256 kbps and 44.1 or 48 kHz in an app preview. Use Sume audio detach to read channels and rate, and trim to keep the AAC track.

An app preview needs stereo audio, and Sume can tell you whether your clip has it. Apple's App Store Connect page lists audio for both H.264 and ProRes previews as stereo, 256 kbps AAC (ProRes also accepts PCM), at a 44.1 kHz or 48 kHz sample rate, laid out as either one track with two channels or two tracks with one channel each (read 2026-10-03). Sume's audio detach extracts a clip's audio into a wav or mp3 and reports the channels and sample rate it produced, which is a quick way to look at what the source carries.
Detach does not change the video's own audio, and Sume publishes no AAC bit rate setting, so this is a check, not a conform.
Apple's audio rows
Apple groups the audio rules under one heading for both formats. Configuration is stereo; the codec is AAC at 256 kbps, with PCM also accepted for ProRes; the sample rate is 44.1 kHz or 48 kHz; PCM bit depth is 16, 24 or 32. The stereo setup is either one two-channel track or two single-channel tracks (read 2026-10-03). The video rows, 15 to 30 seconds, a 500 MB maximum and 30 fps at most, sit beside them.
| Row | Apple's value | What you can check with Sume |
|---|---|---|
| Configuration | Stereo | Detach result channels |
| Codec and bit rate | AAC, 256 kbps | Not exposed; trim keeps AAC |
| Sample rate | 44.1 kHz or 48 kHz | Detach sample_rate option |
| Track layout | One 2-channel track or two 1-channel tracks | Probe from video inspect |
Read channels and rate with audio detach
Audio detach returns audio_url, duration_seconds, format, channels and sample_rate. channels defaults to source, which keeps the clip's layout, and sample_rate is null when you omit it, because the output inherits the source. To see a clean number, request sample_rate 48000 and read what comes back. The range field lets you detach only a few seconds, so the check is cheap at $0.01 per job under the current public rate (confirm in GET /v1/catalog).
A source with no audio fails with detach_source_has_no_audio, so run video inspect with frames: false first if you are unsure; its probe includes has_audio. The script detaches the first ten seconds and prints the channel layout it reports.
import os, time, requests
BASE = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def run(path, body, key):
r = requests.post(BASE + path, headers={**H, "Idempotency-Key": key}, json=body)
r.raise_for_status()
job = r.json()["request_id"]
while True:
s = requests.get(f"{BASE}/v1/jobs/{job}/status", headers=H).json()["status"]
if s in ("completed", "failed", "canceled"):
break
time.sleep(3)
return s, (requests.get(f"{BASE}/v1/jobs/{job}/result", headers=H).json() if s == "completed" else None)
status, res = run("/v1/audio-detach", {
"video_url": "https://media.sume.com/artifacts/artf_demo/preview.mp4",
"range": {"start": 0, "end": 10}, "channels": "source"}, "preview-audio-001")
if res:
print(res["channels"], res["sample_rate"], res["duration_seconds"], res["audio_url"])
else:
print(status)
Keep the AAC track when you trim
Video trim in its default exact mode remuxes kept audio as AAC, which matches Apple's codec, but the docs publish no bit rate, so the 256 kbps figure is something to verify elsewhere. audio set to keep is the default; drop makes a silent file, which is allowed if your preview has no sound but is worth a separate decision.
If the probe shows a mono track, a stereo upmix is a job for an audio tool. Sume's docs describe channels options on detach (source or mono), not an upmix to stereo, so do not count on it. Before you upload, play the file back on a device and in App Store Connect's preview, and note the sample rate you found.
Why the layout row matters
Apple allows two ways to carry stereo: one track with two channels, or two tracks with one channel each. A screen recording made on a phone usually arrives as the first kind, but a file edited in a multi-track tool can end up as the second, or with a stereo music bed plus a mono voice track that no one meant to ship. Detach merges what the clip carries into one output, so the channel count it reports describes the result, not each track.
If you suspect extra tracks, compare the length and channel count you get with what your editor shows, and open the file in a player that lists tracks. Sume's docs do not describe a per-track listing, so a mismatch is a reason to look in another tool before you submit to Apple.
A short audio checklist
Write down four things for each preview file: whether it has audio, how many channels, the sample rate, and the codec. Compare them with Apple's table. If any row does not match, fix it at the source and run the cut again.
Keep the rows next to the video size and length rows from the earlier part of the spec so one sheet covers the whole file. A preview that passes on the picture but fails on audio is a common reason for a re-upload.
Sources
Related posts
More in Developers
- Are Claude Code mods safe with a Sume API key in your env?
Claude Code mods run unsandboxed and can read env vars and settings files. What that means for a Sume API key, the CLI config file and an OAuth session.
- arun_ run ids: Format run or Action run? Store the family
A Sume arun_ id shows up under both /v1/format-runs and /v1/action-runs, and waitForRun requires a family. Store the surface next to the id and route reads.
- Astro API route for Sume webhooks: export const prerender = false
An Astro endpoint can receive Sume job webhooks if it is rendered on demand. Set prerender false, read the raw body, and verify the sume-v1 signature.
- attachment_too_large 413: 30 MB per image, 500 MB per run
A Format run 413 attachment_too_large means one image is over 30 MB or the set is over 500 MB. It is a different 413 from payload_too_large (4 MiB body).
Written by Sume