Arsmedia API
Arsmedia is a high-performance, enterprise-grade multimedia processing backend built with Spring Boot.
It provides a comprehensive set of media transformation capabilities for video, audio, and image content, with a strong focus on scalability, security, and clean integration.
The platform is designed to serve as a reliable backend for media-intensive applications, supporting complex processing pipelines while maintaining predictable performance and operational stability.
- Format conversion (AVI → MP4, WebM → MOV, and 50+ additional formats)
- Codec transcoding (H.264, H.265, VP9, AV1) with quality optimization
- Audio stream manipulation (extract, replace, merge)
- Non-destructive editing (cut, trim, merge without re-encoding)
- Visual transformations (resize, crop, rotate, mirror, flip)
- Subtitle and overlay handling (burn-in or separate streams)
- Advanced filtering (blur, sharpen, grayscale, watermark, custom effects)
- Intelligent compression with bitrate and quality control
- Multi-format support (MP3, WAV, AAC, FLAC, OGG, and more)
- Bitrate adjustment and sample-rate conversion
- Channel mixing and audio enhancement
- Audio extraction from video sources
- Effects processing (normalization, volume control, echo, fade, equalizer)
- Precise mixing and composition of multiple tracks
- Format conversion (JPEG, PNG, WebP, AVIF, and 20+ formats)
- Frame extraction from videos at configurable intervals
- Media generation (videos and GIFs from image sequences)
- Image resizing, cropping, filtering, and enhancement
- Automatic thumbnail generation with smart cropping
| Component | Technology |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 3.5.9 |
| Build System | Gradle |
| Database | PostgreSQL with Flyway migrations |
| Authentication | JWT, API Keys, Client Credentials |
| Media Engine | FFmpeg, Jaffree |
| Storage | AWS S3 (Transfer Manager) |
| Resend Java SDK | |
| File Analysis | Apache Tika |
| Messaging | RabbitMQ |
| Testing | Testcontainers, JUnit 5, GreenMail |
Arsmedia implements a layered security approach to protect both infrastructure and media operations.
All non-public endpoints require client authentication via headers:
X-CLIENT-ID: <client_id>
X-CLIENT-SECRET: <client_secret>For local development, secret validation may be relaxed to simplify testing.
JWT access tokens are issued via the authentication endpoint:
POST /auth/token/token-pairs
Content-Type: application/json
{
"username": "[email protected]",
"password": "secure_password"
}Administrative operations require triple authentication:
- Valid API key
- Client credentials
- JWT bearer token with administrative privileges
- Java 21 or newer
- PostgreSQL 16 or newer
- FFmpeg 6.0 or newer
- Gradle 8.0 or newer
Clone the repository:
git clone https://github.com/Abega1642/arsmedia.git
cd arsmediaInstall development tools:
make installConfigure environment variables:
cp .env.template .env
# Update values as neededBuild the application (with format check):
make buildRun locally:
make runRun with development profile:
make devBuild Docker image:
make docker-buildRun Docker container:
make docker-runStop Docker container:
make docker-stopRun all tests:
make testRun unit tests only:
make test-unitRun integration tests only:
make test-integrationFormat code:
make formatCheck code formatting:
make format-checkRun Qodana analysis:
make qodanaRun Semgrep security scan:
make semgrepRun CI build pipeline locally:
make ci-buildRun CI test pipeline locally:
make ci-testRun CI format check locally:
make ci-formatDownload and cache dependencies:
make depsCompile the application:
make compileBuild JAR file:
make jarVerify development environment:
make verifyCheck application health:
make health-checkView container logs:
make docker-logsClean build artifacts:
make cleanComplete cleanup (including Docker):
make clean-allShow all available commands:
make help- Unit, integration, and end-to-end tests
- Real infrastructure testing using Testcontainers
- Minimum line coverage threshold enforced (50%)
- JaCoCo reporting and verification
- Static analysis via Qodana
- Google Java Format enforcement
- Dependency and security vulnerability scanning
| Environment | URL | Status |
|---|---|---|
| Production | https://arsmedia.onrender.com | Active |
- Spring Boot Actuator enabled
- Health checks and metrics endpoints
- Custom metrics for media processing operations
- Swagger UI available at
/swagger-ui.html - OpenAPI 3.0 specification located at
doc/api.yaml - Postman collections can be generated from the OpenAPI definition
POST /api/v1/video/convert
Content-Type: multipart/form-data
X-CLIENT-ID: your-client-id
X-CLIENT-SECRET: your-client-secret
{
"file": [binary data],
"targetFormat": "mp4",
"quality": "high",
"outputResolution": "1080p"
}Arsmedia is built on top of the ar-infra-template, a production-ready Spring Boot infrastructure and architecture template.
For detailed architectural conventions and project structure, refer to: https://github.com/Abega1642/ar-infra-template.git
BackOps Engineer: Abegà Razafindratelo Email: [email protected] GitHub: https://github.com/Abega1642
This project is licensed under the MIT License.
See the LICENSE file for details.
If this project is useful to you, consider giving it a star on GitHub.