| Crates.io | lapsify |
| lib.rs | lapsify |
| version | 0.1.1 |
| created_at | 2025-08-04 14:37:02.844308+00 |
| updated_at | 2025-08-06 06:26:40.084637+00 |
| description | A time-lapse image processor with adjustable parameters |
| homepage | |
| repository | https://github.com/fcsonline/lapsify |
| max_upload_size | |
| id | 1780788 |
| size | 133,127 |

A powerful time-lapse image processor written in Rust that can process images with adjustable parameters and create videos.
The easiest way to install Lapsify is using Cargo:
cargo install lapsify
This will download, compile, and install the latest version from crates.io.
Alternatively, you can build from source:
git clone https://github.com/yourusername/lapsify.git
cd lapsify
cargo build --release
# Process images to video
lapsify -i /path/to/images -o /path/to/output -f mp4
# Process images to processed images
lapsify -i /path/to/images -o /path/to/output -f jpg
-i, --input <DIR>: Input directory containing images (required)-o, --output <DIR>: Output directory for processed files (required)-e, --exposure <STOPS>: Exposure adjustment in EV stops (-3.0 to +3.0)-b, --brightness <VALUE>: Brightness adjustment (-100 to +100)-c, --contrast <VALUE>: Contrast multiplier (0.1 to 3.0)-s, --saturation <VALUE>: Saturation multiplier (0.0 to 2.0)--crop <WIDTH:HEIGHT:X:Y>: Crop parameters in FFmpeg format (e.g., '1000:800:100:50' or '50%:50%:10%:10%')--offset-x <PIXELS>: X offset for crop window in pixels. Single value or comma-separated array--offset-y <PIXELS>: Y offset for crop window in pixels. Single value or comma-separated array-f, --format <FORMAT>: Output format (jpg, png, tiff, mp4, mov, avi)-r, --fps <RATE>: Frame rate for video output (1-120 fps)-q, --quality <CRF>: Video quality (0-51, lower = better)--resolution <WIDTHxHEIGHT>: Output video resolution-t, --threads <NUM>: Number of threads to use for processing (default: auto-detect)Crop images using FFmpeg-style crop parameters:
# Crop with pixel coordinates (width:height:x:y)
lapsify -i images/ -o output/ --crop="600:400:100:50" -f mp4
# Crop with percentage coordinates
lapsify -i images/ -o output/ --crop="50%:50%:10%:10%" -f mp4
# Crop from right/bottom using negative offsets
lapsify -i images/ -o output/ --crop="600:400:-100:-100" -f mp4
Crop Format: width:height:x:y
Apply X/Y offsets to the crop window for manual stabilization, panning, and positioning:
# Static positioning (no movement)
lapsify -i images/ -o output/ --crop="3000:2400:-100:-100" --offset-x 10 --offset-y -5 -f mp4
# Horizontal panning (left to right)
lapsify -i images/ -o output/ --crop="3000:2400:-100:-100" --offset-x="0,50,100,150" --offset-y 0 -f mp4
# Vertical panning (bottom to top)
lapsify -i images/ -o output/ --crop="3000:2400:-100:-100" --offset-x 0 --offset-y="0,-30,-60,-90" -f mp4
# Diagonal panning
lapsify -i images/ -o output/ --crop="3000:2400:-100:-100" --offset-x="0,20,40,60" --offset-y="0,-10,-20,-30" -f mp4
# Stabilization (compensate for camera shake)
lapsify -i images/ -o output/ --crop="3000:2400:-100:-100" --offset-x="0,5,-5,0" --offset-y="0,-3,3,0" -f mp4
# Smooth circular movement
lapsify -i images/ -o output/ --crop="3000:2400:-100:-100" --offset-x="0,20,0,-20,0" --offset-y="0,0,20,0,-20" -f mp4
Offset Features:
--crop parameter is specifiedNote: The program validates all offset values against image boundaries before processing begins. If any offset would cause the crop window to extend beyond the image boundaries, the program crashes immediately with a clear error message. This prevents creating videos with black borders or missing content.
You can provide arrays of values for smooth transitions:
# Gradual exposure change from -1 to +1 EV
lapsify -i images/ -o output/ -e "-1.0,1.0" -f mp4
# Multiple brightness points
lapsify -i images/ -o output/ -b "0,20,-10,0" -f mp4
# Complex contrast curve
lapsify -i images/ -o output/ -c "1.0,1.5,0.8,1.2" -f mp4
When using negative values in command-line arguments, you must use the = syntax to separate the argument name from the value:
# ✅ Correct - use equals sign for negative values
lapsify --exposure="-1,0.2" --fps 20
# ❌ Incorrect - will be interpreted as separate flags
lapsify --exposure "-1,0.2" --fps 20
This is because the command-line parser interprets values starting with - as separate flags unless explicitly bound with =.
# Create a video with increased brightness and contrast
lapsify -i photos/ -o video/ -b 20 -c 1.2 -f mp4 -r 30
# Process with exposure ramping
lapsify -i photos/ -o processed/ -e "-0.5,1.0" -f jpg
# High-quality 4K video
lapsify -i photos/ -o video/ -f mp4 -r 24 -q 18 --resolution 4K
# Use specific number of threads for processing
lapsify -i photos/ -o video/ -f mp4 -t 8
# Crop to center 50% of the image
lapsify -i photos/ -o video/ --crop="50%:50%:25%:25%" -f mp4
# Crop from right side (remove 200 pixels from right)
lapsify -i photos/ -o video/ --crop="600:600:0:0" -f mp4
# Manual offset with interpolated movement
lapsify -i photos/ -o video/ --crop="3000:2400:-100:-100" --offset-x="0,10,-5,0" --offset-y="0,5,-10,0" -f mp4
# Single offset for static positioning
lapsify -i photos/ -o video/ --crop="3000:2400:-100:-100" --offset-x 10 --offset-y -5 -f mp4
# Horizontal panning effect
lapsify -i photos/ -o video/ --crop="3000:2400:-100:-100" --offset-x="0,50,100,150" --offset-y 0 -f mp4
# Stabilization with small corrections
lapsify -i photos/ -o video/ --crop="3000:2400:-100:-100" --offset-x="0,3,-3,0" --offset-y="0,-2,2,0" -f mp4
# Large offset (will crash with boundary error)
lapsify -i photos/ -o video/ --crop="3000:2400:-100:-100" --offset-x="1000" --offset-y="500" -f mp4
Lapsify uses parallel processing to speed up image processing:
-t/--threads to specify exact number of threads# Use auto-detected number of threads (recommended)
lapsify -i photos/ -o video/ -f mp4
# Use 4 threads specifically
lapsify -i photos/ -o video/ -f mp4 -t 4
# Use single thread (for debugging or low-resource systems)
lapsify -i photos/ -o video/ -f mp4 -t 1
MIT License - see LICENSE file for details.