generalize convert-to-mp3 into convert-audio with selectable target format

- rename task to convert-audio, support mp3/flac/wav/ogg/aac/opus targets
- add options input type with selectable pill buttons in UI
- extend seed script parser to handle YAML list properties (options)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 16:42:44 +00:00
co-authored by Claude Opus 4.6
parent 729ffb930b
commit 2caccc183c
4 changed files with 91 additions and 14 deletions
@@ -1,12 +1,13 @@
---
name: Convert To MP3
description: Convert audio files to MP3 320kbps, preserving metadata.
name: Convert Audio
description: Convert audio files between formats, preserving metadata.
version: 1
mode: script
language: bash
triggers:
- type: file
extensions:
- mp3
- flac
- wav
- ogg
@@ -26,6 +27,17 @@ inputs:
file_path:
type: string
description: Path to an audio file or directory to convert.
target_format:
type: string
description: Target format
default: mp3
options:
- mp3
- flac
- wav
- ogg
- aac
- opus
delete_source:
type: boolean
description: Delete source files after successful conversion.
@@ -33,7 +45,7 @@ inputs:
args: [file_path]
---
# Convert To MP3
# Convert Audio
Convert audio files to MP3 320kbps using ffmpeg, preserving metadata.
Convert audio files between formats using ffmpeg, preserving metadata.
Supports single file conversion and batch directory conversion.
@@ -1,11 +1,26 @@
#!/usr/bin/env bash
set -euo pipefail
# ── Task: Convert To MP3 ──
# ── Task: Convert Audio ──
EXTENSIONS="flac|wav|ogg|wma|aac|m4a|opus|aiff|aif|ape|wv|alac|dsf|dff"
EXTENSIONS="mp3|flac|wav|ogg|wma|aac|m4a|opus|aiff|aif|ape|wv|alac|dsf|dff"
TARGET_FORMAT="${INPUT_TARGET_FORMAT:-mp3}"
DELETE_SOURCE="${INPUT_DELETE_SOURCE:-false}"
ffmpeg_args_for_format() {
case "$1" in
mp3) echo "-codec:a libmp3lame -b:a 320k -id3v2_version 3" ;;
flac) echo "-codec:a flac" ;;
wav) echo "-codec:a pcm_s16le" ;;
ogg) echo "-codec:a libvorbis -q:a 6" ;;
aac) echo "-codec:a aac -b:a 256k" ;;
opus) echo "-codec:a libopus -b:a 192k" ;;
*) echo "Unsupported format: $1" >&2; return 1 ;;
esac
}
FFMPEG_ARGS=$(ffmpeg_args_for_format "$TARGET_FORMAT") || exit 1
process_file() {
local input="$1"
local ext="${input##*.}"
@@ -13,10 +28,10 @@ process_file() {
dir="$(dirname "$input")"
local base
base="$(basename "$input" ".$ext")"
local output="$dir/$base.mp3"
local output="$dir/$base.$TARGET_FORMAT"
if [[ "${ext,,}" == "mp3" ]]; then
echo "Skipping (already MP3): $input"
if [[ "${ext,,}" == "$TARGET_FORMAT" ]]; then
echo "Skipping (already $TARGET_FORMAT): $input"
return 0
fi
@@ -26,7 +41,8 @@ process_file() {
fi
echo "Converting: $input$output"
if ffmpeg -nostdin -i "$input" -codec:a libmp3lame -b:a 320k -map_metadata 0 -id3v2_version 3 -y "$output" 2>/dev/null; then
# shellcheck disable=SC2086
if ffmpeg -nostdin -i "$input" $FFMPEG_ARGS -map_metadata 0 -y "$output" 2>/dev/null; then
echo " Done"
if [[ "$DELETE_SOURCE" == "true" ]]; then
rm "$input"