Docs • Read me
From zero to your first clip.
MediaOtter lives inside Premiere Pro & After Effects on your Mac — search YouTube, paste any link, trim and import MP4 or WAV straight to your timeline. This guide gets you there in about five minutes.
01 — Install
Install
MediaOtter installs into the Adobe CEP extensions folder — no admin password, no Java, no ZXPSignCmd. Two ways in:
a) One-liner (recommended)
Open Terminal on your Mac, paste and press Enter. The script detects Apple Silicon vs Intel, downloads the right zip from GitHub Releases, and installs it.
What the script does: mkdir -p ~/Library/Application\ Support/Adobe/CEP/extensions, downloads mediaotter-darwin-arm64.zip or -x64.zip from https://github.com/madebysaira/mediaotter/releases/download/v1.0.0/, verifies MediaOtter/CSXS/manifest.xml, then cp -R MediaOtter ~/Library/Application\ Support/Adobe/CEP/extensions/MediaOtter. Read it before you run it: install.sh on GitHub.
b) Manual zip
If you prefer the zip, download from GitHub Releases (latest):
Unzip, then either double-click install.command if present, or manually copy the MediaOtter folder to the real path the installer uses:
Create the folders if they do not exist. The result must contain MediaOtter/CSXS/manifest.xml and MediaOtter/index.html.
c) Enable unsigned extensions
Because the panel is unsigned, CEP must allow unsigned extensions once. The one-liner does this automatically; for manual installs run in Terminal:
This is exactly what install.sh does — defaults write com.adobe.CSXS.10 PlayerDebugMode 1 (only if not already set). On older Premiere/AE using CEP 10, this is the correct domain; newer CEP 11 uses com.adobe.CSXS.11 — set both if you run multiple Adobe versions. No symlink is created; the extension is a plain copy.
d) Restart Adobe
Fully quit Premiere Pro / After Effects (Cmd+Q), reopen, then:
The panel docks like Lumetri. No relogin required.
02 — Your first download
Your first download
- Open the panel —
Window → Extensions → MediaOtterinside Premiere Pro or After Effects. - Search YouTube — use the search box at the top. Results show thumbnails, duration and channel inline. Click a result to load it. Filters for duration/upload date are inline.
- Or paste any URL — copy a link from YouTube, Twitch, Vimeo, Instagram, X (Twitter), SoundCloud, TikTok, Reddit, Facebook and 1000+ more (
yt-dlpextractors), then⌘Vinside the panel. MediaOtter detects URLs on your clipboard automatically. - Choose format & quality — pick MP4 (video) or WAV (audio) and a quality cap. See Formats & quality for guidance.
- Watch live progress — each download shows percent, speed, ETA and file size. Controls are inline: Pause / Resume / Cancel.
- Import — when finished, click Import. MediaOtter creates (or reuses) a bin called
MediaOtterinside your Project panel and drops the file there. Drag it to your timeline — it is a normal clip, already linked.
By default in ~/Movies/MediaOtter (change in the panel's gear menu → Download folder). Files are plain MP4/WAV — move or rename them like any media.
03 — Section trim
Section trim
Do not download the whole file if you only need a moment. Before hitting Download, set a start and end time (e.g. 00:31 — 00:44).
- Works for both video (MP4) and audio (WAV).
- MediaOtter downloads the stream and trims locally with
ffmpeg— no re-upload, no quality loss beyond the cut. - Uses
yt-dlp --download-sections "*HH:MM:SS-HH:MM:SS"under the hood (bare seconds are mis-parsed, soH:MM:SSis required). - If a range download fails (network/DNS while streaming the cut), MediaOtter falls back to downloading the full file with
yt-dlp's native range handling and trims afterwards.
Short sections are faster and smaller — useful when YouTube throttles long downloads.
04 — Formats & quality
Formats & quality
- MP4 video — up to 1080p (
h264 + aac, Premiere-friendly). Higher sources are capped to keep imports instant and avoid HEVC/VP9 timelines. - WAV audio — 48kHz stereo PCM, clean and ready for the timeline without re-encoding.
- Quality picker — the panel caps the best available format at your chosen ceiling (e.g. 1080p, 720p, 480p). Logic lives in
extension/js/quality.jsusingyt-dlp -Jmetadata.
When to pick what: Need a talking head or B-roll? → MP4. Need music, SFX or a voiceover bed? → WAV (smaller, faster, no video decode, ideal for throttled connections).
05 — YouTube sign-in
YouTube sign-in
Some YouTube streams need a signed-in session (age-restricted, private playlists, bot-check challenges). MediaOtter handles this with a one-time, local OAuth flow — your password never touches MediaOtter.
- How it works: Click Sign in with Google in the panel. MediaOtter opens your system browser to
https://accounts.google.com/o/oauth2/v2/authwith scopesopenid email profile https://www.googleapis.com/auth/youtube.readonlyusing PKCE (no client secret). A tiny local server listens onhttp://127.0.0.1:8787/for the OAuth redirect, exchanges the code athttps://oauth2.googleapis.com/token, and closes the tab with “Signed in — you can close this window”. - Where tokens live: Only on your Mac, at
~/Library/Application Support/MediaOtter/auth.json(mode0600). The file holdsaccessToken,refreshTokenandexpiryMs— seeextension/js/auth.js(getAuthPath() → path.join(util.getStateDir(),"auth.json")) andextension/js/util.js(getStateDir() → ~/Library/Application Support/MediaOtteron macOS). - What MediaOtter sees: Only the access/refresh tokens. It never sees your Google password; cookies stay in your browser. API calls use
Authorization: Bearer <token>to the YouTube Data API. - Sign out / reset: Panel → Settings → Sign out deletes
auth.json(deleteAuth()), or manually:rm ~/Library/Application\ Support/MediaOtter/auth.json. Also revoke at myaccount.google.com/permissions. - Refresh: Access tokens auto-refresh via
refresh_tokengrant when expired or on 401; a failed refresh with 400/401 deletesauth.jsonand asks you to sign in again.
The installer ships with credentials.json internally; end users do not need to create one. If you build from source, see credentials.example.json.
06 — Updates
Updates
Bundled engine (yt-dlp): MediaOtter's download engine auto-updates from GitHub with SHA256 verification. On a 24-hour check it fetches https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest, finds the asset for your platform (yt-dlp_macos on macOS, yt-dlp.exe on Windows), downloads the matching SHA2-256SUMS, matches the 64-char hash, downloads the binary to a .part file, verifies with util.sha256OfFile(), then atomically renames to ~/Library/Application Support/MediaOtter/bin/yt-dlp (0755). State is tracked in ~/Library/Application Support/MediaOtter/ytdlp-runtime.json. A mismatched hash aborts the install. Source: extension/js/binary-manager.js (fetchLatestYtDlpRelease() → installManagedYtDlp()).
Extension itself: Re-run the one-liner to get the latest panel:
Or download the fresh zip from Releases and copy to ~/Library/Application Support/Adobe/CEP/extensions/MediaOtter — then Cmd+Q Premiere/AE.
07 — Troubleshooting
Troubleshooting
Most fixes take under a minute. Scan the table, then check the footnotes.
| Symptom | Fix |
|---|---|
| Panel doesn't appear Window → Extensions empty |
CEP debug flag not set or Adobe not restarted. Run defaults write com.adobe.CSXS.10 PlayerDebugMode 1 (as the installer does), then fully quit Premiere/AE with Cmd+Q and reopen. Verify the folder exists: ~/Library/Application Support/Adobe/CEP/extensions/MediaOtter/CSXS/manifest.xml. CEP 10+ (Premiere/AE 2022+) required. |
| Downloads fail Unsupported / removed / locked |
Link may be region-locked, age-restricted, private or removed. Try a different URL from the same site. For private/age-restricted YouTube, sign in first. Check network — no MediaOtter server is involved. |
| Slow downloads Speed / ETA stalls |
Source-side throttling (common on YouTube). Try lower quality or Section trim for a shorter span; WAV is smaller and often faster. Pause/Resume once, or retry in a minute. |
| “Unidentified developer” warning Gatekeeper |
Right-click the downloaded zip → Open, or after unzip run xattr -dr com.apple.quarantine ~/Library/Application\ Support/Adobe/CEP/extensions/MediaOtter then restart Adobe. The one-liner install avoids this. |
| Extension missing after update Adobe update cleared it |
Re-run the installer: curl -fsSL https://mediaotter.madebysaira.me/install.sh | sh and Cmd+Q Adobe again. Manual installs: recopy to ~/Library/Application Support/Adobe/CEP/extensions/MediaOtter. |
| WAV import issues No audio / wrong rate |
MediaOtter WAV is 48kHz stereo PCM — Premiere's preferred rate. If silent, check sequence settings (48kHz), try Modify → Audio Channels, or re-import. For video with no audio, pick WAV explicitly. |
Still stuck? Open an issue on GitHub with macOS version, Premiere/AE version and the URL you tried.
08 — Found a bug? Want a feature?
Found a bug? Want a feature?
MediaOtter is open source, which means it improves when you tell us what broke or what's missing. If something misbehaves or you'd love a new capability, we read every report. Most editors are not developers — you don't need to be one either. The whole thing is two clicks.
Report a bug
- Tap the button below — it opens a pre-filled form on GitHub.
- Fill in the blanks in plain words: what happened, what you were doing, what you expected.
- If you can, add a screenshot: press
Cmd + Shift + 4on your Mac, drag the rectangle around the problem, and drag the picture into the form. - Add your versions if you know them (macOS, Premiere/AE — found in About). If not, leave them blank; we'll ask if we need them.
- Hit Submit new issue. That's it — you never touch code.
Suggest an improvement
Same idea, one line: what should MediaOtter do, and why would it help your workflow?
One request per issue keeps things trackable. Before posting, a quick search in the issue list might find your bug already reported — feel free to add a 👍 or a comment instead of a duplicate.
09 — Uninstall
Uninstall — one line
MediaOtter is a plain folder copy — removal is deleting folders. No admin needed. Pick the one-liner or the manual steps.
Shorthand: curl -fsSL https://mediaotter.madebysaira.me/uninstall.sh | sh — same script, just shorter. Add --purge to also delete ~/Library/Application Support/MediaOtter (auth, history, logs, managed yt-dlp). Without --purge we keep your state so you can re-install without re-signing in.
Manual steps (without the script)
- Remove the extension:
rm -rf ~/Library/Application\ Support/Adobe/CEP/extensions/MediaOtter
- Symlinks: The installer creates no symlinks — it does
cp -R. If you manually symlinked the folder, remove the link withrm. - Delete local state (optional): Credentials, history and the managed yt-dlp live in the state dir from
util.getStateDir():rm -rf ~/Library/Application\ Support/MediaOtterTo keep downloads, keep
# removes auth.json, settings.json, history.json, logs/, bin/yt-dlp, ytdlp-runtime.json~/Movies/MediaOtter. To only sign out, delete just~/Library/Application Support/MediaOtter/auth.jsonor use Panel → Settings → Sign out. - Debug flag (optional): Leave
PlayerDebugModeon — it is harmless. To revert:defaults delete com.adobe.CSXS.10 PlayerDebugMode.
Then Cmd+Q Premiere/AE. The panel is gone.
10 — License & privacy
License & privacy
MIT License — see LICENSE on GitHub (also opensource.org/licenses/MIT). Copyright © 2026 MediaOtter contributors. Free to use, fork and distribute.
No telemetry. No servers. MediaOtter runs entirely on your Mac. The only network requests are the sites you choose to download from, GitHub for yt-dlp updates (SHA256-verified), and the optional one-time Google OAuth handshake (accounts.google.com / oauth2.googleapis.com). There is no MediaOtter backend, no analytics and no tracking.
Details: Privacy Policy · Terms of Service · Source on GitHub