██████╗ █████╗ ██████╗ ██████╗ ██████╗ ████████╗ ██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔═══██╗╚══██╔══╝ ██║ ███████║██████╔╝██████╔╝██║ ██║ ██║ ██║ ██╔══██║██╔══██╗██╔══██╗██║ ██║ ██║ ╚██████╗██║ ██║██║ ██║██║ ██║╚██████╔╝ ██║ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝
Carrot Leaf downloads and converts videos in your terminal. Paste a link from YouTube or
any of the 1,300+ sites yt-dlp knows, then press d to save it as MP4 or c to pick a
format. It runs on yt-dlp and
Textual.
Install
macOS and Linux:
curl -LsSf https://raw.githubusercontent.com/Yore-Des/carrot-leaf/main/install.sh | sh
Windows, in PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/Yore-Des/carrot-leaf/main/install.ps1 | iex"
The script installs uv if it's missing, then installs Carrot Leaf with its own copy of Python. You don't need Python, ffmpeg or anything else set up first.
If you already use uv or pipx:
uv tool install carrot-leaf
pipx install carrot-leaf # needs Python 3.10+
Use it
carrot # open the app
carrot <url> # open with a link already loaded
carrot update # update yt-dlp
carrot --version
Paste a link and the title, length, upload date and a thumbnail appear. The bottom bar lists every key:
| Key | Does |
|---|---|
d |
Download at the best quality, as MP4 |
c |
Convert: pick a video or audio format and a quality |
l |
List supported sites. Search by name, or paste a link to check it |
s |
Settings: download folder and browser cookies |
t |
Pick a theme |
o |
Show the last download in Finder or Explorer |
u |
Update yt-dlp |
tab |
Leave the URL bar so the letter keys work |
esc |
Back to the URL bar |
q |
Quit |
While the URL bar has focus, letters go into the link. Press tab first, or click a key
in the bottom bar.
You can paste the next link while a download runs. Downloads queue up and run one at a time.
Formats
| Video | Audio |
|---|---|
| MP4, MKV, WebM, MOV, GIF | MP3, M4A, Opus, FLAC, WAV, OGG |
| best, 2160p … 360p | best, 320 / 192 / 128 kbps |
The quality list only shows resolutions the video has. Where the format allows it, the file gets the title, artist and cover art.
Where files go
Downloads land in your Downloads folder as Title [video-id].ext. Press s to pick
another folder. If a file with that name already exists, the new one becomes
Title [video-id] (2).ext.
Settings, including your theme, live in:
- macOS:
~/Library/Application Support/carrot-leaf/config.toml - Linux:
~/.config/carrot-leaf/config.toml - Windows:
%LOCALAPPDATA%\carrot-leaf\config.toml
Themes
Carrot and Carrot light are the defaults. Both use only the 256 standard terminal
colours, so they look the same in macOS Terminal as in iTerm2, Ghostty or Kitty. Press
t to try the others. The app remembers your pick.
Videos that need you signed in
Age-restricted and members-only videos need a YouTube login. When Carrot Leaf hits one, it offers to borrow the cookies from a browser where you're signed in: Chrome, Firefox, Safari, Edge, Brave, Opera, Vivaldi or Chromium. Cookies stay off until you pick a browser, and you can switch them off again in Settings. On a Mac, expect a Keychain prompt the first time.
YouTube sometimes asks you to prove you're not a bot. That happens after a lot of requests from one connection, not because of the video, and it usually clears within an hour. Browser cookies get you past it right away.
When downloads break
Sites change how they serve video, YouTube more than most, and yt-dlp ships a fix every
few weeks. Carrot Leaf checks for a new yt-dlp at startup and tells you when one is out.
Press u or run carrot update to install it.
Updates
Carrot Leaf updates itself. While it's open, it checks PyPI for a newer release. If it
finds one, it installs it in the background after you quit, and your next launch runs
the new version. This works for the install script, uv tool and pipx. Set
CARROT_NO_AUTO_UPDATE=1 to turn it off.
ffmpeg and Deno
Converting needs ffmpeg, and YouTube needs Deno to run its JavaScript. Carrot Leaf uses your own copies if you have them. If not, Deno ships with the package, and ffmpeg downloads once (about 70 MB) the first time a conversion needs it.
Uninstall
uv tool uninstall carrot-leaf # or: pipx uninstall carrot-leaf
Development
git clone https://github.com/Yore-Des/carrot-leaf && cd carrot-leaf
uv sync
uv run carrot
uv run pytest # offline tests
CARROT_LIVE=1 uv run pytest # also run real downloads
uv run ruff check src tests && uv run ruff format src tests
To release, bump version in pyproject.toml and push a vX.Y.Z tag. GitHub Actions
builds it and publishes to PyPI.
Please be nice
Only download videos you have the right to download, and follow each site's terms.
License
MIT
Metadata
Release files for carrot-leaf 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| carrot_leaf-0.4.0.tar.gz | 29.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| carrot_leaf-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.8 kB
Release files / carrot_leaf-0.4.0.tar.gz
| Download URL | carrot_leaf-0.4.0.tar.gz |
|---|---|
| Size | 29.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c08f2e912877cff5cde374833915168de0f4a09035fcd34e864806cc1131b22
|
|
BLAKE2b-256 checksum How to use checksums |
aaaf21284ce0a4f25eb8cf8475040f5bb89ffbf2b3a017af9925e548eed8c83e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logRelease files / carrot_leaf-0.4.0-py3-none-any.whl
| Download URL | carrot_leaf-0.4.0-py3-none-any.whl |
|---|---|
| Size | 37.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
50987abc711f56059381462241f7fe09a91c39cc91c6777a30e3352583d2f67e
|
|
BLAKE2b-256 checksum How to use checksums |
48333dc990fa32bdca8ab0ad9f77fcb1bbe85279e1978677b071a8f0d1d5622d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logSecurity for carrot-leaf 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for carrot_leaf-0.4.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.