Local-first toolkit for turning public YouTube channels into a searchable knowledge base.
Project description
YTtools
Local-first, open-source toolkit for turning any public YouTube channel, playlist, or video into a searchable, queryable knowledge base.
YTtools runs as a single Python process and opens a browser UI at http://localhost:8765. No cloud services, no API keys required out of the box, no telemetry. Everything stays on your machine.
What it does
Eight tools share one local storage layer (SQLite):
- Fetch — download transcripts and metadata from public YouTube URLs.
- Search — full-text search across every transcript, with jump-links to the original timestamps.
- Summarize — structured digests of a channel: topics, recurring themes, guests, posting cadence.
- Compare — side-by-side analysis of channels covering the same beat.
- Quotes — extract quotable lines, classified by type.
- Timeline — topic-over-time view across a channel.
- Blog — convert a single video into a structured Markdown article with timestamp citations.
- Ask — local retrieval-augmented question answering over a channel, with cited answers.
Fetch and Search ship in v0.1.0. The AI-backed tools land in v0.2.0 and v0.3.0 (see the roadmap).
Why local-first
- Privacy — transcripts, queries, and generated content never leave your machine.
- No subscriptions — the default AI backend is a local Ollama install. No metered API.
- No lock-in — your data is a single SQLite file you own.
Install
pipx install yttools
yttools serve
The web UI opens automatically at http://localhost:8765. Plain pip install yttools works too if you prefer to manage the environment yourself.
yt-dlp is installed as a dependency. For the AI tools, install Ollama and pull a model (for example ollama pull llama3.1:8b), or supply an API key for a hosted provider in Settings.
Quick start
# Pull a channel's transcripts and metadata into the local database
yttools fetch https://www.youtube.com/@TED
# Search across everything fetched
yttools search "machine learning" --limit 20
# Launch the browser UI
yttools serve
AI features
The AI-backed tools default to a local Ollama model, so they work offline with no account. If you prefer a hosted model, three hosted providers are supported: add an API key on the Settings page or via the matching environment variable. Keys resolve in this order: config file value, then environment variable. Without a key, that provider stays disabled. See docs/llm-providers.md for the list of supported providers and their models.
Roadmap
Releases are tracked on GitHub milestones. v0.1.0 covers the storage layer, Fetch, and Search. v0.2.0 adds Summarize, Quotes, and Blog. v0.3.0 adds Compare, Timeline, and Ask.
Contributing
Bug reports, feature requests, and Pull Requests are welcome. See CONTRIBUTING.md for setup, coding standards, and the Contributor License Agreement process.
License
Dual-licensed:
- AGPL-3.0 for open-source use. If you modify YTtools or use it to provide a network service, you must publish your changes under AGPL-3.0.
- Commercial license for organizations whose use is incompatible with AGPL-3.0.
Contributors sign a Contributor License Agreement on their first PR.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yttools-0.1.0.tar.gz.
File metadata
- Download URL: yttools-0.1.0.tar.gz
- Upload date:
- Size: 67.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ff96b1d344a450462073493782cf3f00ef082e5324511816799a5e225377ab9
|
|
| MD5 |
181e81d0392142d52a8da8dacfd5181f
|
|
| BLAKE2b-256 |
4d6250d3ef2758689ce71d0a990661c70cb0fc1c8770d92dc77a746e85e19758
|
Provenance
The following attestation bundles were made for yttools-0.1.0.tar.gz:
Publisher:
release.yml on nicholsbill/YTtools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yttools-0.1.0.tar.gz -
Subject digest:
3ff96b1d344a450462073493782cf3f00ef082e5324511816799a5e225377ab9 - Sigstore transparency entry: 1624359607
- Sigstore integration time:
-
Permalink:
nicholsbill/YTtools@fb06105d4c2ddb5dbdbc9119d543c9d765a33de0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/nicholsbill
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@fb06105d4c2ddb5dbdbc9119d543c9d765a33de0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yttools-0.1.0-py3-none-any.whl.
File metadata
- Download URL: yttools-0.1.0-py3-none-any.whl
- Upload date:
- Size: 66.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf4b287f8f68715df02805eec5feea326d19317befbad7131e85b652fb57fb39
|
|
| MD5 |
c35926b330359169734763bab7fea330
|
|
| BLAKE2b-256 |
2efc40bbcf6ae430bf20a7eb6f41a0e78c9b13a3f4d9671aa1032c9e59fab832
|
Provenance
The following attestation bundles were made for yttools-0.1.0-py3-none-any.whl:
Publisher:
release.yml on nicholsbill/YTtools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yttools-0.1.0-py3-none-any.whl -
Subject digest:
cf4b287f8f68715df02805eec5feea326d19317befbad7131e85b652fb57fb39 - Sigstore transparency entry: 1624359722
- Sigstore integration time:
-
Permalink:
nicholsbill/YTtools@fb06105d4c2ddb5dbdbc9119d543c9d765a33de0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/nicholsbill
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@fb06105d4c2ddb5dbdbc9119d543c9d765a33de0 -
Trigger Event:
push
-
Statement type: