Gh Stack
remotion-dev/remotion
Manages stacked PRs and splits multi-part work into reviewable branches with gh-stack.
Audio Extraction: Extracting audio from videos, converting formats, and managing audio collections
$ npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cosmicstack-labs/mercury-agent-skills audio-extraction --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cosmicstack-labs/mercury-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/categories/media-download/audio-extraction .claude/skills/audio-extraction && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "audio-extraction" agent skill from https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extraction into .claude/skills/audio-extraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "audio-extraction", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extractionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cosmicstack-labs/mercury-agent-skills audio-extraction --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cosmicstack-labs/mercury-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/categories/media-download/audio-extraction .agents/skills/audio-extraction && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "audio-extraction" agent skill from https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extraction into .agents/skills/audio-extraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "audio-extraction", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cosmicstack-labs/mercury-agent-skills audio-extraction --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cosmicstack-labs/mercury-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/categories/media-download/audio-extraction .cursor/skills/audio-extraction && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "audio-extraction" agent skill from https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extraction into .cursor/skills/audio-extraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "audio-extraction", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cosmicstack-labs/mercury-agent-skills.git --path categories/media-download/audio-extraction--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cosmicstack-labs/mercury-agent-skills audio-extraction --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cosmicstack-labs/mercury-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/categories/media-download/audio-extraction .gemini/skills/audio-extraction && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "audio-extraction" agent skill from https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extraction into .gemini/skills/audio-extraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "audio-extraction", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cosmicstack-labs/mercury-agent-skills audio-extractionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cosmicstack-labs/mercury-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/categories/media-download/audio-extraction .github/skills/audio-extraction && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "audio-extraction" agent skill from https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extraction into .github/skills/audio-extraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "audio-extraction", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cosmicstack-labs/mercury-agent-skills audio-extraction --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cosmicstack-labs/mercury-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/categories/media-download/audio-extraction .opencode/skills/audio-extraction && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "audio-extraction" agent skill from https://github.com/cosmicstack-labs/mercury-agent-skills/tree/main/categories/media-download/audio-extraction into .opencode/skills/audio-extraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "audio-extraction", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
audio-extractionAudio Extraction: Extracting audio from videos, converting formats, and managing audio collections
Audio Extraction is an agent skill from cosmicstack-labs/mercury-agent-skills. Audio Extraction: Extracting audio from videos, converting formats, and managing audio collections
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative. The repository describes itself as: A curated registry of reusable Mercury Agent, Open Claw or Hermes Agent skills designed for real developer workflows, persistent memory, and token-efficient execution. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 30392fb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
yt-dlpffmpegpipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
youtube.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Audio Extraction loads about 4.7k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 618 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cosmicstack-labs/mercury-agent-skills at commit 30392fb, republished under its MIT licence (© cosmicstack-labs). 618 words, ~4,688 tokens.
.claude/skills/audio-extraction/SKILL.md (or your agent's skills folder).Extract high-quality audio from video files, convert between formats, manage metadata, and build organized audio collections. This skill covers everything from one-off audio rips to batch processing pipelines.
You cannot create quality that wasn't captured. Start with the highest quality source available — lossy-to-lossy transcoding degrades audio further. Always extract from the best original source.
Untagged audio files are unmanageable at scale. Proper ID3 tags, cover art, and consistent naming conventions turn a pile of files into a browsable music library.
Always keep a copy of the original file or at minimum log what source was used. Once you transcode, you lose information. Archival means keeping the best available original plus a convenient playback copy.
# Simplest audio extraction (best quality)
yt-dlp -x "https://youtube.com/watch?v=VIDEO_ID"
# Specific audio format
yt-dlp -x --audio-format mp3 "https://youtube.com/watch?v=VIDEO_ID"
# Best quality with metadata
yt-dlp -x --audio-format mp3 --audio-quality 0 \
--embed-thumbnail --embed-metadata "URL"# MP3 at various quality levels
yt-dlp -x --audio-format mp3 --audio-quality 0 "URL" # 320kbps (best)
yt-dlp -x --audio-format mp3 --audio-quality 2 "URL" # ~256kbps
yt-dlp -x --audio-format mp3 --audio-quality 5 "URL" # ~192kbps (good)
yt-dlp -x --audio-format mp3 --audio-quality 9 "URL" # ~128kbps (acceptable)
# FLAC (lossless)
yt-dlp -x --audio-format flac --audio-quality 0 "URL"
# AAC/M4A
yt-dlp -x --audio-format m4a "URL"
# Opus (best quality-per-bitrate)
yt-dlp -x --audio-format opus "URL"
# WAV (uncompressed)
yt-dlp -x --audio-format wav "URL"# List available audio formats
yt-dlp -F "URL" | grep -E "audio|opus|aac|mp3|m4a"
# Download specific audio stream
yt-dlp -f "140" "URL" # 128kbps AAC (YouTube standard)
# Download highest bitrate audio
yt-dlp -f "bestaudio[abr>128]/bestaudio" "URL"
# Download Opus stream (YouTube music)
yt-dlp -f "251" "URL" # 160kbps Opus# Convert MP4 to MP3
ffmpeg -i input.mp4 -vn -acodec libmp3lame -ab 320k output.mp3
# Convert any video to FLAC
ffmpeg -i input.mkv -vn -c:a flac output.flac
# Batch convert all MP4s in directory
for f in *.mp4; do
ffmpeg -i "$f" -vn -acodec libmp3lame -ab 320k "${f%.mp4}.mp3"
done# Trim from 30s to 1m30s
ffmpeg -i input.mp3 -ss 00:00:30 -to 00:01:30 -c copy output.mp3
# Trim from start for 45 seconds
ffmpeg -i input.mp3 -t 45 -c copy output.mp3
# Trim with re-encoding (for precise cuts)
ffmpeg -i input.mp3 -ss 00:00:30 -to 00:01:30 output.mp3# Concatenate with ffmpeg (same format)
ffmpeg -i "concat:file1.mp3|file2.mp3|file3.mp3" -c copy merged.mp3
# Using concat demuxer
echo "file 'part1.mp3'" > files.txt
echo "file 'part2.mp3'" >> files.txt
echo "file 'part3.mp3'" >> files.txt
ffmpeg -f concat -safe 0 -i files.txt -c copy merged.mp3
# Merge with crossfade
ffmpeg -i part1.mp3 -i part2.mp3 -filter_complex \
"[0:a][1:a]acrossfade=d=2:c1=tri:c2=tri[a]" \
-map "[a]" merged.mp3# EBU R128 loudness normalization (broadcast standard)
ffmpeg -i input.mp3 -af loudnorm=I=-16:LRA=11:TP=-1.5 output.mp3
# Peak normalization (simpler)
ffmpeg -i input.mp3 -af volume=3dB output.mp3
# Dynamic range compression
ffmpeg -i input.mp3 -af acompressor=threshold=-21dB:ratio=9:attack=200:release=1000 output.mp3
# Normalize batch files
for f in *.mp3; do
ffmpeg -i "$f" -af loudnorm=I=-16:LRA=11:TP=-1.5 "normalized_$f"
done# Install eyeD3
pip install eyeD3
# Set basic tags
eyeD3 -a "Artist Name" -A "Album Title" -t "Song Title" -n 1 -N 10 track.mp3
# Set genre and year
eyeD3 -G "Rock" -Y 2024 track.mp3
# Add album art
eyeD3 --add-image cover.jpg:FRONT_COVER track.mp3
# Remove all tags
eyeD3 --remove-all track.mp3from mutagen.mp3 import MP3
from mutagen.id3 import ID3, TIT2, TPE1, TALB, TRCK, TYER, APIC
import os
def tag_audio_file(filepath, metadata, cover_art_path=None):
"""
Tag an audio file with comprehensive metadata.
Args:
filepath: Path to the audio file
metadata: Dict with keys: title, artist, album, track, year, genre
cover_art_path: Path to cover art image
"""
audio = MP3(filepath, ID3=ID3)
audio.tags.add(TIT2(encoding=3, text=metadata['title']))
audio.tags.add(TPE1(encoding=3, text=metadata['artist']))
audio.tags.add(TALB(encoding=3, text=metadata['album']))
audio.tags.add(TRCK(encoding=3, text=str(metadata['track'])))
audio.tags.add(TYER(encoding=3, text=str(metadata['year'])))
if cover_art_path and os.path.exists(cover_art_path):
with open(cover_art_path, 'rb') as img:
audio.tags.add(
APIC(
encoding=3,
mime='image/jpeg',
type=3, # Front cover
desc='Cover',
data=img.read()
)
)
audio.save()
# Usage
tag_audio_file('track.mp3', {
'title': 'Bohemian Rhapsody',
'artist': 'Queen',
'album': 'A Night at the Opera',
'track': 11,
'year': 1975,
'genre': 'Rock'
}, 'cover.jpg')import os
import re
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, TIT2, TPE1, TALB
def tag_from_filename(directory, pattern=r"(.+?) - (.+?) - (.+)\.mp3"):
"""
Tag files based on filename pattern.
Default pattern: "Artist - Album - Title.mp3"
"""
for filename in os.listdir(directory):
if not filename.endswith('.mp3'):
continue
match = re.match(pattern, filename)
if not match:
continue
artist, album, title = match.groups()
filepath = os.path.join(directory, filename)
audio = MP3(filepath, ID3=ID3)
audio.tags.add(TPE1(encoding=3, text=artist.strip()))
audio.tags.add(TALB(encoding=3, text=album.strip()))
audio.tags.add(TIT2(encoding=3, text=title.strip()))
audio.save()
print(f"Tagged: {filename} → {artist} / {album} / {title}")
# Usage
tag_from_filename("~/Music/Downloads/")# Download podcast episode from RSS
yt-dlp -x --audio-format mp3 --audio-quality 0 "PODCAST_RSS_URL"
# Download only the latest episode
yt-dlp --playlist-end 1 -x --audio-format mp3 "RSS_URL"
# Download with consistent naming
yt-dlp -o "%(title)s.%(ext)s" -x --audio-format mp3 "RSS_URL"# Install gPodder
pip install gpodder
# Subscribe to a podcast
gpo add "https://example.com/podcast/rss"
# Download new episodes
gpo download
# List subscriptions
gpo listimport feedparser
import requests
import os
from urllib.parse import urlparse
def download_podcast_episodes(rss_url, output_dir="~/Podcasts"):
"""Download all episodes from an RSS feed."""
output_dir = os.path.expanduser(output_dir)
os.makedirs(output_dir, exist_ok=True)
feed = feedparser.parse(rss_url)
podcast_title = feed.feed.get('title', 'Unknown Podcast')
podcast_dir = os.path.join(output_dir, podcast_title)
os.makedirs(podcast_dir, exist_ok=True)
for entry in feed.entries:
title = entry.get('title', 'Unknown Episode')
# Sanitize filename
safe_title = "".join(c for c in title if c.isalnum() or c in ' -_').rstrip()
# Find audio enclosure
for link in entry.get('links', []):
if link.get('type', '').startswith('audio/'):
audio_url = link['href']
ext = os.path.splitext(urlparse(audio_url).path)[1] or '.mp3'
filepath = os.path.join(podcast_dir, f"{safe_title}{ext}")
if os.path.exists(filepath):
print(f"✓ Already downloaded: {title}")
continue
print(f"↓ Downloading: {title}")
response = requests.get(audio_url, stream=True)
with open(filepath, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
print(f"✓ Saved: {filepath}")
break
# Usage
download_podcast_episodes("https://feeds.example.com/podcast/rss.xml")# Extract audio from all videos in directory
for f in *.mp4 *.mkv *.webm; do
[ -e "$f" ] || continue
ffmpeg -i "$f" -vn -acodec libmp3lame -ab 320k "${f%.*}.mp3"
doneimport os
import subprocess
def extract_audio_recursive(root_dir, output_format='mp3', bitrate='320k'):
"""Extract audio from all video files in directory tree."""
video_extensions = {'.mp4', '.mkv', '.webm', '.avi', '.mov', '.flv'}
for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
ext = os.path.splitext(filename)[1].lower()
if ext not in video_extensions:
continue
input_path = os.path.join(dirpath, filename)
output_name = os.path.splitext(filename)[0] + f'.{output_format}'
output_path = os.path.join(dirpath, output_name)
if os.path.exists(output_path):
print(f"✓ Already exists: {output_name}")
continue
print(f"⟳ Extracting: {filename} → {output_name}")
cmd = [
'ffmpeg', '-i', input_path,
'-vn',
'-c:a', 'libmp3lame' if output_format == 'mp3' else output_format,
'-b:a', bitrate,
'-y', output_path
]
subprocess.run(cmd, capture_output=True)
print(f"✓ Done: {output_name}")
# Usage
extract_audio_recursive("~/Videos/Recordings", output_format='mp3', bitrate='320k')import os
import subprocess
from concurrent.futures import ThreadPoolExecutor, as_completed
def extract_audio_parallel(root_dir, workers=4):
"""Extract audio using multiple parallel workers."""
video_files = []
video_extensions = {'.mp4', '.mkv', '.webm'}
for dirpath, _, filenames in os.walk(root_dir):
for f in filenames:
if os.path.splitext(f)[1].lower() in video_extensions:
video_files.append(os.path.join(dirpath, f))
def process_file(filepath):
output = os.path.splitext(filepath)[0] + '.mp3'
if os.path.exists(output):
return f"✓ Skipped (exists): {os.path.basename(filepath)}"
cmd = [
'ffmpeg', '-i', filepath,
'-vn', '-c:a', 'libmp3lame',
'-b:a', '320k', '-y', output
]
subprocess.run(cmd, capture_output=True, timeout=300)
return f"✓ Extracted: {os.path.basename(filepath)}"
with ThreadPoolExecutor(max_workers=workers) as executor:
futures = {executor.submit(process_file, f): f for f in video_files}
for future in as_completed(futures):
print(future.result())
# Usage
extract_audio_parallel("~/Videos", workers=4)import subprocess
import json
def normalize_loudness(input_file, output_file, target_lufs=-16):
"""
Normalize audio to target loudness using EBU R128 standard.
Args:
input_file: Source audio file
output_file: Output file path
target_lufs: Target loudness in LUFS (default: -16 for podcasts, -14 for music)
"""
# First pass: measure loudness
measure_cmd = [
'ffmpeg', '-i', input_file,
'-af', f'loudnorm=I={target_lufs}:LRA=11:TP=-1.5:print_format=json',
'-f', 'null', '-'
]
result = subprocess.run(measure_cmd, capture_output=True, text=True, timeout=60)
# Second pass: apply normalization
normalize_cmd = [
'ffmpeg', '-i', input_file,
'-af', f'loudnorm=I={target_lufs}:LRA=11:TP=-1.5',
'-c:a', 'libmp3lame', '-b:a', '320k',
'-y', output_file
]
subprocess.run(normalize_cmd, capture_output=True, timeout=120)
print(f"Normalized to {target_lufs} LUFS: {output_file}")
# Usage
normalize_loudness("input.mp3", "output.mp3", target_lufs=-16)import subprocess
import json
def split_by_chapters(input_file, output_dir="splits"):
"""
Split an audio file into chapters using ffmpeg chapter metadata.
"""
import os
os.makedirs(output_dir, exist_ok=True)
# Get chapter info
cmd = [
'ffprobe', '-i', input_file,
'-print_format', 'json',
'-show_chapters',
'-loglevel', 'error'
]
result = subprocess.run(cmd, capture_output=True, text=True)
chapters = json.loads(result.stdout).get('chapters', [])
if not chapters:
print("No chapters found in the file.")
return
for chapter in chapters:
start = chapter['start_time']
end = chapter['end_time']
title = chapter.get('tags', {}).get('title', f'Chapter {chapter["id"]}')
safe_title = "".join(c for c in title if c.isalnum() or c in ' -_')
output_path = os.path.join(output_dir, f"{safe_title}.mp3")
cmd = [
'ffmpeg', '-i', input_file,
'-ss', str(start),
'-to', str(end),
'-c:a', 'libmp3lame', '-b:a', '320k',
'-y', output_path
]
subprocess.run(cmd, capture_output=True, timeout=300)
print(f"✓ Split: {title} ({start}s → {end}s)")
# Usage
split_by_chapters("podcast.mp3", "~/Music/Splits")import subprocess
import os
def prepare_for_transcription(video_file, output_wav="speech.wav"):
"""
Extract clean speech-optimized audio for transcription.
Converts to mono 16kHz WAV (standard for speech recognition).
"""
cmd = [
'ffmpeg', '-i', video_file,
'-vn', # No video
'-acodec', 'pcm_s16le', # 16-bit PCM
'-ac', '1', # Mono
'-ar', '16000', # 16kHz sample rate
'-af', 'highpass=200,lowpass=8000', # Speech frequency filter
'-y', output_wav
]
subprocess.run(cmd, capture_output=True, timeout=300)
print(f"✓ Audio prepared for transcription: {output_wav}")
return output_wav
# Usage
prepare_for_transcription("lecture.mp4", "lecture_audio.wav")| Level | Coverage | Quality | Metadata | Automation |
|---|---|---|---|---|
| 1: Basic | One-off extractions | Default quality | None | Manual |
| 2: Consistent | Format selection, basic batch | Target bitrate | Basic tags | Shell scripts |
| 3: Organized | Batch processing, normalization | Optimized per use case | Full ID3 + album art | Config presets |
| 4: Automated | Watch folders, scheduled jobs | Verified quality | Automatic tagging | Cron jobs + webhooks |
| 5: Library | Full pipeline, multi-format archive | Lossless originals + playback copies | Complete metadata + cover | Full automation with monitoring |
Target: Level 3 for personal music collections. Level 4 for podcast production pipelines. Level 5 for media archiving at scale.
-y cautiously.© cosmicstack-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in categories/media-download/audio-extraction of cosmicstack-labs/mercury-agent-skills.
Open the folder on GitHubat commit 30392fb
Audio Extraction next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Audio Extraction this skillcosmicstack-labs/mercury-agent-skills | 476 | — | ~4.7k | Automated safety check: Pass | MIT | |
| Gh Stackremotion-dev/remotion | 62k | 6 repos | ~2.4k | Automated safety check: Pass | Custom licence | |
| HyperFrames Media Useheygen-com/hyperframes | 58k | 2 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Guizang Social Cardsop7418/guizang-social-card-skill | 7.4k | 1 repos | ~7.8k | Automated safety check: Pass | AGPL-3.0 | |
| Weekly Changelog Videoheygen-com/hyperframes | 58k | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Anthropic Brand Stylinganthropics/skills | 180k | 29 repos | ~559 | Automated safety check: Pass | Apache-2.0 |
remotion-dev/remotion
Manages stacked PRs and splits multi-part work into reviewable branches with gh-stack.
heygen-com/hyperframes
Finds, generates and edits media for HyperFrames video projects: music, sound effects, images, icons, logos, voiceovers, captions and color grades.
op7418/guizang-social-card-skill
Produces social card sets for Xiaohongshu and WeChat: carousels, Live Photo motion cards and puzzle layouts, and WeChat cover pairs, rendered from single-file HTML.
heygen-com/hyperframes
Turns a weekly changelog markdown file into a branded HyperFrames video with voiceover, animated mock-UI scenes and captions, using fonts, background and scripts bundled in the skill.
anthropics/skills
Applies Anthropic's brand colors and fonts to artifacts such as PowerPoint slides, using fixed hex values for text and accents, Poppins headings and Lora body text.
harry0703/MoneyPrinterTurbo
Installs and runs MoneyPrinterTurbo to turn a topic or script into a finished short video with voice-over, subtitles, stock footage and music.
cosmicstack-labs/mercury-agent-skills
Use this before implementing a product, feature, SaaS, AI app, or side project to score product risk and choose the smallest validation step.
cosmicstack-labs/mercury-agent-skills
HyperFrames CLI dev loop — project scaffolding, validation (lint/inspect), browser preview with live reload, MP4/WebM rendering, and environment troubleshooting (doctor, browser, info, upgrade).
cosmicstack-labs/mercury-agent-skills
Asset preprocessing for HyperFrames compositions — local text-to-speech narration (Kokoro-82M, no API key), audio/video transcription (Whisper), and background removal for transparent overlays…
cosmicstack-labs/mercury-agent-skills
Design and implement agent-to-agent handoff protocols for multi-agent systems.
cosmicstack-labs/mercury-agent-skills
Monitor AI agent health, detect anomalies, set up alerting, and maintain observability dashboards for production multi-agent systems.
cosmicstack-labs/mercury-agent-skills
Design and operate task delegation systems for multi-agent fleets.
Categories
Audio Extraction: Extracting audio from videos, converting formats, and managing audio collections. Audio Extraction is an agent skill from cosmicstack-labs/mercury-agent-skills.
Audio Extraction fits situations like: media & Creative work in your project.
Run `npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a claude-code`. Or copy the skill folder (categories/media-download/audio-extraction in cosmicstack-labs/mercury-agent-skills) into .claude/skills/audio-extraction in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a codex`. Or copy the skill folder (categories/media-download/audio-extraction in cosmicstack-labs/mercury-agent-skills) into .agents/skills/audio-extraction in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cosmicstack-labs/mercury-agent-skills --skill audio-extraction -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/audio-extraction, .gemini/skills/audio-extraction, .github/skills/audio-extraction and .opencode/skills/audio-extraction in your project.
Going by SKILL.md and its folder, Audio Extraction needs the command-line tools its instructions call (yt-dlp, ffmpeg and pip). Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: youtube.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Audio Extraction is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Audio Extraction: Gh Stack (remotion-dev/remotion, 62k stars), HyperFrames Media Use (heygen-com/hyperframes, 58k stars), Guizang Social Cards (op7418/guizang-social-card-skill, 7.4k stars) and Weekly Changelog Video (heygen-com/hyperframes, 58k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cosmicstack-labs (a GitHub organization) maintains it in cosmicstack-labs/mercury-agent-skills, which has 476 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on August 25, 2026.
Source: cosmicstack-labs/mercury-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.