{"id":21180051,"url":"https://github.com/mmguero/monkeyplug","last_synced_at":"2026-01-27T02:19:02.098Z","repository":{"id":41325842,"uuid":"422357350","full_name":"mmguero/monkeyplug","owner":"mmguero","description":"monkeyplug is a little script to mute profanity in audio files","archived":false,"fork":false,"pushed_at":"2026-01-18T04:50:54.000Z","size":93,"stargazers_count":36,"open_issues_count":4,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-18T17:28:11.086Z","etag":null,"topics":["audio","audio-files","ffmpeg","objectional-language","obscene-filter","obscenity","podcasts","profanity","profanity-detection","profanity-filter","profanity-filtering","profanityfilter","python","python3","swear-filter","vosk"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmguero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-28T21:13:56.000Z","updated_at":"2026-01-18T04:50:18.000Z","dependencies_parsed_at":"2023-11-30T19:24:43.480Z","dependency_job_id":"4a3596a5-10c0-4f48-9e26-da0e0fa7ed20","html_url":"https://github.com/mmguero/monkeyplug","commit_stats":{"total_commits":70,"total_committers":2,"mean_commits":35.0,"dds":0.4285714285714286,"last_synced_commit":"9abbd5bba61176e6e878f3d6c5eeaf55a8b3bc36"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/mmguero/monkeyplug","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmguero%2Fmonkeyplug","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmguero%2Fmonkeyplug/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmguero%2Fmonkeyplug/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmguero%2Fmonkeyplug/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmguero","download_url":"https://codeload.github.com/mmguero/monkeyplug/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmguero%2Fmonkeyplug/sbom","scorecard":{"id":654356,"data":{"date":"2025-08-11","repo":{"name":"github.com/mmguero/monkeyplug","commit":"1b5ccb7984e099dfc15ed6b185f10dc48d02b447"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":3,"reason":"3 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:54","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:55","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:52","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:52","Info: jobLevel 'contents' permission set to 'read': .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:54","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:55","Warn: no topLevel permission defined: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:1","Warn: no topLevel permission defined: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:1","Warn: no topLevel permission defined: .github/workflows/publish-to-pypi.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:48"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-vosk-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-vosk-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-vosk-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-vosk-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:126: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-vosk-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-vosk-ghcr.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-vosk-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-whisper-ghcr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-whisper-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-whisper-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-whisper-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:108: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-whisper-ghcr.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/monkeyplug-build-push-whisper-ghcr.yml:116: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/monkeyplug-build-push-whisper-ghcr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-to-pypi.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/publish-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-to-pypi.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/publish-to-pypi.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-to-pypi.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/mmguero/monkeyplug/publish-to-pypi.yml/main?enable=pin","Warn: containerImage not pinned by hash: docker/Dockerfile:2","Warn: containerImage not pinned by hash: docker/Dockerfile:26","Warn: containerImage not pinned by hash: docker/Dockerfile:52","Warn: pipCommand not pinned by hash: docker/Dockerfile:10-15","Warn: pipCommand not pinned by hash: docker/Dockerfile:42-49","Warn: pipCommand not pinned by hash: docker/Dockerfile:68-73","Warn: pipCommand not pinned by hash: .github/workflows/publish-to-pypi.yml:20","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  11 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T14:16:31.238Z","repository_id":41325842,"created_at":"2025-08-21T14:16:31.238Z","updated_at":"2025-08-21T14:16:31.238Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28796966,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T01:07:07.743Z","status":"online","status_checked_at":"2026-01-27T02:00:07.755Z","response_time":168,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audio-files","ffmpeg","objectional-language","obscene-filter","obscenity","podcasts","profanity","profanity-detection","profanity-filter","profanity-filtering","profanityfilter","python","python3","swear-filter","vosk"],"created_at":"2024-11-20T17:35:48.317Z","updated_at":"2026-01-27T02:19:02.086Z","avatar_url":"https://github.com/mmguero.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# monkeyplug\n\n[![Latest Version](https://img.shields.io/pypi/v/monkeyplug)](https://pypi.python.org/pypi/monkeyplug/) [![VOSK Docker Images](https://github.com/mmguero/monkeyplug/workflows/monkeyplug-build-push-vosk-ghcr/badge.svg)](https://github.com/mmguero/monkeyplug/pkgs/container/monkeyplug) [![Whisper Docker Images](https://github.com/mmguero/monkeyplug/workflows/monkeyplug-build-push-whisper-ghcr/badge.svg)](https://github.com/mmguero/monkeyplug/pkgs/container/monkeyplug)\n\n**monkeyplug** is a little script to censor profanity in audio files (intended for podcasts, but YMMV) in a few simple steps:\n\n1. The user provides a local audio file (or a URL pointing to an audio file which is downloaded)\n2. Either [Whisper](https://openai.com/research/whisper) ([GitHub](https://github.com/openai/whisper)) or the [Vosk](https://alphacephei.com/vosk/)-[API](https://github.com/alphacep/vosk-api) is used to recognize speech in the audio file (or a pre-generated transcript can be loaded)\n3. Each recognized word is checked against a [list](./src/monkeyplug/swears.txt) of profanity or other words you'd like muted (supports text or [JSON format](./SWEARS_JSON_FORMAT.md))\n4. [`ffmpeg`](https://www.ffmpeg.org/) is used to create a cleaned audio file, muting or \"bleeping\" the objectional words\n5. Optionally, the transcript can be saved for reuse in future processing runs\n\nYou can then use your favorite media player to play the cleaned audio file.\n\nIf provided a video file for input, **monkeyplug** will attempt to process the audio stream from the file and remultiplex it, copying the original video stream. \n\n**monkeyplug** is part of a family of projects with similar goals:\n\n* 📼 [cleanvid](https://github.com/mmguero/cleanvid) for video files (using [SRT-formatted](https://en.wikipedia.org/wiki/SubRip#Format) subtitles)\n* 🎤 [monkeyplug](https://github.com/mmguero/monkeyplug) for audio and video files (using either [Whisper](https://openai.com/research/whisper) or the [Vosk](https://alphacephei.com/vosk/)-[API](https://github.com/alphacep/vosk-api) for speech recognition)\n* 📕 [montag](https://github.com/mmguero/montag) for ebooks\n\n## Installation\n\nUsing `pip`, to install the latest [release from PyPI](https://pypi.org/project/monkeyplug/):\n\n```\npython3 -m pip install -U monkeyplug\n```\n\nOr to install directly from GitHub:\n\n\n```\npython3 -m pip install -U 'git+https://github.com/mmguero/monkeyplug'\n```\n\n## Prerequisites\n\n[monkeyplug](./src/monkeyplug/monkeyplug.py) requires:\n\n* [FFmpeg](https://www.ffmpeg.org)\n* Python 3\n    - [mutagen](https://github.com/quodlibet/mutagen)\n    - a speech recognition library, either of:\n        + [Whisper](https://github.com/openai/whisper)\n        + [vosk-api](https://github.com/alphacep/vosk-api) with a VOSK [compatible model](https://alphacephei.com/vosk/models)\n\nTo install FFmpeg, use your operating system's package manager or install binaries from [ffmpeg.org](https://www.ffmpeg.org/download.html). The Python dependencies will be installed automatically if you are using `pip` to install monkeyplug, except for [`vosk`](https://pypi.org/project/vosk/) or [`openai-whisper`](https://pypi.org/project/openai-whisper/); as monkeyplug can work with both speech recognition engines, there is not a hard installation requirement for either until runtime.\n\n## usage\n\n```\nusage: monkeyplug \u003carguments\u003e\n\noptions:\n  -h, --help            show this help message and exit\n  -v [true|false], --verbose [true|false]\n                        Verbose/debug output\n  -m \u003cstring\u003e, --mode \u003cstring\u003e\n                        Speech recognition engine (whisper|vosk) (default: whisper)\n  -i \u003cstring\u003e, --input \u003cstring\u003e\n                        Input file (or URL)\n  -o \u003cstring\u003e, --output \u003cstring\u003e\n                        Output file\n  -w \u003cprofanity file\u003e, --swears \u003cprofanity file\u003e\n                        text or JSON file containing profanity (default: \"swears.txt\")\n  --output-json \u003cstring\u003e\n                        Output file to store transcript JSON\n  --input-transcript \u003cstring\u003e\n                        Load existing transcript JSON instead of performing speech recognition\n  --save-transcript     Automatically save transcript JSON alongside output audio file\n  --force-retranscribe  Force new transcription even if transcript file exists (overrides automatic reuse)                        \n  -a \u003cstr\u003e, --audio-params \u003cstr\u003e\n                        Audio parameters for ffmpeg (default depends on output audio codec)\n  -c \u003cint\u003e, --channels \u003cint\u003e\n                        Audio output channels (default: 2)\n  -s \u003cint\u003e, --sample-rate \u003cint\u003e\n                        Audio output sample rate (default: 48000)\n  -r \u003cstr\u003e, --bitrate \u003cstr\u003e\n                        Audio output bitrate (default: 256K)\n  -q \u003cint\u003e, --vorbis-qscale \u003cint\u003e\n                        qscale for libvorbis output (default: 5)\n  -f \u003cstring\u003e, --format \u003cstring\u003e\n                        Output file format (default: inferred from extension of --output, or \"MATCH\")\n  --pad-milliseconds \u003cint\u003e\n                        Milliseconds to pad on either side of muted segments (default: 0)\n  --pad-milliseconds-pre \u003cint\u003e\n                        Milliseconds to pad before muted segments (default: 0)\n  --pad-milliseconds-post \u003cint\u003e\n                        Milliseconds to pad after muted segments (default: 0)\n  -b [true|false], --beep [true|false]\n                        Beep instead of silence\n  -z \u003cint\u003e, --beep-hertz \u003cint\u003e\n                        Beep frequency hertz (default: 1000)\n  --beep-mix-normalize [true|false]\n                        Normalize mix of audio and beeps (default: False)\n  --beep-audio-weight \u003cint\u003e\n                        Mix weight for non-beeped audio (default: 1)\n  --beep-sine-weight \u003cint\u003e\n                        Mix weight for beep (default: 1)\n  --beep-dropout-transition \u003cint\u003e\n                        Dropout transition for beep (default: 0)\n  --force [true|false]  Process file despite existence of embedded tag\n\nVOSK Options:\n  --vosk-model-dir \u003cstring\u003e\n                        VOSK model directory (default: ~/.cache/vosk)\n  --vosk-read-frames-chunk \u003cint\u003e\n                        WAV frame chunk (default: 8000)\n\nWhisper Options:\n  --whisper-model-dir \u003cstring\u003e\n                        Whisper model directory (~/.cache/whisper)\n  --whisper-model-name \u003cstring\u003e\n                        Whisper model name (base.en)\n  --torch-threads \u003cint\u003e\n                        Number of threads used by torch for CPU inference (0)\n\n```\n\n### Docker\n\nAlternately, a [Dockerfile](./docker/Dockerfile) is provided to allow you to run monkeyplug in Docker. You can pull one of the following images:\n\n* [VOSK](https://alphacephei.com/vosk/models)\n    - oci.guero.org/monkeyplug:vosk-small\n    - oci.guero.org/monkeyplug:vosk-large\n* [Whisper](https://github.com/openai/whisper?tab=readme-ov-file#available-models-and-languages)\n    - oci.guero.org/monkeyplug:whisper-tiny.en\n    - oci.guero.org/monkeyplug:whisper-tiny\n    - oci.guero.org/monkeyplug:whisper-base.en\n    - oci.guero.org/monkeyplug:whisper-base\n    - oci.guero.org/monkeyplug:whisper-small.en\n    - oci.guero.org/monkeyplug:whisper-small\n    - oci.guero.org/monkeyplug:whisper-medium.en\n    - oci.guero.org/monkeyplug:whisper-medium\n    - oci.guero.org/monkeyplug:whisper-large-v1\n    - oci.guero.org/monkeyplug:whisper-large-v2\n    - oci.guero.org/monkeyplug:whisper-large-v3\n    - oci.guero.org/monkeyplug:whisper-large\n\nthen run [`monkeyplug-docker.sh`](./docker/monkeyplug-docker.sh) inside the directory where your audio files are located.\n\n## Transcript Workflow\n\n**monkeyplug** supports saving and reusing transcripts to improve workflow efficiency:\n\n### Save Transcript for Later Reuse\n\n```bash\n# Generate transcript once and save it\nmonkeyplug -i input.mp3 -o output.mp3 --save-transcript\n\n# This creates output.mp3 and output_transcript.json\n```\n\n### Automatic Transcript Reuse\n\n```bash\n# Second run: Automatically detects and reuses transcript (22x faster!)\nmonkeyplug -i input.mp3 -o output.mp3 --save-transcript\n# Finds output_transcript.json and reuses it automatically\n\n# Force new transcription when needed\nmonkeyplug -i input.mp3 -o output.mp3 --save-transcript --force-retranscribe\n```\n\n### Manual Transcript Loading\n\n```bash\n# Explicitly specify transcript to load\nmonkeyplug -i input.mp3 -o output_strict.mp3 --input-transcript output_transcript.json -w strict_swears.txt\n```\n\n## Contributing\n\nIf you'd like to help improve monkeyplug, pull requests will be welcomed!\n\n## Authors\n\n* **Seth Grover** - *Initial work* - [mmguero](https://github.com/mmguero)\n\n## License\n\nThis project is licensed under the BSD 3-Clause License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmguero%2Fmonkeyplug","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmguero%2Fmonkeyplug","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmguero%2Fmonkeyplug/lists"}