openai / openai/codex

Audio attachments: add playback speed control, and allow HTTP(S) audio sources (not just local files)

Open
#38,329 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app enhancement
Dominant language
Rust
Stars
125k
Forks
19.5k
PR merge metrics
PR metrics pending

Description

What variant of Codex are you using?

App (macOS desktop); also relevant to the CLI / input protocol (codex-cli 0.146.0)

What feature would you like to see?

I work with a lot of audio attachments in Codex (![](...) embeds render as an inline audio player). Two gaps make that workflow painful:

1. No playback speed control in the inline audio player

The player today has only: play/pause, a scrubber, elapsed/total time, and a menu:

♪  growing-live.mp3
   MP3 audio                          ▶  …
   ●──────────────────────  0:00 / 1:32

There is no way to speed the audio up or slow it down. Listening back to long recordings, meeting captures, or generated audio at 1× only is slow, and for reviewing many clips in a row it's the single biggest time sink. Every other audio player I use daily (podcast apps, browser <video>/<audio> menus, Slack voice clips, YouTube) offers this.

Requested:

  • A speed control on the player — at minimum / 1.25× / 1.5× / 1.75× / , ideally 0.5×.
  • Put it in the existing menu if the inline player is too small for a dedicated button.
  • Remember the last selected speed across clips and across sessions, so a whole review pass doesn't require re-selecting it per file.
  • While there: ±10s skip and a keyboard shortcut for play/pause would round it out.

2. Audio sources are local-file only — please allow HTTP(S) URLs

Today audio input has to be a local file. In the code, UserInput::LocalAudio { path } is read off disk and inlined as a base64 data: URL (codex-rs/protocol/src/local_media.rs), and the code-mode docs state it outright: "audio_url should be a base64-encoded data: URL" (codex-rs/code-mode-protocol/src/description.rs). Nothing accepts https://…/clip.mp3.

I tested this explicitly with two HTTP audio endpoints, and Codex made no request to either one — the reference is simply never fetched.

Requested:

  • Accept http(s) URLs wherever a local audio file is accepted today: ![](https://example.com/clip.mp3) in a message, attachments, and the audio input in the protocol/SDK.
  • Fetch and render remote audio in the inline player (streaming rather than fully downloading, where possible).
  • Keep it bounded and predictable: honor the existing 50 MB audio cap, enforce a content-type check and a timeout, and surface a clear error when a fetch fails instead of silently rendering a dead player.
  • If fetching remote media needs to stay opt-in for network/safety reasons, gate it behind a config flag rather than dropping the URL.

Why it matters: audio I want Codex to work with usually already lives behind a URL (recording services, object storage, CI artifacts, shared links). Having to download every clip to disk first, purely to hand it to Codex, is friction with no upside — and once it's inlined as a data URL it also bloats the conversation.

Additional information

Related but distinct:

  • #21645 — read-aloud / replay button for assistant responses (text-to-speech output, not playback controls for attached audio files).
  • #33932 — forwarding audio inputs to the Responses API (closed); this request is about the sources accepted and the player UI.

Happy to add the screenshot of the current player and the exact HTTP test setup in a comment if useful.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading codex-rs/protocol/src/local_media.rs and codex-rs/code-mode-protocol/src/description.rs, then trace the inline audio player and the App, CLI, and input-protocol paths that consume audio attachments. Confirm how the current 50 MB limit is enforced and where player behavior is tested. Done means supported playback-speed controls and remote HTTP(S) audio handling meet the stated limits, errors are surfaced clearly, and affected tests pass.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, rust
Domain
audio-video-rtc, cli, desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.