PAR YT2Text
PAR YT2Text Based on yt By Daniel Miessler with the addition of OpenAI Whisper for videos that don't have transcripts.
Features
- Extract metadata, transcripts, and comments from YouTube videos
- If the transcript is not available, optionally use OpenAI Whisper API or Local model to transcribe the audio
Prerequisites
- To install PAR YT2Text, make sure you have Python 3.11.
- Create a GOOGLE API key
- If you want to use OpenAI Whisper API, create an OPENAI API key (An OpenAI key is not needed for local OpenAI Whisper).
uv is recommended
Linux and Mac
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Installation
Installation From Source WITHOUT support for local OpenAI Whisper
- Clone the repository:
git clone https://github.com/paulrobello/par_yt2text.git
cd par_yt2text
uv sync
Installation From Source WITH support for local OpenAI Whisper
- Clone the repository:
git clone https://github.com/paulrobello/par_yt2text.git
cd par_yt2text
uv sync -U --extra local-whisper
Installation From PyPI WITHOUT support for local OpenAI Whisper
uv tool install par_yt2text
pipx install par_yt2text
Installation From PyPI WITH support for local OpenAI Whisper
To install PAR YT2Text from PyPI with local OpenAI Whisper, run any of the following commands:
uv tool install -U 'git+https://github.com/paulrobello/par_yt2text[local-whisper]' --index https://download.pytorch.org/whl/cu121 --index-strategy unsafe-best-match
pipx install 'par_yt2text[local-whisper] @ git+https://github.com/paulrobello/par_yt2text' --pip-args="--extra-index-url https://download.pytorch.org/whl/cu121"
Usage
Create a file called ~/.par_yt2text.env with your Google API key and OpenAI API key in it.
GOOGLE_API_KEY= # needed for youtube-transcript-api
OPENAI_API_KEY= # needed for OpenAI API whisper audio transcription (An OpenAI key is not needed for local OpenAI Whisper).
PAR_YT2TEXT_SAVE_DIR= # where to save the transcripts if you dont specify a folder in the --save option
Whisper audio transcription will only be used if you specify the --whisper or --local-whisper option and the video does not have a transcript.
If you want to force the use of whisper audio transcription, use the --force-whisper option with one of the --whisper or --local-whisper options.
Often the transcript will come back a single long line.
PAR YT2Text will attempt to add newlines to the transcript to make it easier to read unless you specify the --no-fix-newlines option.
Local Whisper
While the OpenAI Whisper API is fast and inexpensive a free local option is available.
NOTE: Local whisper mode can be very slow on cpu. If you have a CUDA enabled GPU it will be used unless you specify the --whisper-device option.
turbo is the default local model however you should consult the OpenAI Whisper documentation to see what models are available and select the best one for your VRAM needs.
Running from source
uv run par_yt2text --transcript --whisper 'https://www.youtube.com/watch?v=COSpqsDjiiw'
Running if installed from PyPI
par_yt2text --transcript --whisper 'https://www.youtube.com/watch?v=COSpqsDjiiw'
Example of forcing use of local Whisper if tool was installed with local Whisper enabled
par_yt2text --transcript --force-whisper --whisper-local 'https://www.youtube.com/watch?v=COSpqsDjiiw'
Options
usage: par_yt2text [-h] [--duration] [--transcript] [--comments] [--metadata] [--no-fix-newlines] [--whisper] [--local-whisper]
[--whisper-device {auto,cpu,cuda}] [--force-whisper] [--whisper-model WHISPER_MODEL] [--lang LANG] [--save FILE]
url
positional arguments:
url YouTube video URL
options:
-h, --help show this help message and exit
--duration Output only the duration
--transcript Output only the transcript
--comments Output the comments on the video
--metadata Output the video metadata
--no-fix-newlines Dont attempt to fix missing newlines from sentences
--whisper Use OpenAI Whisper to transcribe the audio if transcript is not available
--local-whisper Use Local OpenAI Whisper to transcribe the audio if transcript is not available
--whisper-device {auto,cpu,cuda}
Device to use for local Whisper cpu, cuda (default: auto)
--force-whisper Force use of selected Whisper to transcribe the audio even if transcript is available
--whisper-model WHISPER_MODEL
Whisper model to use for audio transcription (default-api: whisper-1, default-local: turbo)
--lang LANG Language for the transcript (default: English)
--save FILE Save the output to a file
Whats New
- Version 0.2.4:
- Fixed cross-platform path handling for Windows compatibility
- Version 0.2.3:
- Updated dependencies and ensure Python 3.14 compatibility
- Version 0.2.2:
- Updated dependencies
- Version 0.2.1:
- Updated dependencies
- Version 0.2.0:
- Added support for local OpenAI Whisper
- Version 0.1.0:
- Initial release
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Paul Robello - probello@gmail.com (Based on yt By Daniel Miessler)
Metadata
Release files for par-yt2text 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| par_yt2text-0.2.5.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| par_yt2text-0.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.4 kB
Release files / par_yt2text-0.2.5.tar.gz
| Download URL | par_yt2text-0.2.5.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
926f1dbaa9b845a7c2ad20ded9ccbff00abc2c1e5f1ed8e9fefe14ea4634317b
|
|
BLAKE2b-256 checksum How to use checksums |
eb198f93ebdf540c63942448c6ef19936c0fe243672aeddfbd486088e845bc15
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Mar 20, 2026.
Transparency logRelease files / par_yt2text-0.2.5-py3-none-any.whl
| Download URL | par_yt2text-0.2.5-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0331877e1e87c825867005703f2f79b088f7ba22ccd89979e6e41b7c0181f737
|
|
BLAKE2b-256 checksum How to use checksums |
b466ac2db9b45d4eec44ad7bc959c13721cf2f5e0f610dd462b5d46ca62f12ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Mar 20, 2026.
Transparency log