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.

curl -fsSL https://mediaotter.madebysaira.me/install.sh | sh

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:

~/Library/Application Support/Adobe/CEP/extensions/MediaOtter

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:

defaults write com.adobe.CSXS.10 PlayerDebugMode 1

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:

Window → Extensions → MediaOtter

The panel docks like Lumetri. No relogin required.

02 — Your first download

Your first download

  1. Open the panelWindow → Extensions → MediaOtter inside Premiere Pro or After Effects.
  2. 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.
  3. Or paste any URL — copy a link from YouTube, Twitch, Vimeo, Instagram, X (Twitter), SoundCloud, TikTok, Reddit, Facebook and 1000+ more (yt-dlp extractors), then ⌘V inside the panel. MediaOtter detects URLs on your clipboard automatically.
  4. Choose format & quality — pick MP4 (video) or WAV (audio) and a quality cap. See Formats & quality for guidance.
  5. Watch live progress — each download shows percent, speed, ETA and file size. Controls are inline: Pause / Resume / Cancel.
  6. Import — when finished, click Import. MediaOtter creates (or reuses) a bin called MediaOtter inside your Project panel and drops the file there. Drag it to your timeline — it is a normal clip, already linked.
Where files land

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:3100: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, so H:MM:SS is 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 audio48kHz 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.js using yt-dlp -J metadata.

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).

MP4: h264 video + aac audio — muxed to .mp4  |  WAV: 48kHz PCM stereo

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/auth with scopes openid email profile https://www.googleapis.com/auth/youtube.readonly using PKCE (no client secret). A tiny local server listens on http://127.0.0.1:8787/ for the OAuth redirect, exchanges the code at https://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 (mode 0600). The file holds accessToken, refreshToken and expiryMs — see extension/js/auth.js (getAuthPath() → path.join(util.getStateDir(),"auth.json")) and extension/js/util.js (getStateDir() → ~/Library/Application Support/MediaOtter on 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_token grant when expired or on 401; a failed refresh with 400/401 deletes auth.json and asks you to sign in again.
No credentials.json needed for users

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:

curl -fsSL https://mediaotter.madebysaira.me/install.sh | sh

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.

SymptomFix
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

  1. Tap the button below — it opens a pre-filled form on GitHub.
  2. Fill in the blanks in plain words: what happened, what you were doing, what you expected.
  3. If you can, add a screenshot: press Cmd + Shift + 4 on your Mac, drag the rectangle around the problem, and drag the picture into the form.
  4. 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.
  5. Hit Submit new issue. That's it — you never touch code.

Report a bug

Suggest an improvement

Same idea, one line: what should MediaOtter do, and why would it help your workflow?

Request a feature

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.

curl -fsSL https://mediaotter.madebysaira.me/install.sh | sh -s -- --uninstall

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)
  1. Remove the extension:
    rm -rf ~/Library/Application\ Support/Adobe/CEP/extensions/MediaOtter
  2. Symlinks: The installer creates no symlinks — it does cp -R. If you manually symlinked the folder, remove the link with rm.
  3. Delete local state (optional): Credentials, history and the managed yt-dlp live in the state dir from util.getStateDir():
    rm -rf ~/Library/Application\ Support/MediaOtter
    # removes auth.json, settings.json, history.json, logs/, bin/yt-dlp, ytdlp-runtime.json
    To keep downloads, keep ~/Movies/MediaOtter. To only sign out, delete just ~/Library/Application Support/MediaOtter/auth.json or use Panel → Settings → Sign out.
  4. Debug flag (optional): Leave PlayerDebugMode on — it is harmless. To revert: defaults delete com.adobe.CSXS.10 PlayerDebugMode.

Then Cmd+Q Premiere/AE. The panel is gone.