The purpose of this project is to save Vtuber singing streams where often are unarchived due to copyright issues.
- Automatically check subscribed channels for new live streams.
- Download matching videos based on a specified keyword list.
- Manage channels and keywords via the web interface.
- Fail safe Auto merger by ffmpeg to combine temperary files when stream end turned to private before yt-dlp can finalize the file.
- Send notifications via Pushover.
- Support members-only/private videos using cookies.
- Custom yt-dlp options for advanced users.
This service is tracking all EN and ID branch. Video will be periodically deleted to free up space.
jasonyangee/archivedv:latest
ghcr.io/jasonyang-ee/archivedv:latest
- Linux AMD64
- Linux ARM64
services:
archivedv:
image: jasonyangee/archivedv:latest
container_name: archivedv
restart: unless-stopped
user: "1000:1000"
ports:
- "3000:3000"
volumes:
- ./archivedv/data:/app/data
- ./archivedv/video:/app/download
# - ./archivedv/cookies.txt:/app/data/youtube_cookies.txt:ro Optional: If you want to manage cookies as a separate file on the host,
environment:
TZ: America/Los_Angeles
# PUSHOVER_APP_TOKEN: ${PUSHOVER_APP_TOKEN}
# PUSHOVER_USER_TOKEN: ${PUSHOVER_USER_TOKEN}
# PORT: "3000" Optional: Default is 3000. Set to your desired internal port
# TRUST_PROXY: "1" Optional: Default is 1 (trust first proxy). Set to "false" if exposed directly to internet
# sysctls: Optional: Force disable ipv6 if you have issues with it
# - net.ipv6.conf.all.disable_ipv6=1Access the web interface at http://<host_ip>:3000
Bind mounts to preserve data:
- Configurations:
/app/data/db.json - Downloaded Videos:
/app/download/<channel_username>/[DateTime] <video_title>/ - Cookies (optional):
/app/data/youtube_cookies.txt
A cron job runs every 10 minutes to check for new live streams.
Pushover is used to send mobile/desktop notifications on each successful download.
It is recommended to run the container with a non-root user. The default user ID is 1000.
Change to the user ID of your host system if necessary. You can do this by modifying the user field in the Docker Compose file.
Some videos (members-only, private, age-restricted) cannot be downloaded by yt-dlp without authentication.
When this happens, ArchivedV will:
- Skip that video when cookies are not configured (no history entry).
- Avoid retrying it over and over during the same runtime.
To enable downloading those videos, provide a YouTube cookies.txt:
- Export cookies from your browser (see yt-dlp docs for the latest methods):
- Open the web UI and use the Members-only Cookies card:
- Paste the full
cookies.txtcontent - Click Save Cookies
- Toggle Enabled
- Paste the full
After cookies are saved/enabled, the service can download members-only/private videos.
Security note: cookies.txt contains your account session. Only use this on a trusted machine.
You can append custom yt-dlp options in the web interface, the same way as you would run yt-dlp from the command line.
Refer to the yt-dlp documentation for available options.
Using custom options may affect the download behavior. Use with caution.
-
Folder permissions may cause issues. Please manually
chownthe volume bind folders to the user ID specified in the Docker Compose file.Example Command
sudo chown -R 1000:1000 ./archivedv
-
Axios need ipv4 to work properly. Force ipv4 dns resolution by adding the following to your docker compose file:
Docker Compose Example
sysctls: - net.ipv6.conf.all.disable_ipv6=1
See CONTRIBUTING.md for development setup and contribution guidelines.

