iTube is a YouTube clone-ish platform built as a set of small services: a Flutter client app, a FastAPI backend, an SQS-to-ECS consumer, and a transcoder that turns uploaded videos into HLS/DASH outputs.
This repository is an umbrella/index repo. It does not contain source code. It documents how the system fits together and links to the component repositories.
demo-comp.mp4
flowchart TB
client["Client (Flutter/Web)"]
api["iTube-api (FastAPI)"]
s3raw["S3 (raw uploads)"]
sqs["SQS queue"]
consumer["iTube-consumer"]
transcoder["iTube-transcoder"]
s3processed["S3 (processed outputs)"]
postgres["PostgreSQL"]
redis["Redis"]
client -->|"HTTP: auth/metadata/listing"| api
api --> postgres
api --> redis
api -->|"Presigned S3 upload URLs"| client
client -->|"Upload video/thumbnail"| s3raw
s3raw -->|"S3 event"| sqs
sqs --> consumer
consumer -->|"ECS RunTask (Fargate)"| transcoder
transcoder -->|"Upload HLS/DASH"| s3processed
transcoder -->|"Status update (IAM)"| api
| Component | Purpose | Repo |
|---|---|---|
| iTube app | Flutter client (iOS/Android/Web/Windows) | https://github.com/NonymousMorlock/itube |
| iTube API | FastAPI backend (auth, metadata, presigned URLs, internal APIs) | https://github.com/NonymousMorlock/iTube-api |
| iTube consumer | Polls SQS, launches ECS tasks for transcoding | https://github.com/NonymousMorlock/iTube-consumer |
| iTube transcoder | Downloads from S3, transcodes with FFmpeg, uploads outputs | https://github.com/NonymousMorlock/iTube-transcoder |
- The client authenticates with the API (AWS Cognito) and requests presigned S3 upload URLs.
- The client uploads raw video and thumbnail to S3.
- S3 emits an object-created event to SQS.
- iTube-consumer polls the SQS queue and starts an ECS Fargate task for iTube-transcoder, injecting the S3 bucket/key.
- iTube-transcoder downloads the raw video, transcodes to HLS/DASH, and uploads processed outputs to the processed S3 bucket.
- The transcoder calls back into the API to update processing status and metadata.
- Clients query the API for video listings and playback metadata.
- AWS Cognito for user authentication.
- S3 buckets for raw uploads, processed outputs, and thumbnails.
- SQS queue for upload event fanout.
- ECS Fargate for running transcoder tasks.
- PostgreSQL for persistent metadata.
- Redis for caching.
Each component repo has its own README with local development and deployment details. Start with the component you want to run and follow its setup instructions.