{
  "version": "0.1.0",
  "status": "browser-only",
  "tools": [
    {
      "id": "mp4-to-mp3",
      "name": "MP4 to MP3",
      "description": "Extract audio from an MP4 video. Convert on your device, then preview and download your MP3.",
      "category": "Convert",
      "operation": "convert",
      "accepts": [
        "mp4"
      ],
      "output": "mp3",
      "defaultBitrate": 192,
      "detail": "Keep the conversation, leave the video.",
      "useCase": "Turn your recorded lecture, interview, or screen recording into audio you can listen to anywhere. The first audio track is extracted; the picture is discarded.",
      "caveat": "MP4 is a container. A silent video has no audio to extract. Encoding as MP3 may reduce quality; a higher bitrate cannot restore detail missing from the source.",
      "steps": [
        "Choose your MP4 video.",
        "Pick a bitrate. 192 kbps is a useful starting point.",
        "Convert, listen to the preview, and download the MP3."
      ],
      "related": [
        "compress-mp3",
        "trim-audio"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "compress-mp3",
      "name": "Compress MP3",
      "description": "Make an MP3 smaller by lowering its bitrate. Compare the actual sizes before downloading.",
      "category": "Compress",
      "operation": "compress",
      "accepts": [
        "mp3"
      ],
      "output": "mp3",
      "defaultBitrate": 128,
      "detail": "Less file. More room.",
      "useCase": "Reduce the size of a lecture, podcast draft, or voice recording before sharing. Choose 64–96 kbps for speech or 128–192 kbps when music quality matters more.",
      "caveat": "Re-encoding is lossy. An already compact MP3 may not get smaller, especially if you choose a higher bitrate. We show the actual result and never promise a fixed reduction.",
      "steps": [
        "Choose the MP3 you want to shrink.",
        "Select a bitrate below the original.",
        "Compare the file sizes, preview, and download."
      ],
      "related": [
        "mp4-to-mp3",
        "trim-audio"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 128
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "trim-audio",
      "name": "Trim audio",
      "description": "Keep the part you need. Cut an MP3, WAV, M4A, or other supported audio file with precise start and end times.",
      "category": "Edit",
      "operation": "trim",
      "accepts": [
        "mp3",
        "wav",
        "m4a",
        "aac",
        "flac",
        "ogg",
        "opus",
        "aiff",
        "aif"
      ],
      "output": "mp3",
      "defaultBitrate": 192,
      "detail": "Straight to the good part.",
      "useCase": "Cut an interview quote, remove a long introduction, or shorten a voice memo. Enter times in seconds and preview the original before exporting just your selection.",
      "caveat": "The selected section is re-encoded as MP3, not losslessly copied. Trimming does not remove background noise. A cut in the middle of a waveform can click; choose a quiet boundary.",
      "steps": [
        "Choose a supported audio file.",
        "Set the start and end time in seconds.",
        "Trim, listen to your clip, and download."
      ],
      "related": [
        "compress-mp3",
        "mp4-to-mp3"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "wav-to-mp3",
      "name": "WAV to MP3",
      "accepts": [
        "wav"
      ],
      "output": "mp3",
      "description": "Turn a large WAV recording into a smaller, widely playable MP3. No upload required.",
      "detail": "Ready to share your recording.",
      "useCase": "Uncompressed WAV recordings can be large. Convert a rehearsal, narration, or podcast draft to MP3 for review while keeping the original as your editing master.",
      "caveat": "PCM WAV to MP3 is a lossy conversion. Keep the WAV if you will edit again. A 24-bit source is converted for MP3 encoding; bit depth is not preserved as a WAV-like property.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your WAV file.",
        "Choose a bitrate for your output.",
        "Convert, preview, and download the MP3."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "mp3-to-wav"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "m4a-to-mp3",
      "name": "M4A to MP3",
      "accepts": [
        "m4a"
      ],
      "output": "mp3",
      "description": "Convert an M4A voice memo or audio file to MP3 for easier playback and sharing.",
      "detail": "Your voice memo, more compatible.",
      "useCase": "M4A is common for phone voice memos and some recording apps. MP3 can help when a recipient or older player will not open the original.",
      "caveat": "M4A may contain lossy AAC or lossless ALAC audio. Conversion to MP3 is lossy either way. Protected or encrypted files are not supported; changing the extension alone does not convert audio.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your M4A file.",
        "Choose a bitrate for your output.",
        "Convert, preview, and download the MP3."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "mp3-to-wav"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "flac-to-mp3",
      "name": "FLAC to MP3",
      "accepts": [
        "flac"
      ],
      "output": "mp3",
      "description": "Create a compact MP3 listening copy from a FLAC file while keeping your lossless original.",
      "detail": "A lighter listening copy.",
      "useCase": "Use a smaller copy for a portable player or quick sharing. Keep your FLAC as the source for future exports instead of repeatedly converting an MP3.",
      "caveat": "FLAC preserves audio losslessly. MP3 trades some information for a smaller file. A 320 kbps MP3 is still lossy, and embedded cover art is removed from this export.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your FLAC file.",
        "Choose a bitrate for your output.",
        "Convert, preview, and download the MP3."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "mp3-to-wav"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "mov-to-mp3",
      "name": "MOV to MP3",
      "accepts": [
        "mov"
      ],
      "output": "mp3",
      "description": "Extract an MP3 audio track from a MOV recording, directly in your browser.",
      "detail": "Keep the sound from your camera clip.",
      "useCase": "Turn a short camera or QuickTime recording into audio for listening or review. Extracting sound avoids spending time re-encoding the video picture.",
      "caveat": "MOV can contain many different codecs. The file must contain a readable audio track; silent, damaged or protected recordings will fail. Very large camera recordings may exceed browser limits.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your MOV file.",
        "Choose a bitrate for your output.",
        "Convert, preview, and download the MP3."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "mp3-to-wav"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "webm-to-mp3",
      "name": "WebM to MP3",
      "accepts": [
        "webm"
      ],
      "output": "mp3",
      "description": "Make an MP3 from WebM audio or video. Useful for recordings that older players cannot open.",
      "detail": "From browser recording to everyday audio.",
      "useCase": "Screen recorders and browser apps often produce WebM with Opus or Vorbis audio. Convert the soundtrack to MP3 when your editing software or player needs it.",
      "caveat": "WebM may contain only video. A readable audio stream is required. Converting Opus or Vorbis to MP3 introduces another lossy generation; a higher bitrate cannot recover source detail.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your WEBM file.",
        "Choose a bitrate for your output.",
        "Convert, preview, and download the MP3."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "mp3-to-wav"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "mp3-to-wav",
      "name": "MP3 to WAV",
      "accepts": [
        "mp3"
      ],
      "output": "wav",
      "description": "Decode MP3 into 16-bit PCM WAV for editing-software compatibility. Files remain on your device.",
      "detail": "A format change, for your next editor.",
      "useCase": "Some editors, samplers, or delivery specifications need PCM WAV. This tool exports 16-bit PCM at 44,100 or 48,000 Hz in mono or stereo.",
      "caveat": "Converting MP3 to WAV does not improve its original quality. WAV files can become much larger: 44.1 kHz stereo PCM uses about 10.58 MB per minute. Output is limited to an estimated 150 MB.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your MP3 file.",
        "Choose the sample rate and channels in advanced settings.",
        "Convert, preview, and download the WAV."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "wav-to-mp3"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/wav"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/wav"
    },
    {
      "id": "mp3-to-m4a",
      "name": "MP3 to M4A",
      "accepts": [
        "mp3"
      ],
      "output": "m4a",
      "description": "Convert MP3 to AAC audio in an M4A container. Choose a bitrate and preview the result locally.",
      "detail": "AAC audio for your next workflow.",
      "useCase": "Use M4A when a particular app or delivery workflow asks for AAC in an MP4-family container. This export uses AAC, not Apple Lossless.",
      "caveat": "MP3 to AAC is a lossy-to-lossy conversion. Keep the MP3 if changing formats is unnecessary. M4A size depends on the selected bitrate and is not guaranteed to be smaller.",
      "category": "Convert",
      "operation": "convert",
      "defaultBitrate": 192,
      "steps": [
        "Choose your MP3 file.",
        "Choose a bitrate for your output.",
        "Convert, preview, and download the M4A."
      ],
      "related": [
        "compress-mp3",
        "trim-audio",
        "mp3-to-wav"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mp4"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mp4"
    },
    {
      "id": "merge-audio",
      "name": "Merge audio",
      "description": "Join up to eight audio files into one MP3. Set their order, then combine them on your device.",
      "category": "Edit",
      "operation": "merge",
      "accepts": [
        "mp3",
        "wav",
        "m4a",
        "aac",
        "flac",
        "ogg",
        "opus",
        "aiff",
        "aif"
      ],
      "output": "mp3",
      "defaultBitrate": 192,
      "detail": "One file, in the right order.",
      "useCase": "Combine voice memos, short interview sections, or rehearsal takes. Files are normalized to the selected sample rate and channels before joining; there is no crossfade.",
      "caveat": "Joining re-encodes the audio as MP3. The combined inputs must fit 100 MB and 20 minutes. Mixed sample rates are converted; original metadata and cover art are removed.",
      "steps": [
        "Choose up to eight audio files together.",
        "Move clips earlier in the list to set their order.",
        "Merge, preview the full recording, and download."
      ],
      "related": [
        "trim-audio",
        "compress-mp3"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 8,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "volume-booster",
      "name": "Volume booster",
      "description": "Raise or lower a recording’s volume and export an MP3. A peak limiter helps reduce clipping.",
      "category": "Edit",
      "operation": "volume",
      "accepts": [
        "mp3",
        "wav",
        "m4a",
        "aac",
        "flac",
        "ogg",
        "opus",
        "aiff",
        "aif"
      ],
      "output": "mp3",
      "defaultBitrate": 192,
      "detail": "Make a quiet recording easier to hear.",
      "useCase": "Adjust a voice memo or recording by up to 12 dB in either direction. Start with a small change and preview at a comfortable playback volume.",
      "caveat": "Boosting also raises background noise. A limiter reduces peaks; it is not loudness normalization, noise removal, or a guarantee of distortion-free audio. Already clipped sound cannot be repaired this way.",
      "steps": [
        "Choose the recording you want to adjust.",
        "Set a volume change in decibels. Start with +3 dB.",
        "Process and preview before downloading."
      ],
      "related": [
        "trim-audio",
        "compress-mp3"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "audio/mpeg"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "audio/mpeg"
    },
    {
      "id": "remove-audio-from-video",
      "name": "Remove audio from video",
      "description": "Create a silent MP4 from an MP4 or MOV recording. The video track is copied without re-encoding.",
      "category": "Edit",
      "operation": "mute",
      "accepts": [
        "mp4",
        "mov"
      ],
      "output": "mp4",
      "defaultBitrate": 192,
      "detail": "Keep the picture. Remove the soundtrack.",
      "useCase": "Remove recorded conversation or background sound before sharing a clip. The first video track is copied to a new MP4; audio tracks are omitted.",
      "caveat": "Stream copying preserves video quality, but the original video codec must work in an MP4 container. Some MOV codecs will fail. Subtitles, extra video tracks and metadata are not retained.",
      "steps": [
        "Choose an MP4 or MOV file.",
        "Remove the audio; no video-quality setting is needed.",
        "Preview the silent video and download your MP4."
      ],
      "related": [
        "mp4-to-mp3",
        "mov-to-mp3"
      ],
      "inputSchema": {
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "bitrate": {
            "type": "integer",
            "enum": [
              64,
              96,
              128,
              192,
              256,
              320
            ],
            "default": 192
          },
          "sampleRate": {
            "type": "integer",
            "enum": [
              44100,
              48000
            ],
            "default": 44100
          },
          "start": {
            "type": "number",
            "minimum": 0
          },
          "end": {
            "type": "number",
            "maximum": 1200
          },
          "gain": {
            "type": "number",
            "minimum": -12,
            "maximum": 12
          },
          "mono": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "outputSchema": {
        "type": "string",
        "format": "binary",
        "contentMediaType": "video/mp4"
      },
      "execution": {
        "browserLocal": true,
        "serverAvailable": false,
        "strategy": "ffmpeg-wasm-worker",
        "maxInputBytes": 104857600,
        "maxDurationSeconds": 1200,
        "requires": [
          "WebAssembly",
          "Worker",
          "Blob"
        ],
        "browserSupport": "Current desktop browsers; device memory and codec support vary",
        "memory": "Input, output and engine coexist in device memory. Large files can fail."
      },
      "errors": [
        "INVALID_INPUT",
        "FILE_TOO_LARGE",
        "INVALID_SETTINGS",
        "NO_AUDIO",
        "DURATION_LIMIT",
        "OUTPUT_TOO_LARGE",
        "ENGINE_LOAD",
        "CONVERSION_FAILED",
        "CANCELLED",
        "TIMEOUT"
      ],
      "pricing": {
        "browser": {
          "amount": 0,
          "currency": "USD"
        },
        "api": {
          "available": false,
          "price": null
        }
      },
      "outputMime": "video/mp4"
    }
  ]
}
