A high-performance Python toolset to batch convert .mrc files (e.g., tilt series, tomograms) into movies or PNG image slices with enhanced contrast. Perfect for quickly assessing data quality, sharing results, or creating presentations.
# Install via pip
pip install mrc2movie
# Or via uv (recommended)
uv pip install mrc2movie# Clone and setup development environment
git clone https://github.com/your-repo/mrc2movie
cd mrc2movie
# Using uv (recommended for dev)
uv sync # Install dependencies
uv sync --extra dev # Install test dependencies
uv run mrc2movie --help # Run via uv
uv run pytest # Run tests# Convert MRC files to movies
python mrc2movie.py data/ movies/
# Convert single MRC to PNG sequence
python mrc2png.py sample.mrc output/
# Use presets for common data types
python mrc2movie.py data/ movies/ --preset tilt --speed balancedBasic Syntax:
python mrc2movie.py INPUT_DIR OUTPUT_DIR [OPTIONS]Essential Parameters:
# Frame rate optimization
--fps 30 # Built tomograms (default)
--fps 8 # Tilt series (recommended)
# Contrast enhancement
--clip_limit 2 # Built tomograms (default)
--clip_limit 100 # Tilt series (low SNR)
# Output sizing
--output_size 1024 # Default
--output_size 512 # Memory-constrained
--output_size 2048 # High resolution
--output_size 4096 # original for falcon
--output_size 5760 # original for gatan K3Preset Configurations:
# Tomograms (high quality)
python mrc2movie.py data/ output/ --preset tomogram
python mrc2movie.py data/ output/ --preset tomo # shorthand
# Tilt series (optimized for low SNR)
python mrc2movie.py data/ output/ --preset tiltseries
python mrc2movie.py data/ output/ --preset ts # shorthand
# Quick preview
python mrc2movie.py data/ output/ --preset quick
# Maximum quality
python mrc2movie.py data/ output/ --preset max_qualitySpeed vs Quality Trade-offs:
# Fast processing
python mrc2movie.py data/ output/ --speed fast --preset tilt
# Balanced (default)
python mrc2movie.py data/ output/ --speed balanced
# Maximum quality
python mrc2movie.py data/ output/ --speed quality --preset max_qualityBasic Syntax:
python mrc2png.py INPUT_FILE OUTPUT_DIR [OPTIONS]Common Usage:
# Basic PNG generation
python mrc2png.py sample.mrc output/
# With custom parameters
python mrc2png.py sample.mrc output/ --clip_limit 50 --output_size 512
# Slice selection
python mrc2png.py sample.mrc output/ --discard_percentage 0.1 0.1# Check memory requirements before processing
python mrc2movie.py data/ output/ --estimate_memory
# Example output:
# File: sample.mrc
# Shape: (1000, 2048, 2048)
# Raw size: 8.0 GB
# Processing memory: 20.0 GB β οΈ
# WARNING: Large file - may exceed available RAM# For large files (>4GB)
python mrc2movie.py data/ output/ --preset cryo --output_size 512
# Batch processing with memory monitoring
python mrc2movie.py data/ output/ --speed fast --batch-size 2| Parameter | Description | Built Tomograms | Tilt Series | Cryo Data |
|---|---|---|---|---|
--fps |
Frame rate | 30 | 2 | 10 |
--clip_limit |
CLAHE contrast | 2 | 100 | 5 |
--tile_grid_size |
CLAHE tiles | 8 | 16 | 8 |
--output_size |
Max dimension | 1024 | 1024 | 512 |
--codec |
Video codec | MJPG | MJPG | MJPG |
mrc2movie/
βββ mrc2movie.py # Main CLI for movie generation
βββ mrc2png.py # CLI for PNG sequence generation
βββ mrc_utils.py # Core processing utilities
Memory-efficient MRC file reader with automatic size estimation.
Parameters:
input_path: Path to MRC file
Returns:
np.ndarray: 3D tomogram data orNoneif error
Example:
from mrc_utils import read_tomogram
tomogram = read_tomogram("sample.mrc")
print(f"Loaded: {tomogram.shape}")Process individual slice with contrast enhancement.
Parameters:
args: Tuple of (slice_data, global_min, global_max, clip_limit, tile_grid_size)
Returns:
np.ndarray: Enhanced 2D slice
Write processed slices to PNG files with parallel I/O.
Parameters:
output_dir: Output directory pathbasename: Base filename for PNGsslices: 3D array of processed slicesoutput_size: Maximum dimension for resizing
# In mrc2movie.py, add to preset_params dict
"custom_preset": {
"fps": 15.0,
"clip_limit": 20.0,
"output_size": 768
}from mrc_utils import read_tomogram, process_slice, write_slices_to_png
import numpy as np
# Custom processing pipeline
def custom_pipeline(input_path, output_path):
tomogram = read_tomogram(input_path)
if tomogram is None:
return
# Custom processing
processed = []
global_min, global_max = tomogram.min(), tomogram.max()
for slice_data in tomogram:
enhanced = process_slice((slice_data, global_min, global_max, 10.0, 8))
processed.append(enhanced)
# Save results
write_slices_to_png(output_path, "custom", np.array(processed))# Enable detailed timing for optimization
python mrc2movie.py data/ output/ --profile --preset tilt
# Output includes:
# - Memory usage per file
# - Processing time per slice
# - I/O performance metrics# For memory-constrained environments
from mrc_utils import estimate_memory_usage
# Check before processing
estimate_memory_usage("large_file.mrc")
# File: large_file.mrc
# Shape: (2000, 4096, 4096)
# Processing memory: 160.0 GB β οΈ| Issue | Solution |
|---|---|
MemoryError |
Use --output_size 512 or --speed fast |
cv2.error |
Check codec support, try --codec MJPG |
No MRC files |
Verify file extensions (.mrc, .st) |
Permission denied |
Check output directory permissions |
# Verbose logging
python mrc2movie.py data/ output/ --verbose
# Memory debugging
python -m memory_profiler mrc2movie.py data/ output/# Automated parameter optimization
for clip in 1 5 10 50 100; do
python mrc2movie.py data/ output/ --clip_limit $clip --preset tilt
done# Compare different presets
python mrc2movie.py data/ output/ --preset built --speed quality
python mrc2movie.py data/ output/ --preset built --speed fast
diff output/ output_fast/git clone https://github.com/your-repo/mrc2movie
cd mrc2movie
# Install and activate virtual environment
uv sync # Install dependencies
uv sync --extra dev # Install dev dependencies
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Run tools directly
uv run mrc2movie data/ output/ --preset tilt
uv run mrc2png sample.mrc output/
# Development commands
uv run pytest tests/
uv run black .
uv run ruff check .git clone https://github.com/your-repo/mrc2movie
cd mrc2movie
pip install -e ".[dev]"
pytest tests/# tests/test_mrc_utils.py
def test_process_slice():
slice_data = np.random.rand(512, 512)
result = process_slice((slice_data, 0, 1, 2.0, 8))
assert result.shape == (512, 512)
assert result.dtype == np.uint8MIT License - see LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions