{"id":13553147,"url":"https://github.com/mayeaux/generate-subtitles","last_synced_at":"2025-04-13T06:21:59.272Z","repository":{"id":63001835,"uuid":"562525046","full_name":"mayeaux/generate-subtitles","owner":"mayeaux","description":"Generate transcripts for audio and video content with a user friendly UI, powered by Open AI's Whisper with automatic translations and download videos automatically with yt-dlp integration","archived":false,"fork":false,"pushed_at":"2023-03-16T07:00:27.000Z","size":1276,"stargazers_count":788,"open_issues_count":25,"forks_count":107,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-04-04T05:06:07.860Z","etag":null,"topics":["expressjs","gpu","libretranslate","machine-learning","nodejs","transcription","translation","whisper","yt-dlp"],"latest_commit_sha":null,"homepage":"https://freesubtitles.ai","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mayeaux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2022-11-06T16:18:05.000Z","updated_at":"2025-04-02T12:04:24.000Z","dependencies_parsed_at":"2024-03-17T04:51:16.599Z","dependency_job_id":null,"html_url":"https://github.com/mayeaux/generate-subtitles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayeaux%2Fgenerate-subtitles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayeaux%2Fgenerate-subtitles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayeaux%2Fgenerate-subtitles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mayeaux%2Fgenerate-subtitles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mayeaux","download_url":"https://codeload.github.com/mayeaux/generate-subtitles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665755,"owners_count":21142123,"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":["expressjs","gpu","libretranslate","machine-learning","nodejs","transcription","translation","whisper","yt-dlp"],"created_at":"2024-08-01T12:02:18.405Z","updated_at":"2025-04-13T06:21:59.245Z","avatar_url":"https://github.com/mayeaux.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# generate-subtitles\n\nGenerate transcripts for audio and video content with a user friendly UI, powered by Open AI's Whisper with automatic translations powered by LibreTranslate. Live for free public use at https://freesubtitles.ai\n\n## Installation:\nUnder the hood, `generate-subtitles` uses Whisper AI for creating transcripts and Libretranslate for generating the translations. Libretranslate is optional and not required to run the service.\n\nYou can find the installation instructions for Whisper here: https://github.com/openai/whisper#setup\n\nOnce Whisper is installed and working properly, you can start the web server.\n\nMake sure you are running Node.js 14+\n\n`nvm use 14`\n\nYou can install Node 14 with `nvm`:\n\n```shell\n# install nvm\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash\n\n# setup nvm\nexport NVM_DIR=\"$HOME/.nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\"  # This loads nvm\n[ -s \"$NVM_DIR/bash_completion\" ] \u0026\u0026 \\. \"$NVM_DIR/bash_completion\"  # This loads nvm bash_completion\n\nnvm install 14\nnvm use 14\n```\n\nCurrently the app uses `yt-dlp` as well, you can install it with:\n\n```shell\nsudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp #download yt-dlp\nsudo chmod a+rx /usr/local/bin/yt-dlp  # Make executable\n```\n\nThen:\n\n```shell\ngit clone https://github.com/mayeaux/generate-subtitles\ncd generate-subtitles\nnpm install\nnpm start\n```\n\nThis should start the server at localhost:3000, at which point if you navigate to there with a browser you should be able to see and use the app.\n\n## Using a GPU Cloud Provider\nNote: Unless you have a GPU that can use CUDA, you will likely have to use your CPU to transcribe which is significantly less performant, hence why you may have to rent a GPU server from a cloud provider. The only GPU cloud provider that I've had a good experience with is VastAI which is what I use to run https://freesubtitles.ai , if you use this link I should receive a 2.5% of your purchase for the referral: http://vast.ai/?ref=52232\n\nTo setup the Vast server to run Whisper, you can use the following script: \nhttps://github.com/mayeaux/generate-subtitles/blob/master/docs/install.sh (Note, this script isn't perfect yet but has all the ingredients you need).\n\nWhile creating the Vast server, you will have to open some ports, this is the configuration I use to achieve that:\n\nHit `EDIT IMAGE \u0026 CONFIG..`\n\n\u003cimg src=\"https://user-images.githubusercontent.com/7200471/207619301-5cdbf85e-8b6e-479a-8562-0d7d01bea715.JPG\" width=\"500\" alt=\"Screen Shot 2022-12-14 at 3 15 48 PM\" /\u003e\n\n\nI select CUDA though it's not 100% necessary\n\n\u003cimg src=\"https://user-images.githubusercontent.com/7200471/207619367-ce4779fc-8d21-4120-8f21-22bb179eb601.JPG\" alt=\"Screen Shot 2022-12-14 at 3 15 58 PM\" width=\"600\" /\u003e\n\nThen hit the `SELECT` button (the one that's to the right of the CUDA description and not the one next to cancel) and you can add this line to open the ports:\n`-p 8081:8081 -p 8080:8080 -p 80:80 -p 443:443 -p 3000:3000 -p 5000:5000`\n\n\u003cimg src=\"https://user-images.githubusercontent.com/7200471/207619664-4baeae12-9139-40bd-b4a3-2ac9bf4dffc3.JPG\" alt=\"Screen Shot 2022-12-14 at 3 16 22 PM\" width=\"600\" /\u003e\n\nHit `SELECT \u0026 SAVE` and when you create an instance it should have the proper ports opened to be able to access the web app. Vast uses port forwarding so when your port 3000 is opened it will be accessed through another port but you should be able to figure that out from their interface.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayeaux%2Fgenerate-subtitles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmayeaux%2Fgenerate-subtitles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayeaux%2Fgenerate-subtitles/lists"}