annextube
YouTube archive system using git-annex for efficient storage and incremental updates.
Live Demo - Try the web interface with sample videos from the @AnnexTubeTesting channel (auto-generated by GitHub Actions)
Features
- Complete channel archival: Videos, metadata, comments, and captions
- Incremental updates: Efficient detection of new content
- Offline browsing: Client-side web interface (no server required)
- Flexible filtering: By date, license, playlist, metadata attributes
- CI/CD automation: GitHub Actions and Codeberg Actions support
- Git-annex integration: Efficient storage with special remotes (S3, WebDAV, etc.)
Quick Start
# Install (core)
pip install annextube
# Or install with all optional features (DataLad, search index, audio alignment)
pip install 'annextube[full]'
# Create archive
mkdir my-archive && cd my-archive
annextube init
# Configure (edit .annextube/config.toml)
# Add YouTube Data API key and channel URLs
# Backup
annextube backup
# Browse offline
annextube generate-web
open web/index.html
Container Deployment
Pre-built container with all dependencies (git-annex, yt-dlp, ffmpeg, deno):
# Build container
podman build -t annextube:latest -f Containerfile .
# Run
podman run -it --rm -v $PWD:/archive -e YOUTUBE_API_KEY="key" annextube:latest backup
# For Singularity/Apptainer (HPC clusters)
apptainer build annextube.sif Containerfile
apptainer run --bind $PWD:/archive annextube.sif backup
See docs/how-to/container-deployment.md for full guide.
Documentation
- Installation: See docs/tutorial/01-installation.md
- Container Deployment: See docs/how-to/container-deployment.md
- Quick Start: See specs/001-youtube-backup/quickstart.md
- Troubleshooting: See docs/how-to/troubleshooting.md (challenge solver errors, quota, interrupted backups)
- API Reference: See docs/reference/
System Requirements
Required
- Python 3.10+: Runtime for annextube
- git: Version control
- git-annex 8.0+: Large file management
- yt-dlp (command-line): MUST be in PATH for git-annex --no-raw
sudo pip install yt-dlp # Or download binary to /usr/local/bin
Strongly Recommended
- ffmpeg: Video processing and best quality downloads
sudo apt-get install ffmpeg # Debian/Ubuntu brew install ffmpeg # macOS
Optional
-
YouTube Data API v3 key: For API-based metadata (free from Google Cloud Console)
-
deno or node: JavaScript runtime for modern YouTube features
-
Optional extras (install individually or all at once with
pip install 'annextube[full]'):Extra Install Description dataladpip install 'annextube[datalad]'DataLad dataset management searchpip install 'annextube[search]'Full-text caption search index (pagefind) audio-alignpip install 'annextube[audio-align]'Audio-based caption alignment (Whisper) fullpip install 'annextube[full]'All of the above
Development
# Clone repository
git clone https://github.com/con/annextube.git
cd annextube
# Install with development dependencies
uv pip install -e ".[devel]"
# Run tests
pytest
# Run linter
ruff check annextube/ tests/
# Run type checker
mypy annextube/
License
MIT License - see LICENSE file
Contributing
See CONTRIBUTING.md (TBD)
Project Status
🚧 Early Development - This project is under active development. API may change.
Current phase: Implementing MVP (User Story 1 + 2)
Metadata
Release files for annextube 0.15.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 | |
|---|---|---|---|
| annextube-0.15.0.tar.gz | 337.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| annextube-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 575.6 kB
Release files / annextube-0.15.0.tar.gz
| Download URL | annextube-0.15.0.tar.gz |
|---|---|
| Size | 337.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e2149b97f72c079422a8472e11a522a8f1cb3f4ac7812532b0de76b1a4f8e34e
|
|
BLAKE2b-256 checksum How to use checksums |
cf0cb6caa36e757f717c9dfa10903b815842b24e4dd1ac85c5f6a06b56809637
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / annextube-0.15.0-py3-none-any.whl
| Download URL | annextube-0.15.0-py3-none-any.whl |
|---|---|
| Size | 238.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6f861e6023743619b6f98fb10a30d78bd3a9652a963ed3428c38b17918a2670c
|
|
BLAKE2b-256 checksum How to use checksums |
23903d1c22a1e4f587da7879c50a0d8829037af86709f6a16f93f6de60113ded
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|