/adobe-cleanup-audio
Removes background noise and echo from speech in a video or audio file with Adobe Enhance Speech and returns the cleaned file — for videos, the cleaned speech is put back onto the original picture. Use for requests like "clean up the audio", "remove background noise", "remove
Claude Code
$ npx -y skills add adobe/skills --skill adobe-cleanup-audio --agent claude-code
Codex
$ npx skills add adobe/skills --skill adobe-cleanup-audio -a codex -y
Cursor
$ npx skills add adobe/skills --skill adobe-cleanup-audio -a cursor -y
Gemini CLI
$ npx skills add adobe/skills --skill adobe-cleanup-audio -a gemini-cli -y
GitHub Copilot
$ npx skills add adobe/skills --skill adobe-cleanup-audio -a github-copilot -y
OpenCode
$ npx skills add adobe/skills --skill adobe-cleanup-audio -a opencode -y
Windsurf
$ npx skills add adobe/skills --skill adobe-cleanup-audio -a windsurf -y
SKILL.md
adobe-cleanup-audio.SKILL.mdname: adobe-cleanup-audio
description: >
Removes background noise and echo from speech in a video or audio file with Adobe Enhance Speech
and returns the cleaned file — for videos, the cleaned speech is put back onto the original
picture. Use for requests like "clean up the audio", "remove background noise", "remove echo",
"enhance speech", "fix the audio in this video", or "make my podcast sound clearer". Do NOT use
for music mixing, adding music or sound effects, or transcription.
license: Apache-2.0
compatibility: "Runs on widget-capable surfaces (Claude, which supports the asset_add_file picker) and on surfaces without widgets (Codex), which use the asset_initialize_file_upload → PUT → asset_finalize_file_upload staging path. Raw local paths are never passed to Adobe tools."
allowed-tools: adobe_mandatory_init asset_add_file asset_openai_file_upload asset_initialize_file_upload asset_finalize_file_upload media_enhance_speech video_metadata video_render video_export
metadata:
version: 1.0.0
visibility: public
surface: [claude, codex]
Adobe Clean Up Audio
Cleans up speech in a video or audio file — removes background noise and echo — and returns the cleaned file:
- **Audio file** → the cleaned speech track.
- **Video file** → the original video with its audio replaced by the cleaned speech track.
The output contains **speech only**: the background (music/ambient) and reverb tracks that `media_enhance_speech` separates out are not included.
> **Async handling (`media_enhance_speech`, `video_render`, `video_export`):** a `status: "working"` result is **pending — not a failure and > not missing output**. The finished result is delivered automatically when the job completes; do > not call any poll tool yourself. Submit each job **once** — never resubmit while one is pending. > If the result doesn't arrive, tell the user the job was submitted and is still processing, and > don't offer workarounds.
---
Tool Reference
| Step | Tool | Notes | |------|------|-------| | Initialize | `adobe_mandatory_init` | Returns file-handling rules and tool routing | | Select source file | `asset_add_file` | File picker widget; injects the asset ID on confirmation | | Upload file attached in ChatGPT | `asset_openai_file_upload` | ChatGPT only; returns a URL for the Adobe tools | | Upload attached/local file | `asset_initialize_file_upload` | Starts the upload; returns a PUT URL | | Finish upload | `asset_finalize_file_upload` | Completes the upload; returns the asset ID | | Clean up speech | `media_enhance_speech` | Returns speech, background, and reverb tracks | | Read video properties (video only) | `video_metadata` | Width, height, fps, duration | | Recombine picture + cleaned speech (video only) | `video_render` | Max 10 minutes | | Export final video (video only) | `video_export` | `mp4` or `mov` |
---
Workflow
Step 0 — Initialize Adobe Tools
Call `adobe_mandatory_init` first. This returns file handling rules and tool routing guidance required for the rest of the workflow.
{ "skill_name": "adobe-cleanup-audio", "skill_version": "1.0.0" }---
Step 1 — Get the Source File
All tools here accept a Creative Cloud asset ID (e.g. `urn:aaid:sc:...`) or a presigned HTTPS URL from an approved storage host. Never pass a raw local path.
| Source | Action | |---|---| | File attached in ChatGPT and `asset_openai_file_upload` is available | Call `asset_openai_file_upload` with the attached file and use the URL it returns. Don't pass the attached file's local path to `asset_upload_file_from_url` — it only accepts https URLs. | | File attached in chat (e.g. `/mnt/user-data/uploads/…`) | Check egress status from `adobe_mandatory_init` (Step 0). If egress is enabled, upload it directly: get its size and MIME type, call `asset_initialize_file_upload({ path, media_type })`, PUT the bytes to the returned URL, then call `asset_finalize_file_upload({ filename, transfer_document })` and use the returned asset ID. If egress is disabled, open the picker (`asset_add_file()`) instead. | | Creative Cloud asset ID or presigned URL in the message | Use it directly. | | No file provided yet | Open the picker — no need to ask first. |
Opening the picker:
> *"Let's clean up your audio. Start by selecting your file:"*
asset_add_file()
Wait for the widget to inject the asset ID on confirmation — do not poll.
> **No-widget fallback** *(only if `asset_add_file` is unavailable on this surface, e.g. Codex)* — > stage any local file with the same `asset_initialize_file_upload` → PUT → > `asset_finalize_file_upload` sequence. If egress is disabled, tell the user the file can't be > staged on this surface. If no file was provided, ask the user to attach their video or audio file.
Note whether the source is **video** (`video/*`) or **audio** (`audio/*`). If it is neither, say so and ask for a video or audio file.
---
Step 2 — Enhance the Speech
media_enhance_speech({
assetId: "<source asset ID or presigned URL>",
filename: "<source-name>-clean-speech"
})Acknowledge briefly: *"Cleaning up the speech — this can take a moment."* If the result reports a pending/working status, wait for the completed result; never act on a pending status.
From the completed result, keep the **speech track** URL. Ignore the background and reverb tracks.
- **Audio source** → go to Step 4 and deliver the speech track.
- **Video source** → continue to Step 3 right away, in the same reply — the job isn't done until
the cleaned speech is back on the video. Don't stop and deliver only the speech track.
---
Step 3 — Put the Cleaned Speech Back on the Video (video only)
**3a. Read the source video's properties.**
video_metadata({ assetId: "<source asset ID>" }) // → width, height, fps, duration (seconds)If `duration` is over 600 seconds, `video_render` can't render it (10-minute limit): deliver the speech track as in Step 4 a
Read more
name: adobe-cleanup-audio description: > Removes background noise and echo from speech in a video or audio file with Adobe Enhance Speech and returns the cleaned file — for videos, the cleaned speech is put back onto the original picture. Use for requests like "clean up the audio", "remove background noise", "remove echo", "enhance speech", "fix the audio in this video", or "make my podcast sound clearer". Do NOT use for music mixing, adding music or sound effects, or transcription. license: Apache-2.0 compatibility: "Runs on widget-capable surfaces (Claude, which supports the asset_add_file picker) and on surfaces without widgets (Codex), which use the asset_initialize_file_upload → PUT → asset_finalize_file_upload staging path. Raw local paths are never passed to Adobe tools." allowed-tools: adobe_mandatory_init asset_add_file asset_openai_file_upload asset_initialize_file_upload asset_finalize_file_upload media_enhance_speech video_metadata video_render video_export metadata: version: 1.0.0 visibility: public surface: [claude, codex]
Adobe Clean Up Audio
Cleans up speech in a video or audio file — removes background noise and echo — and returns the cleaned file:
- **Audio file** → the cleaned speech track.
- **Video file** → the original video with its audio replaced by the cleaned speech track.
The output contains **speech only**: the background (music/ambient) and reverb tracks that `media_enhance_speech` separates out are not included.
> **Async handling (`media_enhance_speech`, `video_render`, `video_export`):** a `status: "working"` result is **pending — not a failure and > not missing output**. The finished result is delivered automatically when the job completes; do > not call any poll tool yourself. Submit each job **once** — never resubmit while one is pending. > If the result doesn't arrive, tell the user the job was submitted and is still processing, and > don't offer workarounds.
---
Tool Reference
| Step | Tool | Notes | |------|------|-------| | Initialize | `adobe_mandatory_init` | Returns file-handling rules and tool routing | | Select source file | `asset_add_file` | File picker widget; injects the asset ID on confirmation | | Upload file attached in ChatGPT | `asset_openai_file_upload` | ChatGPT only; returns a URL for the Adobe tools | | Upload attached/local file | `asset_initialize_file_upload` | Starts the upload; returns a PUT URL | | Finish upload | `asset_finalize_file_upload` | Completes the upload; returns the asset ID | | Clean up speech | `media_enhance_speech` | Returns speech, background, and reverb tracks | | Read video properties (video only) | `video_metadata` | Width, height, fps, duration | | Recombine picture + cleaned speech (video only) | `video_render` | Max 10 minutes | | Export final video (video only) | `video_export` | `mp4` or `mov` |
---
Workflow
Step 0 — Initialize Adobe Tools
Call `adobe_mandatory_init` first. This returns file handling rules and tool routing guidance required for the rest of the workflow.
{ "skill_name": "adobe-cleanup-audio", "skill_version": "1.0.0" }---
Step 1 — Get the Source File
All tools here accept a Creative Cloud asset ID (e.g. `urn:aaid:sc:...`) or a presigned HTTPS URL from an approved storage host. Never pass a raw local path.
| Source | Action | |---|---| | File attached in ChatGPT and `asset_openai_file_upload` is available | Call `asset_openai_file_upload` with the attached file and use the URL it returns. Don't pass the attached file's local path to `asset_upload_file_from_url` — it only accepts https URLs. | | File attached in chat (e.g. `/mnt/user-data/uploads/…`) | Check egress status from `adobe_mandatory_init` (Step 0). If egress is enabled, upload it directly: get its size and MIME type, call `asset_initialize_file_upload({ path, media_type })`, PUT the bytes to the returned URL, then call `asset_finalize_file_upload({ filename, transfer_document })` and use the returned asset ID. If egress is disabled, open the picker (`asset_add_file()`) instead. | | Creative Cloud asset ID or presigned URL in the message | Use it directly. | | No file provided yet | Open the picker — no need to ask first. |
Opening the picker:
> *"Let's clean up your audio. Start by selecting your file:"*
asset_add_file()
Wait for the widget to inject the asset ID on confirmation — do not poll.
> **No-widget fallback** *(only if `asset_add_file` is unavailable on this surface, e.g. Codex)* — > stage any local file with the same `asset_initialize_file_upload` → PUT → > `asset_finalize_file_upload` sequence. If egress is disabled, tell the user the file can't be > staged on this surface. If no file was provided, ask the user to attach their video or audio file.
Note whether the source is **video** (`video/*`) or **audio** (`audio/*`). If it is neither, say so and ask for a video or audio file.
---
Step 2 — Enhance the Speech
media_enhance_speech({
assetId: "<source asset ID or presigned URL>",
filename: "<source-name>-clean-speech"
})Acknowledge briefly: *"Cleaning up the speech — this can take a moment."* If the result reports a pending/working status, wait for the completed result; never act on a pending status.
From the completed result, keep the **speech track** URL. Ignore the background and reverb tracks.
- **Audio source** → go to Step 4 and deliver the speech track.
- **Video source** → continue to Step 3 right away, in the same reply — the job isn't done until
the cleaned speech is back on the video. Don't stop and deliver only the speech track.
---
Step 3 — Put the Cleaned Speech Back on the Video (video only)
**3a. Read the source video's properties.**
video_metadata({ assetId: "<source asset ID>" }) // → width, height, fps, duration (seconds)If `duration` is over 600 seconds, `video_render` can't render it (10-minute limit): deliver the speech track as in Step 4 a
Other skills on skills.
More skills from other plugins.
karpathy-guidelines
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
agent-builder
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…
Questions about adobe-cleanup-audio.
- Which coding agents can use adobe-cleanup-audio?
- adobe-cleanup-audio installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

