Manim Quality Stress Testing Tool
Project description
Maniq - Manim Quality Stress Testing Tool
Maniq is a comprehensive stress testing tool for Manim that helps you determine the maximum concurrent rendering capacity of your server across different quality levels with intelligent resource management to prevent system crashes.
🌟 Features
-
Multi-quality support: Test 5 quality levels from 480p to 4K
- Low quality (480p) -
l/low - Medium quality (720p) -
m/medium - High quality (1080p) -
h/high - 2K quality (1440p) -
p/2k - 4K quality (2160p) -
k/4k
- Low quality (480p) -
-
Dual rendering modes:
- CPU rendering (default): Traditional Manim rendering
- GPU rendering (OpenGL): Accelerated rendering with GPU support
-
Intelligent resource management:
- Dynamically adjusts concurrency based on historical CPU/GPU usage
- Prevents server crashes by monitoring system resources
- Automatically pauses when CPU, GPU, or memory usage exceeds 90%
-
Comprehensive analysis:
- Render time statistics (average, min, max, median, standard deviation)
- Video duration and file size analysis
- System resource usage monitoring (CPU, memory, GPU)
-
Multi-language support:
- English (
en) - Simplified Chinese (
zh) - Traditional Chinese (
zh_tw) - Korean (
ko) - Japanese (
ja) - German (
de) - French (
fr) - Spanish (
es) - Russian (
ru)
- English (
-
Professional reporting:
- Properly aligned tables that handle CJK characters correctly
- Detailed text and JSON reports
- Individual task logs with complete output
-
Flexible configuration:
- Customizable task launch intervals
- Selectable quality levels
- Configurable output directories
📦 Installation
Prerequisites
- Python 3.10 or higher
- Manim installed and configured
ffprobe(optional, for detailed video analysis)
Install from PyPI
pip install -U maniq
Install from source
git clone https://github.com/MarkHoo/maniq.git
cd maniq
pip install .
🚀 Quick Start
CPU vs GPU Rendering
By default, Maniq uses CPU rendering. To enable GPU rendering with OpenGL:
# CPU rendering (default)
maniq /home/manim-code
# GPU rendering (OpenGL)
maniq /home/manim-code --gpu
maniq /home/manim-code -g # Short form
Basic usage
# Test all quality levels with default settings
maniq /home/manim-code
# View version information
maniq -V
maniq --version
Common examples
# Test only high quality and 4K with 2-second intervals
maniq /home/manim-code -q h k -i 2.0
# Test low and medium quality in Chinese
maniq /home/manim-code -q l m --lang zh
# GPU rendering with high and 4K quality
maniq /home/manim-code -q h k --gpu
# GPU rendering with GPU usage monitoring
maniq /home/manim-code -q m h --gpu --gpu-monitor
# Custom output directories and test duration
maniq /home/manim-code -o my_output -d 1200 --lang ja
# Mix short and full quality names
maniq /home/manim-code -q low m 2k k --lang ko
📋 Command Line Options
Version and Help
| Option | Description |
|---|---|
-V, --version |
Show version information and exit |
-h, --help |
Show help message and exit |
Quality Selection
| Option | Short | Description | Values |
|---|---|---|---|
--qualities |
-q |
Quality levels to test | l/low, m/medium, h/high, p/2k, k/4k |
GPU Options
| Option | Short | Description | Default |
|---|---|---|---|
--gpu |
-g |
Enable GPU rendering (OpenGL renderer) | False |
--gpu-monitor |
Enable GPU usage monitoring | False |
Configuration
| Option | Short | Description | Default |
|---|---|---|---|
--output-dir |
-o |
Render output directory | manim_quality_output |
--log-output-dir |
-l |
Task log output directory | manim_task_logs |
--max-duration |
-d |
Max test duration per quality (seconds) | 1800 |
--launch-interval |
-i |
Task launch interval (seconds) | 1.0 |
--report-file |
-r |
Text report filename | manim_quality_test_report.txt |
--json-report |
-j |
JSON report filename | manim_quality_test_results.json |
--log-file |
Main log filename | manim_quality_stress_test.log |
|
--lang, --language |
Report and log language | en |
🌍 Language Support
Maniq supports 9 languages with complete translation of all messages and reports:
| Language | Code | Quality Names |
|---|---|---|
| English | en |
LOW, MEDIUM, HIGH, 2K, 4K |
| Simplified Chinese | zh |
低质量, 中质量, 高质量, 2K, 4K |
| Traditional Chinese | zh_tw |
低品質, 中品質, 高品質, 2K, 4K |
| Korean | ko |
저품질, 중품질, 고품질, 2K, 4K |
| Japanese | ja |
低品質, 中品質, 高品質, 2K, 4K |
| German | de |
NIEDRIG, MITTEL, HOCH, 2K, 4K |
| French | fr |
BASSE, MOYENNE, HAUTE, 2K, 4K |
| Spanish | es |
BAJA, MEDIA, ALTA, 2K, 4K |
| Russian | ru |
НИЗКОЕ, СРЕДНЕЕ, ВЫСОКОЕ, 2K, 4K |
📊 Output Files
After running Maniq, you'll get the following output files:
Reports
- Text Report (
manim_quality_test_report.txt): Comprehensive human-readable report with properly aligned tables - JSON Report (
manim_quality_test_results.json): Structured data for programmatic analysis
Logs
- Main Log (
manim_quality_stress_test.log): Complete execution log with timestamps - Task Logs (
manim_task_logs/): Individual logs for each render task containing:- Full command output (stdout/stderr)
- System resource usage before and after
- GPU usage (if GPU monitoring enabled)
- Video file information (if available)
- Execution timing details
Render Output
- Rendered Videos (
manim_quality_output/): Actual rendered video files organized by quality and task ID
📈 Sample Report
MANIQ - Manim Quality Stress Testing Report
======================================================================================================================
Performance Comparison Summary
+------------+--------------+--------------+------------------+--------------------+------------------+
| Quality | Max Concurrent | Success Rate | Avg Render Time | Avg Video Duration | Avg File Size (MB) |
+------------+--------------+--------------+------------------+--------------------+------------------+
| LOW | 8 | 100.00%| 3.45 | 2.10 | 1.25 |
| MEDIUM | 6 | 100.00%| 5.67 | 2.10 | 3.42 |
| HIGH | 4 | 100.00%| 8.92 | 2.10 | 7.85 |
| 2K | 2 | 100.00%| 15.34 | 2.10 | 18.67 |
| 4K | 1 | 100.00%| 28.76 | 2.10 | 45.23 |
+------------+--------------+--------------+------------------+--------------------+------------------+
🛠️ Intelligent Resource Management
Maniq uses a sophisticated algorithm to prevent system overload:
CPU Mode
- Initial Phase: Starts tasks with the specified interval
- Monitoring: Tracks CPU and memory usage of completed tasks
- Dynamic Adjustment: Calculates average CPU usage per task
- Safety Check: Before starting a new task, ensures:
- Remaining CPU ≥ (Average CPU usage + 5%)
- CPU usage < 90%
- Memory usage < 90%
- Automatic Pause: Waits for resources to become available if limits are exceeded
GPU Mode
- Enhanced Monitoring: Tracks CPU, GPU, and memory usage
- Dual Resource Management: Applies safety checks to both CPU and GPU
- GPU-Specific Commands: Uses OpenGL renderer with required flags:
--renderer=opengl--write_to_movie--disable_caching--flush_cache
- Extended Timeouts: GPU rendering may take longer, so timeouts are increased
This ensures your server remains responsive and doesn't crash during intensive testing.
🔧 Requirements
Python Dependencies
psutil>=7.0.0- System resource monitoringpynvml>=11.0.0- GPU monitoring (automatically installed on non-macOS systems)
System Dependencies
- Manim - The animation engine being tested
- ffprobe (optional) - For detailed video analysis (part of ffmpeg)
- NVIDIA GPU (for GPU rendering) - With CUDA drivers installed
GPU Rendering Requirements
- NVIDIA GPU with CUDA support
- Manim with OpenGL support - Ensure your Manim installation supports
--renderer=opengl - Linux or Windows - macOS is not supported for GPU monitoring
- CUDA drivers - Properly installed and configured
Hardware Recommendations
- CPU Testing: 4+ CPU cores, 8GB+ RAM
- GPU Testing: NVIDIA GPU with 4GB+ VRAM, 8+ CPU cores, 16GB+ RAM
- Storage: Sufficient disk space for rendered videos (4K videos can be large)
🐛 Troubleshooting
Common Issues
"No .py files found" error
- Ensure your code directory contains Manim
.pyfiles - Verify the path is correct and accessible
GPU rendering not working
- Ensure your Manim installation supports OpenGL rendering
- Check that you have a compatible NVIDIA GPU
- Verify CUDA drivers are properly installed
Tasks failing with timeout
- Increase
--max-durationfor higher quality levels - GPU rendering may take longer than CPU rendering
- 4K GPU rendering may exceed the default 30-minute timeout
Poor performance or crashes
- Reduce
--launch-intervalto start tasks less frequently - Test fewer quality levels simultaneously
- Ensure sufficient system resources are available
- For GPU testing, ensure adequate VRAM is available
CJK characters not displaying properly
- Ensure your terminal supports UTF-8 encoding
- The tables are properly aligned regardless of character display
Debugging
- Check the main log file for detailed error messages
- Review individual task logs in
manim_task_logs/directory - Monitor system resources during testing using
htopor similar tools - For GPU issues, check
nvidia-smioutput during testing
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Built on top of the amazing Manim animation engine
- Uses psutil for system monitoring
- Uses pynvml for GPU monitoring
- Inspired by the need for reliable performance testing in production environments
📬 Feedback and Contributions
We welcome feedback, bug reports, and contributions! Please open an issue or pull request on our GitHub repository.
Maniq - Because knowing your server's limits shouldn't crash your server! 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maniq-4.0.0rc1.tar.gz.
File metadata
- Download URL: maniq-4.0.0rc1.tar.gz
- Upload date:
- Size: 40.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4af8d7d3935599a8581b11beafc794349d68a1aff2f0c124765eb8ee20da62a5
|
|
| MD5 |
4c81310b5f58fcb293d46764743ab338
|
|
| BLAKE2b-256 |
e06b175dc775f1871fd6020b885e6f19c9e94ca1d780351eb303393e624d32c0
|
File details
Details for the file maniq-4.0.0rc1-py3-none-any.whl.
File metadata
- Download URL: maniq-4.0.0rc1-py3-none-any.whl
- Upload date:
- Size: 39.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bc33f6e8f4fe7948652c3d1cb70fc0b2aa7cc1a9f05cbb1b0437f51036d17c0
|
|
| MD5 |
57e4bc2ad3a051bb274fefa543084f2f
|
|
| BLAKE2b-256 |
33c93f4f9a3973e1473e2f26dc99d536affc348c751d9c9cd0ce2dff34a3746a
|