{"id":28400232,"url":"https://github.com/garylab/videowind","last_synced_at":"2025-06-28T09:31:41.078Z","repository":{"id":281718269,"uuid":"946188613","full_name":"garylab/videowind","owner":"garylab","description":"A comprehensive short video generator using LLM and free video resources","archived":false,"fork":false,"pushed_at":"2025-06-21T06:13:16.000Z","size":4091,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-21T06:28:10.400Z","etag":null,"topics":["short-video-maker","tiktok-generator","video-generation","video-generator","video-generators","video-maker","video-maker-api","video-maker-app","youtube-generator"],"latest_commit_sha":null,"homepage":"https://videowind.com","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/garylab.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}},"created_at":"2025-03-10T18:47:20.000Z","updated_at":"2025-06-21T06:13:19.000Z","dependencies_parsed_at":"2025-06-21T06:33:40.940Z","dependency_job_id":null,"html_url":"https://github.com/garylab/videowind","commit_stats":null,"previous_names":["garymengcom/videowind","garylab/videowind"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/garylab/videowind","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garylab%2Fvideowind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garylab%2Fvideowind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garylab%2Fvideowind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garylab%2Fvideowind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/garylab","download_url":"https://codeload.github.com/garylab/videowind/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garylab%2Fvideowind/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262406121,"owners_count":23306078,"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","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":["short-video-maker","tiktok-generator","video-generation","video-generator","video-generators","video-maker","video-maker-api","video-maker-app","youtube-generator"],"created_at":"2025-06-01T09:34:57.387Z","updated_at":"2025-06-28T09:31:41.072Z","avatar_url":"https://github.com/garylab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# Usage\n```bash\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\n```\n\nTo start api server:\n```bash\npython src/main.py\n```\n\nTo start Streamlit app:\n```bash\nstreamlit run ./streamlit/Main.py --browser.serverAddress=\"0.0.0.0\" --server.enableCORS=True --browser.gatherUsageStats=False\n```\n\n# Backgroun musics\n- [www.fesliyanstudios.com](https://www.fesliyanstudios.com/royalty-free-music/downloads-c/short-music/19)\n- [www.chosic.com](https://www.chosic.com/free-music/happy/)\n- [bensound](https://www.bensound.com/free-music-for-videos)\n- [pixabay](https://pixabay.com/music/search/video%20background%20music/)\n\n# Next smarter way\n[chatgpt](https://chatgpt.com/share/67d55fd6-6cbc-800d-89c6-0c4005ed9d4a)\n```plaintext\nNow i have a solution to generate video from script. the steps are:\n1. generate audio from script with azure tts, it's duration is AUDIO_DURATION.\n2. extract 5 terms from script.\n3. get subtitle with whisper large-v3 model.\n4. download video clips (without audio) from pexels.com base on terms.\n5. generate a video without audio from downloaded clips, the generated video was combined from cropped clips from downloaded video clips. totally the video will be AUDIO_DURATION.\n6. Generate final video with subtitle, audio and merged video. \n\npython\n    raw_clips = []\n    for video_path in video_paths:\n        clip = VideoFileClip(video_path).without_audio()\n        clip_duration = clip.duration\n        start_time = 0\n\n        while start_time \u003c clip_duration:\n            end_time = min(start_time + max_clip_duration, clip_duration)\n            split_clip = clip.subclipped(start_time, end_time)\n            raw_clips.append(split_clip)\n            # logger.info(f\"splitting from {start_time:.2f} to {end_time:.2f}, clip duration {clip_duration:.2f}, split_clip duration {split_clip.duration:.2f}\")\n            start_time = end_time\n            if video_concat_mode.value == VideoConcatMode.sequential.value:\n                break\n\nNow, i want to make it more smarter.\n1. Extract key terms from every sentence of subtitle.\n2. Search clips from pexels base on all the terms form subtitle.\n3. Set a window WINDOW_SIZE (e.g. 5 seconds) for cropping clips.\n4. Get the first term of on sentence, if contains term, crop a clips from downloaded clips, and assign this clips to the duration.\n5. next to next window, get the new term, and assign the clip to this duration.\n6. If no terms found in this duration, use the preview one to find downloaded clips.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgarylab%2Fvideowind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgarylab%2Fvideowind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgarylab%2Fvideowind/lists"}