Convert any audio file or YouTube video to any format you want!
- 🎵 Audio File Conversion: Convert between MP3, WAV, FLAC, OGG, AAC, and M4A formats
- 🎬 YouTube to Audio: Extract audio from YouTube videos in your preferred format
- 🎚️ Quality Control: Adjust bitrate/quality for lossy formats (MP3, OGG, AAC, M4A)
- 📝 Metadata Editing: Edit artist, title, album, and genre information
- 🚀 High Performance: Built with Rust backend for fast processing
- 🎨 Modern UI: Clean and intuitive React frontend
- 🐳 Easy Deployment: Fully containerized with Docker Compose
- Backend: Rust with Actix-web
- Frontend: React with Vite
- Audio Processing: FFmpeg
- Video Download: yt-dlp
- Deployment: Docker & Docker Compose
- Docker and Docker Compose installed on your system
- Clone the repository:
git clone https://github.com/mbianchidev/anytrack-converter.git
cd anytrack-converter- Start the application:
docker-compose up --build- Access the application:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8080
- Install Rust (if not already installed):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh- Install FFmpeg and yt-dlp:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install ffmpeg python3-pip
pip3 install yt-dlp
# macOS
brew install ffmpeg yt-dlp- Build and run the backend:
cd backend
cargo build --release
cargo runThe API will be available at http://localhost:8080
-
Install Node.js (v18 or higher)
-
Install dependencies and run:
cd frontend
npm install
npm run devThe frontend will be available at http://localhost:3000
GET /health
POST /api/convert
Content-Type: multipart/form-data
Parameters:
- file: Audio file to convert
- format: Output format (mp3, wav, flac, ogg, aac, m4a)
- quality: Bitrate in kbps (optional, for lossy formats)
POST /api/youtube
Content-Type: application/json
Body:
{
"url": "https://www.youtube.com/watch?v=...",
"format": "mp3",
"quality": "192"
}
POST /api/metadata
Content-Type: multipart/form-data
Parameters:
- file: Audio file
- artist: Artist name (optional)
- title: Song title (optional)
- album: Album name (optional)
- genre: Music genre (optional)
GET /api/download/{filename}
- Go to the "Convert Audio" tab
- Select an audio file from your computer
- Choose the output format
- Adjust quality/bitrate if needed
- Click "Convert"
- Download the converted file
- Go to the "YouTube to Audio" tab
- Paste a YouTube video URL
- Select the output format
- Adjust quality/bitrate if needed
- Click "Convert from YouTube"
- Download the extracted audio
- Go to the "Edit Metadata" tab
- Select an audio file
- Fill in the metadata fields (artist, title, album, genre)
- Click "Update Metadata"
- Download the file with updated metadata
Backend:
RUST_LOG: Log level (default: info)
Frontend:
VITE_API_URL: Backend API URL (default: http://localhost:8080)
cd backend
cargo watch -x run # Auto-reload on changescd frontend
npm run dev # Hot module replacement enabledanytrack-converter/
├── backend/
│ ├── src/
│ │ └── main.rs # Rust backend server
│ ├── Cargo.toml # Rust dependencies
│ ├── Dockerfile # Backend container
│ └── .dockerignore
├── frontend/
│ ├── src/
│ │ ├── App.jsx # Main React component
│ │ ├── App.css # Styles
│ │ ├── main.jsx # React entry point
│ │ └── index.css # Global styles
│ ├── package.json # Node dependencies
│ ├── vite.config.js # Vite configuration
│ ├── nginx.conf # Nginx config for production
│ ├── Dockerfile # Frontend container
│ └── .dockerignore
├── docker-compose.yml # Docker Compose configuration
├── README.md # This file
└── LICENSE # MIT License
- MP3 (MPEG Audio Layer 3)
- WAV (Waveform Audio File Format)
- FLAC (Free Lossless Audio Codec)
- OGG (Ogg Vorbis)
- AAC (Advanced Audio Coding)
- M4A (MPEG-4 Audio)
- And many more supported by FFmpeg
- MP3 - Lossy compression (adjustable bitrate)
- WAV - Uncompressed audio
- FLAC - Lossless compression
- OGG - Lossy compression (adjustable bitrate)
- AAC - Lossy compression (adjustable bitrate)
- M4A - MPEG-4 audio (adjustable bitrate)
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
When deploying this application in production, please consider the following security measures:
- CORS Configuration: Update the backend CORS settings to restrict allowed origins instead of using
allow_any_origin() - HTTPS: Always use HTTPS in production environments
- File Upload Limits: Configure appropriate file size limits to prevent abuse
- Rate Limiting: Implement rate limiting to prevent denial of service attacks
- Input Validation: Validate YouTube URLs and file types on both client and server
- Temporary File Cleanup: Monitor disk space and implement cleanup policies for old files
- Environment Variables: Use environment variables for sensitive configuration
- Temporary files are stored locally and should be cleaned up regularly
- No authentication/authorization system is included
- File storage is not distributed or replicated
This project is licensed under the MIT License - see the LICENSE file for details.
- FFmpeg - Powerful multimedia framework
- yt-dlp - YouTube video downloader
- Actix-web - Rust web framework
- React - Frontend library
- Vite - Build tool
If you encounter any issues or have questions, please open an issue on GitHub.
Made with ❤️ by Matteo Bianchi