{"id":22049189,"url":"https://github.com/timkoehne/video-generator","last_synced_at":"2026-04-16T02:32:25.054Z","repository":{"id":208111022,"uuid":"717712583","full_name":"timkoehne/video-generator","owner":"timkoehne","description":"Automatically generates YouTube videos from Reddit posts with gameplay background, on-screen text, and AI voice-over narration.","archived":false,"fork":false,"pushed_at":"2024-04-23T14:06:32.000Z","size":186,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-30T21:49:18.701Z","etag":null,"topics":["montreal-forced-aligner","openai","python","reddit","video","video-generator","voice-over"],"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/timkoehne.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2023-11-12T10:53:50.000Z","updated_at":"2025-06-24T20:25:56.000Z","dependencies_parsed_at":"2025-10-18T13:25:13.800Z","dependency_job_id":"1797f4a4-93f5-4ae3-b9c9-5352df36d923","html_url":"https://github.com/timkoehne/video-generator","commit_stats":null,"previous_names":["timkoehne/video-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/timkoehne/video-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timkoehne%2Fvideo-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timkoehne%2Fvideo-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timkoehne%2Fvideo-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timkoehne%2Fvideo-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timkoehne","download_url":"https://codeload.github.com/timkoehne/video-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timkoehne%2Fvideo-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31868498,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"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":["montreal-forced-aligner","openai","python","reddit","video","video-generator","voice-over"],"created_at":"2024-11-30T14:14:33.060Z","updated_at":"2026-04-16T02:32:25.016Z","avatar_url":"https://github.com/timkoehne.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# video-generator\nGenerate Youtube-Videos about stories or comments from Reddit with background gameplay footage, text overlays and text-to-speech from OpenAI.\n\nThis projects created all videos on this [Youtube Channel](https://www.youtube.com/@Reddit-StoryScrolls/videos) automatically.\n\n\n# Requirements\n- Conda Environment with a recent Python3 (tested on 3.12.3)\n- Montreal Forced Aligner CLI\n    - ```conda install conda install -c conda-forge montreal-forced-aligner```\n    - Aswell as the corresponding models\n        - ```mfa models download acoustic english_us_arpa```\n        - ```mfa models download dictionary english_us_arpa```\n- All Python packages can be installed with ```pip install -r requirements.txt```\n    - except [moviepy v2.0.0.dev2](https://github.com/Zulko/moviepy) which needs to be installed manually by cloning the project and running with ```pip install .\\moviepy\\ .\\moviepy\\[optional] .\\moviepy\\[doc]```\n\n\n# Features\n- Find posts from Reddit based on subreddit, popularity, time, estimated tts-duration\n    - Clean-up posts by removing edits, tldrs, updates, disclaimers aswell as useless one-liners about spelling, formatting, reposts, account-history\n```python\n# create a post from reddit id\npost_0 = create_post_from_post_id(\"fjnawl\")\n\n# find a story post\npost_1 = find_story_post(\n    \"all\",\n    \"top\",\n    subreddit_list=[\"AmItheAsshole\", \"confessions\"],\n    min_duration=datetime.timedelta(minutes=4),\n    max_duration=datetime.timedelta(minutes=25))\n\n# find a comment post\npost_2 = find_comment_post(\n    \"all\",\n    \"top\", \n    subreddit_list=[\"AskReddit\", \"NoStupidQuestions\"],\n    approx_video_duration=datetime.timedelta(minutes=5))\n\n```\n\n\n- Create a video based on a post using:\n    - OpenAI to generate text-to-speech audio\n    - ImageMagick to write the text a few words at a time onto the screen\n    - Montreal-Forced-Aligner to align text with the audio\n    - Select gameplay video as background from library\n    - Write youtube title, description, tags\n    - generate a thumbnail\n\n```python\n#generate a video based on the story of the post\ngenerate_story_video_by_id(\n    post_1.post_id, (1920, 1080), generate_intro=True, generate_outro=True,\n)\n\n#\ngenerate_comment_video_by_id(\n    post_2.post_id, (1920, 1080), generate_intro=True, generate_outro=True,\n)\n```\n\n# Configuration\nYou need to specify your OpenAI API-Key in ``secrets.json`` according to ``secrets template.json``.\n\n\n\nYou can configure alot of settings in ``config/configuration.json``. The most important ones:\n- ``output_dir`` to specify where your finished videos are saved. Each finished video will have its own directory containing the video file, the thumbnail aswell as text documents for the video description, tags and title.\n- ``background_videos_dir`` to specify the folder containing background videos. This folder should have subfolders for each Youtube-Channel where your background video is from. There should also be a file called ``channel_urls.json`` that has urls to the background videos creators Youtube channels.\n\n\nYou can also specify font settings, some moviepy settings aswell as OpenAI prompts and models here.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimkoehne%2Fvideo-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimkoehne%2Fvideo-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimkoehne%2Fvideo-generator/lists"}