Discover MediaCMS, a full-stack open-source video CMS built with Django and React. Learn its features, Docker deployment, subtitle setup, and how it compares to Strapi and MCMS.
1. MediaCMS Core Positioning & Technical Architecture
MediaCMS is a full-stack content management system purpose-built for modern media distribution. Powered by a Django/Python backend and React frontend, it follows an API-first design philosophy. With MediaCMS, you can spin up a fully functional video portal in just a few minutes. Whether you're an individual creator or an educational institution, the self-hosted approach gives you complete data sovereignty, freeing you from the rule restrictions of commercial platforms like YouTube and Vimeo.
The technology stack deeply integrates the core components of modern media processing:
- Celery: Handles asynchronous tasks such as video transcoding.
- PostgreSQL: Reliable relational data storage.
- Redis: High-speed caching and message broker.
- FFmpeg: Media transcoding engine.
- Video.js: Frontend player core.
This modular architecture ensures system extensibility while Docker containerization reduces operational complexity.
2. Feature Highlights: Beyond Basic Video Hosting
1. Media Processing Capabilities
- Smart Transcoding: Multi-resolution output from 144p to 1080p, adapting to different network conditions.
- Format Compatibility: Processes MP4/MKV/AVI videos, MP3/WAV audio, and PDF/image files.
- HLS Adaptive Streaming: Automatically switches quality based on user bandwidth.
- Video Trimmer: Crop the timeline directly and save as a new clip.
2. Content Management Innovations
`# Example: Media category tag implementation logic
{ms:arclist flag="c" size=5 typeid=62}
<img src="{ms:global.host}/{@ms:file field.litpic/}"/>
<a href='{ms:global.url}${field.link}' target="_self">${field.title}</a>
{/ms:arclist}`- Three-Dimensional Classification: Categories (tree structure) + tags (flexible marking) + custom metadata.
- Multi-Language Subtitles: Language options must be pre-configured in the admin panel (see Chapter 4 for common solutions).
- Playlists: Supports dynamic collections across videos with manual ordering.
3. Enterprise-Grade Features
- RBAC Permission Control: Assign media access/edit permissions based on roles.
- SAML Integration: Single sign-on and enterprise identity system integration.
- Moderation Workflow: Supports multi-stage publishing from private → review → public.
- Sensitive Content Filtering: Automatically switches to private after 2 reports (threshold adjustable).
4. User Experience Optimization
- Responsive Dual Themes: Automatically switches between light and dark modes.
- Chunked Uploads: Supports resumable uploads of large files (requires proper Nginx timeout configuration).
- Real-Time Search: Multi-field joint search across titles/tags/descriptions.
- Social Interaction: Likes/comments/sharing/embed code generation.
3. Installation & Deployment Guide: Building a Production Environment from Scratch
1. Basic Environment Preparation (Ubuntu 20.04 Example)
`# Install dependencies
apt update && apt install git ffmpeg -y
# Deploy Docker environment (optional but recommended)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh`2. Docker Compose Method (Suitable for Quick Deployment)
`git clone https://github.com/mediacms-io/mediacms
cd mediacms
# Key configuration changes
nano deploy/docker/local_settings.py
# Set FRONTEND_HOST = "your domain or IP"
# Set CSRF_TRUSTED_ORIGINS = ['your domain']
# Start services
docker-compose up -d`Note: On first startup, run docker-compose exec mediacms python manage.py createsuperuser to create an administrator.
3. Bare-Metal Installation (High-Performance Scenarios)
`mkdir /home/mediacms.io && cd /home/mediacms.io/
git clone https://github.com/mediacms-io/mediacms
cd mediacms
# Run the automated script (overrides Nginx/PostgreSQL configuration)
bash ./install.sh `4. Synology NAS Special Configuration
- Install the Git package via Synology Community.
- Modify
uwsgi.inito addbuffer-size = 32768to avoid 502 errors. - The reverse proxy needs
client_max_body_size 10Gto handle large files.
4. Usage Tips & Best Practices
1. Proper Use of Categories
Many users report being unable to assign categories. The root cause lies in the layered design logic:
- Upload stage: Handles file transfer only.
- Edit stage: Fill in basic metadata.
- Publish stage: Set categories/tags in the third tab.
Be sure to complete the full workflow!
2. Subtitle System Configuration
Language selection blank? The administrator must initialize manually:
- Visit
https://yourdomain/admin. - Go to the Languages module.
- Add language code (e.g., zh-CN) and display name.
3. Upload Troubleshooting
When the progress bar stalls, check:
`# Permission fix
chown -R www-data:www-data /path/to/mediacms/media_files
# Disk space check
df -h # Storage capacity
df -i # Inode count
# Nginx adjustment
client_max_body_size 10G; # Add to nginx.conf`4. Security Hardening Recommendations
- Enable HTTPS in production (Let's Encrypt auto-integration).
- Restrict admin path access by IP.
- Regularly clean up the
media_files/chunkstemporary directory.
5. Comparison with Similar Tools
| System | Language Stack | Media Focus | Permission Model | Learning Curve | Use Case |
|---|---|---|---|---|---|
| MediaCMS | Python/React | ★★★★ | RBAC | Medium | Video portal / education platform |
| Strapi | Node.js | ★★ | API Key | Low | General-purpose content API |
| MCMS | Java | ★★ | Basic Roles | High | Government / enterprise websites |
| Directus | PHP | ★ | Visual Permissions | Medium | Database frontend management |
Advantage Interpretation:
- vs Strapi: Native support for video transcoding/HLS/multi-resolution without plugins.
- vs MCMS: More flexible tag system; the
{ms:arclist}syntax simplifies dynamic list development. - vs General CMS: Integrated player/subtitle/reporting features with out-of-the-box media workflows.
6. Application Scenarios & Case Studies
1. Educational Institution Internal Training Platform
- Sensitive Content Hosting: Internal training videos avoid leakage.
- Permission Layering: Teachers (edit) + students (view only).
- Download Control: Allow synchronized distribution of course material PDFs.
2. Creator Community
- Brand Customization: Replace LOGO/fonts/colors to match your VI system.
- Monetization Ready: Integrate payment APIs for member-exclusive playlists.
- Multi-Language Support: Subtitle files enable cross-language content distribution.
3. Enterprise Knowledge Base
- Video Clip Library: Use the trimmer to create technical highlight clips.
- SAML Integration: Single sign-on with Active Directory/LDAP.
- Audit Compliance: Meet Classified Protection 2.0/3.0 logging requirements.
7. Future Development & Community Ecosystem
MediaCMS is actively expanding its AI media analysis capabilities:
- Speech-to-subtitle: Automatic generation of timeline text.
- Content fingerprinting: Copyright duplicate detection.
- Image recognition: Automatic tagging.
Its open-source ecosystem has formed a virtuous cycle:
- Contribution Guide: GitHub PRs must pass ESLint + unit tests.
- Plugin Marketplace: Third-party themes/transcoding plugins.
- Cloud Hosting Solution: elest.io offers one-click deployment.
Project Repository: https://github.com/mediacms-io/mediacms
User Documentation: User Manual
Live Demo: https://demo.mediacms.io
Conclusion
MediaCMS achieves a rare balance between feature depth and deployment simplicity among open-source video CMS platforms. While its multi-language interface still has room for improvement, its responsive design, granular permissions, and native HLS support already meet the demands of most media portals. For teams seeking data autonomy, it's undoubtedly a top-tier alternative to commercial platforms — you can complete a test deployment in half an hour, or build a custom media ecosystem on top of its REST API.
Note: This is the English translation of the original Chinese version.