This project has been archived by its maintainers, and is no longer receiving any updates.
Archiver ZIM
A tool for downloading and archiving videos and podcasts into ZIM files.
[!WARNING]
Still in heavy development, use at your own risk.
Features
- Continuous running mode for automatic updates
- Support for YouTube channels, playlists, and podcast feeds
- Support for filtering by title
- Downloads videos from websites that are supported by yt-dlp
- Configurable update frequencies
- Mixed content archives
- Automatic cleanup after archiving
- Rich progress tracking and logging
- Docker support for easy deployment
Installation
Requires:
- Python 3.10+
- libzim
- ffmpeg
Using Docker (Recommended)
- Pull the Docker image:
docker pull ghcr.io/sudo-ivan/archiver-zim:latest
- Create required directories:
mkdir -p archive/media archive/metadata config
-
Create a
config.ymlfile in the config directory (see Configuration section below) -
Run using Docker:
# Run in continuous mode
docker run -d \
--name archiver-zim \
-v $(pwd)/archive:/app/archive \
-v $(pwd)/config:/app/config \
-e TZ=UTC \
ghcr.io/sudo-ivan/archiver-zim:latest manage
# Run single archive
docker run --rm \
-v $(pwd)/archive:/app/archive \
ghcr.io/sudo-ivan/archiver-zim:latest archive \
"https://www.youtube.com/watch?v=VIDEO_ID" \
--quality 720p \
--title "My Video" \
--description "My video collection"
Using Docker Compose
- Create a
docker-compose.ymlfile:
version: '3.8'
services:
archiver:
image: ghcr.io/sudo-ivan/archiver-zim:latest
container_name: archiver-zim
volumes:
- ./archive:/app/archive
- ./config:/app/config
environment:
- TZ=UTC
restart: unless-stopped
# Uncomment and modify the command as needed:
# command: manage # For continuous mode
# command: archive "https://www.youtube.com/watch?v=VIDEO_ID" --quality 720p # For single archive
- Run using Docker Compose:
# Start in continuous mode
docker compose up -d
# Run single archive
docker compose run --rm archiver archive "https://www.youtube.com/watch?v=VIDEO_ID" --quality 720p
# View logs
docker compose logs -f
Manual Installation
- Install the required dependencies:
pip install -r requirements.txt
- Install yt-dlp (required for video downloads):
pip install yt-dlp
Using pip
Install directly from PyPI:
pip install archiver-zim
Install using pipx for isolated environment:
pipx install archiver-zim
CLI
The tool provides a command-line interface with two main commands:
Manage Command
archiver-zim manage [OPTIONS]
Options:
--config PATH: Path to config file (default: ./config/config.yml)--log-level LEVEL: Set logging level (default: INFO)
Archive Command
archiver-zim archive [URLS]... [OPTIONS]
Options:
--output-dir PATH: Output directory for archives--quality QUALITY: Video quality (e.g., 720p, 1080p)--title TEXT: Archive title--description TEXT: Archive description--type TYPE: Content type (channel, playlist, podcast, mixed)--update-frequency FREQ: Update frequency (e.g., 1d, 7d, 1m)--cookies PATH: Path to cookies file for authentication--cookies-from-browser BROWSER: Browser to extract cookies from (e.g., firefox, chrome)
Example:
# Basic usage
archiver-zim archive "https://www.youtube.com/watch?v=VIDEO_ID" \
--quality 720p \
--title "My Video Collection" \
--description "Personal video archive"
# Using cookies for authentication
archiver-zim archive "https://www.youtube.com/watch?v=VIDEO_ID" \
--cookies cookies.txt
# Using browser cookies
archiver-zim archive "https://www.youtube.com/watch?v=VIDEO_ID" \
--cookies-from-browser firefox
Configuration
Create a config.yml file with your archive configurations. Example:
settings:
output_base_dir: "./archives"
quality: "best"
retry_count: 3
retry_delay: 5
max_retries: 10
max_concurrent_downloads: 3
cleanup_after_archive: true
cookies: null # Path to cookies file
cookies_from_browser: null # Browser to extract cookies from (e.g., firefox, chrome)
archives:
- name: "youtube_channel_1"
type: "channel"
url: "https://www.youtube.com/c/channel1"
update_frequency: "7d" # 7 days
quality: "720p"
description: "Channel 1 Archive"
date_limit: 30 # Only keep last 30 days
cookies: null # Optional: Override global cookies
cookies_from_browser: null # Optional: Override global browser cookies
- name: "podcast_series_1"
type: "podcast"
url: "https://example.com/feed.xml"
update_frequency: "1d" # Daily updates
description: "Podcast Series 1 Archive"
month_limit: 3 # Keep last 3 months
Configuration Options
Global Settings
output_base_dir: Base directory for all archivesquality: Default video qualityretry_count: Number of retries for failed downloadsretry_delay: Base delay between retries in secondsmax_retries: Maximum number of retries before giving upmax_concurrent_downloads: Maximum number of concurrent downloadscleanup_after_archive: Whether to delete downloaded files after ZIM creationcookies: Path to cookies filecookies_from_browser: Browser to extract cookies from (e.g., firefox, chrome)
Archive Settings
name: Unique name for the archivetype: Type of content ("channel", "playlist", "podcast", or "mixed")url: Source URLupdate_frequency: How often to update (e.g., "1d", "7d", "1m", "1y")quality: Video quality (overrides global setting)description: Archive descriptiondate_limit: Only keep content from last N daysmonth_limit: Only keep content from last N months
Usage
Continuous Mode
Run the manager in continuous mode:
# Using Python
python archiver.py manage
# Using Docker
docker run -d \
--name archiver-zim \
-v $(pwd)/archive:/app/archive \
-v $(pwd)/config:/app/config \
-e TZ=UTC \
ghcr.io/sudo-ivan/archiver-zim:latest manage
# Using Docker Compose
docker compose up -d
The manager will:
- Load the configuration from
config.yml - Check each archive's update frequency
- Download and create ZIM files as needed
- Clean up temporary files
- Repeat the process
Single Archive Mode
Create a single archive:
# Using Python
python archiver.py archive URL1 URL2 --output-dir ./archive --quality 720p
# Using Docker
docker run --rm \
-v $(pwd)/archive:/app/archive \
ghcr.io/sudo-ivan/archiver-zim:latest archive \
"https://www.youtube.com/watch?v=VIDEO_ID" \
--quality 720p
# Using Docker Compose
docker compose run --rm archiver archive \
"https://www.youtube.com/watch?v=VIDEO_ID" \
--quality 720p
Logging
Logs are written to both:
- Console output
archive_manager.logfile
License
MIT License
Metadata
Release files for archiver-zim 0.3.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| archiver_zim-0.3.6.tar.gz | 24.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| archiver_zim-0.3.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.7 kB
Release files / archiver_zim-0.3.6.tar.gz
| Download URL | archiver_zim-0.3.6.tar.gz |
|---|---|
| Size | 24.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a35d04158bb21a1691b465323294ecdda2645b2388c87b6aa6f0d7e0bb420756
|
|
BLAKE2b-256 checksum How to use checksums |
0a41ceeb726e018adaf7526426c9ae75c4fa7e5a309e7b3a0d358abd01c816af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
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 May 5, 2025.
Transparency logRelease files / archiver_zim-0.3.6-py3-none-any.whl
| Download URL | archiver_zim-0.3.6-py3-none-any.whl |
|---|---|
| Size | 25.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
79cafeaec7c7aa8b145778795656f92e974e8fe73b059cd4f85c06bdc8455a19
|
|
BLAKE2b-256 checksum How to use checksums |
6f2bc0afe27be02f2a5c5aa76bbb896a2440ecfed1fd1d8cc3a908f2187bb795
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
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 May 5, 2025.
Transparency log