AI-powered video noise reduction in the cloud. Upload a video and receive a version with crystal-clear audio using state-of-the-art DeepFilterNet3.
- Noise reduction for any video format via DeepFilterNet3 AI model
- Secure direct-to-blob uploads/downloads with time-limited SAS tokens
- Serverless API (Azure Functions) and queue-based processing (Service Bus)
- GitHub OAuth authentication and Stripe subscription management
- Automatic cleanup of old files and cost-efficient scaling to zero
- Node.js (>=14.x) and npm
- Azure Static Web Apps CLI (
npm install -g @azure/static-web-apps-cli) - Azure Functions Core Tools (
npm install -g azure-functions-core-tools@4) - Docker (for local AI processor)
- Terraform (for infrastructure provisioning)
Audio-Cleaner-Web/
├── frontend/ # React + Vite UI
├── api/ # Azure Functions (Node.js)
│ ├── upload-file/ # Generate upload SAS URL
│ ├── enqueue-job/ # Enqueue processing job
│ ├── job-status/ # Poll job status
│ ├── download-file/ # Generate download SAS URL
│ └── shared/ # Utilities and middleware
├── processor/ # Python AI service container
│ ├── Dockerfile # Container spec
│ └── src/ # DeepFilterNet3 inference code
└── terraform/ # Infrastructure as Code
graph LR
F["Frontend<br/>(React + Vite)"] -->|API calls| A["Azure Functions"]
A --> B["Service Bus Queue"]
B --> C["AI Processor<br/>(Container App)"]
C --> D["Blob Storage"]
A --> E["Cosmos DB"]
- Frontend & API scale to zero when idle
- Processor: containerized AI runs per job
- Storage & DB: secure, pay-per-use
-
Clone the repository:
git clone https://github.com/BenjaminDanker/Audio-Cleaner-Web.git cd Audio-Cleaner-Web -
Start frontend:
cd frontend npm install npm run dev -
Start API:
cd ../api npm install npm run dev -
Start AI processor:
cd ../processor docker compose -f docker-compose.dev.yml up -
Launch full stack locally:
npx swa start
-
Open http://localhost:4280 in your browser.
-
Copy and fill local settings:
cd api cp local.settings.json.example local.settings.json -
In
local.settings.json, set:AzureWebJobsStorage(Blob Storage connection string)SERVICE_BUS_CONNECTION(Service Bus connection string)COSMOS_DB_CONNECTION(Cosmos DB connection string)GITHUB_OAUTH_CLIENT_ID/GITHUB_OAUTH_CLIENT_SECRETSTRIPE_SECRET_KEY
-
Terraform variables:
Edit
terraform/terraform.tfvarswith your Azure subscription and resource group.
- Log in via GitHub on the frontend.
- Upload a video → frontend requests a SAS URL → upload to Blob Storage.
- Click Process → job enqueued on Service Bus.
- View processing status in real time.
- Download the processed video via SAS-protected URL.
- Azure CLI installed and authenticated
- Docker installed
- Node.js and npm installed
- Access to Azure Container Registry
-
Provision infrastructure:
cd terraform terraform init terraform apply -
Build and push the processor container:
cd processor az acr login --name <your-acr-name> docker build -t audio-cleaner-processor:latest . docker tag audio-cleaner-processor:latest <your-acr-name>.azurecr.io/audio-cleaner-processor:latest docker push <your-acr-name>.azurecr.io/audio-cleaner-processor:latest az acr manifest list-metadata --registry <your-acr-name> --name audio-cleaner-processor az acr repository delete --name <your-acr-name> --image audio-cleaner-processor@sha256:aaaaa --yes
-
Build the frontend:
cd frontend npm run build -
Deploy the application:
cd $(git rev-parse --show-toplevel) npx @azure/static-web-apps-cli deploy --resource-group <your-resource-group> --app-name <your-swa-name> --subscription-id <your-subscription-id> --tenant-id <your-tenant-id>
- Set up your Azure Container Registry name in your deployment scripts
- Configure environment variables for your specific Azure resources
- Replace placeholders with your actual Azure resource names and IDs
- Monitor services in the Azure portal as needed
For convenience, you can create private deployment scripts with your actual resource names:
- Create
deploy.ps1(Windows) ordeploy.sh(Linux/Mac) with your actual Azure resource values - Add these files to
.gitignoreto keep credentials private - Run the script for one-command deployment
Note: Never commit deployment scripts with real credentials to version control.
- Azure Functions errors: run
func start --verbosein theapidirectory. - Blob access issues: verify SAS token validity and storage CORS settings.
- Queue delays: check Service Bus SKU and message metrics.
- Processor rebuild: rerun
docker buildif model files change.
- Fork the repository.
- Create a branch:
git checkout -b feature/your-feature. - Implement changes and add tests.
- Test end-to-end locally.
- Submit a pull request against
main.
Released under the MIT License. See LICENSE for details.