Skip to content
A simple UI for Amazon Transcribe
Python HTML
Branch: master
Clone or download
Pull request Compare This branch is 7 commits ahead of farski:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


A simple web UI for Amazon Transcribe. Supports MP3, MP4, WAV, and FLAC audio without any fixed costs.

How it Works

Once the project has been launched in CloudFormation, you will have access to a webpage that allows users to upload audio files.

The page submits the information about the podcast to an API endpoint backed by a Lambda function that takes the URL of the podcast, downloads and then uploads it to an S3 bucket. The S3 bucket is configured to watch for audio files. When it sees new audio files, an AWS Lambda function is invoked, which starts a transcription job.

File detection is based on the file extension. Supported extensions are: .mp3, .mp4, .m4a, .wav, and .flac.

Another Lambda function is triggered via CloudWatch Events when the transcription job completes (or fails). An email is sent to the user who uploaded file with details about the job failure, or a raw transcript that is extracted from the job results.

The webpage and the API endpoint the form is submitted to are protected by HTTP Basic authentication, with a single set of credentials that you set when launching the stack. This is handled by an authorizer on the API Gateway, and could be extended to allow for more robust authorization schemes.

Amazon Transcribe currently has file limits of 4 hours and 2 Gb.

AWS Costs

The cost of running and using this project are almost entirely based on usage. Media files uploaded to S3 are set to expire after one day, and the resulting files in the transcripts bucket expire after 30 days. The Lambda functions have no fixed costs, so you will only be charged when they are invoked. Amazon Transcribe is "pay-as-you-go based on the seconds of audio transcribed per month".

Most resources created from the CloudFormation template include a Project resource tag, which you can use for cost allocation. Unfortunately Amazon Transcribe jobs cannot be tracked this way.

How to Use

The project is organized using a SAM CloudFormation template. Launching a stack from this template will create all the resources necessary for the system to work.


  • The stack must be launched in an AWS region that supports SES. There aren't many of these, unfortunately. The addresses that SES will send to and from are determined by your SES domain verification and sandboxing status.

Using the SAM CLI to deploy

Deploying using the AWS SAM CLI is the simplest option. Once the CLI is installed, you can run sam deploy --guided in the project directory to deploy the application. (After the first deploy, you can use sam deploy if samconfig.toml is present in the directory.)

Any other deployment method that is compatible with SAM templates would also work.

Note: The deploy script that was previously included in the project is no longer supported.


  • Make the form submit the data into a queue which gets picked up by the UploadToS3 lambda. Right now the form waits for the UploadToS3 function execution to finish, which can be quite some time for longer podcasts.
You can’t perform that action at this time.