{"id":16272331,"url":"https://github.com/ventz/whisper-openai-container","last_synced_at":"2026-03-27T02:30:23.426Z","repository":{"id":185025142,"uuid":"635922316","full_name":"ventz/whisper-openai-container","owner":"ventz","description":"OpenAI Whisper Container (GPU and CPU) and Lambda (CPU) - speech recognition model","archived":false,"fork":false,"pushed_at":"2024-05-09T00:22:51.000Z","size":5375,"stargazers_count":60,"open_issues_count":0,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-18T15:22:11.073Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","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/ventz.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":"2023-05-03T18:43:12.000Z","updated_at":"2025-11-27T01:55:19.000Z","dependencies_parsed_at":"2025-05-26T10:52:55.235Z","dependency_job_id":null,"html_url":"https://github.com/ventz/whisper-openai-container","commit_stats":null,"previous_names":["ventz/whisper-openai-container"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ventz/whisper-openai-container","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventz%2Fwhisper-openai-container","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventz%2Fwhisper-openai-container/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventz%2Fwhisper-openai-container/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventz%2Fwhisper-openai-container/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ventz","download_url":"https://codeload.github.com/ventz/whisper-openai-container/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventz%2Fwhisper-openai-container/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31009959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T01:56:05.093Z","status":"online","status_checked_at":"2026-03-27T02:00:08.055Z","response_time":164,"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":[],"created_at":"2024-10-10T18:17:19.131Z","updated_at":"2026-03-27T02:30:23.390Z","avatar_url":"https://github.com/ventz.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# What is this?\nThis is the OpenAI Whisper project (https://github.com/openai/whisper - Offline Speech Recognition model) - inside a Container, with an option to deploy as a stand-alone Docker container, or an AWS Lambda function that is container backed.\n\nIn summary: it lets you transcribe voice to text *extremely* accurately and quickly, for free.\n\n# How Do I use this?\n\nThere are 2 ways to run/interact with this:\n\n* As a \"regular container\" (Docker)\nor\n* As an AWS Lambda (container backed) function - via an a direct API, or S3 \"put\" automation.\n\n## 1.) As a \"regular container\":\n```\ndocker exec -it ventz/whisper /bin/bash\"\n```\n\n```\n# Assuming you have a 'recording.mp4' and have pulled it/mounted it on the container:\nwhisper 'recording.mp4' --language English --model base --fp16 False\n```\n\n\n\n## 2.) As an AWS Lambda (container backed) functions:\nThe idea is that you will setup a S3 bucket with a hook that calls\nthis Lambda when a new object is created or dropped.\n\nThis involves:\n\na.) Tagging the local docker image and pushing it to ECR:\n```\ndocker tag ventz/whisper:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/whisper:latest\ndocker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/whisper:latest\n```\n\nb.) Deploying a new Lambda function from ECR:\n```\naws lambda create-function --region us-east-1 --function-name transcribe \\\n   --package-type Image  \\\n   --code ImageUri=\u003cECR Image URI\u003e   \\\n   --role  arn:aws:iam::123456789012:role/service-role/transcribe\n```\n\nNOTE: The role needs to have:\ni.) AWSLambdaBasicExecutionRole (for: 'logs:CreateLogStream', and 'logs:PutLogEvents')\n```\n{\n   \"Version\": \"2012-10-17\",\n   \"Statement\": [\n       {\n           \"Effect\": \"Allow\",\n           \"Action\": \"logs:CreateLogGroup\",\n           \"Resource\": \"arn:aws:logs:us-east-1:123456789012:*\"\n       },\n       {\n           \"Effect\": \"Allow\",\n           \"Action\": [\n               \"logs:CreateLogStream\",\n               \"logs:PutLogEvents\"\n           ],\n           \"Resource\": [\n               \"arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/transcribe:*\"\n           ]\n       }\n   ]\n}\n```\n\nand\n\nii.) Write access to S3 bucket:\n```\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"VisualEditor0\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:PutObject\",\n                \"s3:GetObject\",\n                \"s3:ListBucket\"\n            ],\n            \"Resource\": \"arn:aws:s3:::\u003cYOUR BUCKET NAME\u003e/*\"\n        }\n    ]\n}\n```\n\nc.) Update code if you ever re-configure/re-build your container/Dockerfile:\n```\n# NOTE: This assumes your function was deployed with the name 'transcribe' \naws lambda update-function-code --function-name transcribe --image-uri $(aws lambda get-function --function-name transcribe | jq -r '.Code.ImageUri')\n```\n\nYou can check when done with:\n```\nwhile [ \"$(aws lambda get-function --function-name transcribe | jq -r '.Configuration.LastUpdateStatus')\" != \"Successful\" ]; do\n    sleep 1\ndone\n```\n\n# Works locally but not in AWS Lambda?\n\nThe container has to be `amd64` due to the statically compiled ffmpeg\nbeing only amd64. This means you cannot use the ARM64 Lambdas.\n\nIf you are building the container on a Mac M# series model and pushing to ECR, replace the 1st line in the Dockerfile with:\n\n```\nFROM --platform=linux/amd64 public.ecr.aws/lambda/python:3.12\n```\n\n\n### MANUALLY TESTING THE LAMBDA LOCALLY (not within AWS): \n```\ndocker run -it --rm -d -p 9000:8080 --name whisper ventz/whisper\n```\n\nand then\n```\ncurl -XPOST \"http://localhost:9000/2015-03-31/functions/function/invocations\" -d @test-s3-json\n```\n\nNOTE: This is a \"fake\" event just to make sure you can locally run\nthe lambda. You will need a real s3 bucket and real file/recording + IAM permissions(see test-s3-json)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fventz%2Fwhisper-openai-container","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fventz%2Fwhisper-openai-container","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fventz%2Fwhisper-openai-container/lists"}