The Video-to-Transcript Portal is a web-based application that automatically generates text transcripts from uploaded meeting videos using AWS services. It provides a seamless user experience with real-time status updates and secure credential management for AWS resource access.
The application consists of a React-based frontend and AWS CDK infrastructure that leverages Amazon Transcribe for speech-to-text conversion. Users can upload meeting videos through an intuitive interface, and the system automatically processes them using AWS Lambda functions and S3 storage. The application implements secure temporary credentials through AWS STS and provides a downloadable transcript in plain text format.
.
├── cdk_backend/ # AWS CDK infrastructure code
│ ├── bin/ # CDK app entry point
│ ├── lambda/ # Lambda function implementations
│ │ ├── AssumeRoleFunction/ # Handles temporary AWS credentials
│ │ └── StartTranscriptionJob/ # Initiates transcription process
│ └── lib/ # CDK stack definition
└── frontend/ # React frontend application
├── src/
│ ├── aws/ # AWS integration utilities
│ ├── components/ # React components for upload/download
│ └── utilities/ # Shared constants and helpers
- Node.js 16.x or later
- AWS CLI configured with appropriate credentials
- AWS CDK CLI installed (
npm install -g aws-cdk) - Python 3.9 or later for Lambda functions
- GitHub personal access token for Amplify deployment
- Clone the repository and install dependencies:
# Install backend dependencies
cd cdk_backend
npm install
# Install frontend dependencies
cd ../frontend
npm install- Deploy the backend infrastructure:
cd cdk_backend
cdk deploy -c githubToken=<your-github-token>- Access the deployed Amplify application URL provided in the CDK output
- Click "Choose File" to select a meeting video
- The video will automatically upload and begin processing
- Wait for the transcript to be generated (progress is shown in real-time)
- Download the transcript when ready
Uploading a Video
// Using the UploadSection component
<UploadSection onUploadComplete={(fileName, creds) => {
console.log(`File ${fileName} uploaded successfully`);
// Credentials available in creds object
}} />Downloading a Transcript
// Using the DownloadSection component
<DownloadSection
videoFileName="meeting-2024-01-01.mp4"
tempCreds={awsCredentials}
/>Video Upload Fails
- Error: "Access Denied"
- Verify temporary credentials are not expired
- Check S3 bucket permissions
- Ensure file is within size limits
Transcript Generation Delays
- Enable debug logging in the Lambda function:
import logging logging.getLogger().setLevel(logging.DEBUG)
- Check CloudWatch logs at
/aws/lambda/StartTranscriptionJob - Verify Transcribe service quotas in your region
Frontend Connection Issues
- Check browser console for CORS errors
- Verify API Gateway endpoint is accessible
- Ensure environment variables are properly set in Amplify
The application follows a serverless event-driven architecture for processing videos and generating transcripts.
Upload Process Download
┌──────┐ S3 ┌──────────┐ S3 ┌──────────┐
│Client├─────────►│Lambda ├─────────►│Transcribe│
└──┬───┘ │Function │ └────┬─────┘
│ └──────────┘ │
│ │
└───────────────────────────────────────┘
Poll for completion & download
Key component interactions:
- Frontend obtains temporary AWS credentials via AssumeRole Lambda
- User uploads video to S3 bucket using temporary credentials
- S3 event triggers StartTranscriptionJob Lambda
- Lambda initiates Amazon Transcribe job
- Frontend polls S3 for completed transcript
- Transcript is delivered as downloadable text file
- All operations use least-privilege IAM roles
AssumeRoleFunction(Python 3.9)- Provides temporary AWS credentials for frontend access
- Environment variables: FRONTEND_ROLE_ARN, REGION
StartTranscriptionJob(Python 3.12)- Initiates Amazon Transcribe jobs
- Environment variables: BUCKET_NAME, OUTPUT_FOLDER
- S3 Bucket
- Enforces SSL
- CORS enabled for frontend access
- Separate prefixes for videos and transcripts
- REST API for AssumeRole function
- CORS enabled for frontend access
- GET /assumerole endpoint
- FrontendRestrictedRole
- Limited S3 access for video upload
- Read-only access to transcripts
- Hosts frontend application
- Automated builds from GitHub repository
- Environment variables for AWS resource configuration
-
Prerequisites:
- AWS account with appropriate permissions
- GitHub token with repository access
- AWS CDK CLI installed
-
Deploy infrastructure:
cd cdk_backend
cdk deploy -c githubToken=<your-github-token>-
Configure frontend:
- Environment variables are automatically set by CDK
- Amplify handles continuous deployment
-
Monitor deployment:
- Check Amplify console for frontend build status
- Verify CloudFormation stack creation
- Test API Gateway endpoints