{"id":26931180,"url":"https://github.com/0jc1/py-autovod","last_synced_at":"2026-04-02T02:58:54.326Z","repository":{"id":281233436,"uuid":"944640252","full_name":"0jc1/py-autovod","owner":"0jc1","description":"Automatically download livestreams, clip with AI, and upload in realtime","archived":false,"fork":false,"pushed_at":"2025-09-04T04:21:28.000Z","size":387,"stargazers_count":14,"open_issues_count":3,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-09-04T06:23:51.514Z","etag":null,"topics":["docker","ffmpeg","kick","llava","streamlink","twitch","twitch-api","twitch-bot","whisper","youtube","youtube-api","youtube-downloader"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0jc1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"0jc1","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-03-07T17:49:46.000Z","updated_at":"2025-09-04T04:21:31.000Z","dependencies_parsed_at":"2025-03-07T18:39:08.105Z","dependency_job_id":"967cecd5-e078-4b3d-962b-71c5b1ef22c3","html_url":"https://github.com/0jc1/py-autovod","commit_stats":null,"previous_names":["0jc1/py-autovod"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/0jc1/py-autovod","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0jc1%2Fpy-autovod","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0jc1%2Fpy-autovod/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0jc1%2Fpy-autovod/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0jc1%2Fpy-autovod/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0jc1","download_url":"https://codeload.github.com/0jc1/py-autovod/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0jc1%2Fpy-autovod/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275062966,"owners_count":25398888,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","ffmpeg","kick","llava","streamlink","twitch","twitch-api","twitch-bot","whisper","youtube","youtube-api","youtube-downloader"],"created_at":"2025-04-02T07:16:18.249Z","updated_at":"2026-04-02T02:58:54.321Z","avatar_url":"https://github.com/0jc1.png","language":"Python","funding_links":["https://github.com/sponsors/0jc1"],"categories":[],"sub_categories":[],"readme":"# Py-AutoVOD\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n[![Docker](https://img.shields.io/badge/docker-supported-2496ED.svg?logo=docker\u0026logoColor=white)](#)\n[![Issues](https://img.shields.io/github/issues/0jc1/py-autovod.svg)](https://github.com/0jc1/py-autovod/issues)\n[![Last Commit](https://img.shields.io/github/last-commit/0jc1/py-autovod.svg)](https://github.com/0jc1/py-autovod/commits/main)\n[![Stars](https://img.shields.io/github/stars/0jc1/py-autovod.svg)](https://github.com/0jc1/py-autovod/stargazers)\n\n\u003cb\u003ePy-AutoVOD\u003c/b\u003e is a Python3 program that automates the downloading and uploading of livestreams from multiple streaming services. It has many configurable features for stream VODs, such as formatting, transcribing, and AI-powered clipping.\nThis project was originally based on [AutoVOD](https://github.com/jenslys/AutoVOD).\n\n## Features\n- ( :heavy_check_mark: ) Auto download livestreams (Twitch.tv, Kick.tv, Youtube Live) from multiple streamers concurrently\n- ( :heavy_check_mark: ) Audio transcription with timestamps\n- ( :heavy_check_mark: ) Auto upload to RClone, YouTube, and more\n- ( :heavy_check_mark: ) Smart AI video clipping\n- ( :heavy_check_mark: ) Youtube shorts formatting\n- ( :x: ) Archive both video and chat logs\n- ( :heavy_check_mark: ) Platform independent and Docker supported\n\n## Installation \u0026 Setup\n\n1. Manually install ffmpeg and [streamlink](https://github.com/streamlink/streamlink). Alternatively, you can do the installation automatically with `install.sh`.\n\n2. Python 3.10+ is required. Set up a Python virtual environment, then install the required packages:\n   ```bash\n   python -m venv env\n   . env/bin/activate\n   pip install -r requirements.txt\n   ```\n3. Install from source using pip.\n   ```bash\n   pip install -e .\n   ```\n\n4. Configure the streamers you want to monitor in `config.ini`:\n   ```ini\n   [streamers]\n   streamers = streamer1, streamer2, streamer3\n   ```\n\n5. Create a configuration file for each streamer where the file name is the streamer's username. The default configuration file `default.ini` will be used otherwise.\n\n6. Configure the main configuration file `config.ini`. Downloaded VODs are processed into clips by default.\n\n7. Copy the `.env.example` file to a new file called `.env`. Fill in the .env file with your API keys.\n\n8. Run the command to start AutoVOD:\n   ```bash\n   autovod\n   ```\n\n## Uploading\n\nAuto uploading for YouTube works with [youtubeuploader](https://github.com/porjo/youtubeuploader), but it requires additional setup and configuration.\n\n## Clip Generation\n\nYou can generate clips from a video file directly using a script.\n\nDownload an example video file from YouTube:\n\n   ```bash\n   python src/download_yt.py https://www.youtube.com/watch?v=dQw4w9WgXcQ\n   ```\n\n   Run this command with the path to the video:\n   ```bash\n   python3 src/process_vid.py \u003cpath/to/video\u003e\n   ```\n\n### Shorts Format\nWith ffmpeg you can convert mp4 into Youtube shorts format (9:16 aspect ratio):\n```bash\nffmpeg -i input.mp4 -vf \"crop=ih*9/16:ih,scale=1080:1920\" -c:a copy output.mp4\n```\n\nAdd background music:\n```bash\nffmpeg -i input.mp4 -i music.mp3 -filter_complex \"[0:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2[v];[1:a]volume=0.3[a1];[0:a][a1]amix=inputs=2[a]\" -map \"[v]\" -map \"[a]\" -shortest output.mp4\n```\n\n## Transcription\n\nAudio transcription is done with OpenAI's Whisper ASR. This feature can be configured in `config.ini`\n\n## Contribution\n\nContributors are welcome! Please feel free to submit a PR or issue.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0jc1%2Fpy-autovod","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0jc1%2Fpy-autovod","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0jc1%2Fpy-autovod/lists"}