ComfyUI Extension: ComfyUi-PhotoRX
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.
A physics-based film grain synthesis plugin that brings authentic film grain to your ComfyUI workflows.
Looking for a different extension?
Custom Nodes (0)
README
PhotoRX - Film Grain Custom Nodes for ComfyUI
A physics-based film grain synthesis plugin that brings authentic film grain to your ComfyUI workflows. Based on the inhomogeneous Boolean model, it accurately emulates the statistical properties of real photographic film.
Features
- Physics-Based Rendering: Uses the proven Boolean model from computational photography research
- Two Renderers: Fast analytical renderer (~100-500x faster) or Monte Carlo for reference quality
- Film Profiles: Pre-configured profiles for popular film stocks
- Batch Processing: Works with ComfyUI's batch system
- Reproducible Results: Seed-based randomization for consistent outputs
Installation
Manual Installation
-
Clone or download this repository to your ComfyUI custom nodes directory:
cd ComfyUI/custom_nodes/ git clone https://github.com/yourusername/ComfyUi-PhotoRX.git -
Install dependencies:
pip install -r ComfyUi-PhotoRX/requirements.txt -
Restart ComfyUI
Using ComfyUI Manager
If available, search for "PhotoRX" in the Custom Nodes Manager and install.
Usage
After installation, restart ComfyUI. The nodes will appear under the PhotoRX category:
Film Grain (Basic)
Simple interface for quick grain application.
Inputs:
image- Input image tensorfilm_profile- Select a film stock (default: Tri-X 400)black_white- Convert to grayscale before applying grainseed- Random seed for reproducibilityzoom- Output resolution multiplier (optional, default: 1.0)
Outputs:
image- Image with film grain applied
Film Grain (Advanced)
Full control over all grain parameters.
Inputs:
image- Input image tensorfilm_profile- Base film stock for defaultsrenderer- "fast" or "monte_carlo"black_white- Convert to grayscale before applying grainseed- Random seed for reproducibility
Optional Parameters:
mu_r- Mean grain radius (default: 0.07)sigma_r- Grain radius standard deviation (default: 0.025)filter_sigma- Gaussian filter sigma in output pixels (default: 0.8)mc_samples- Monte Carlo samples per pixel (default: 100)zoom- Output resolution multiplier (default: 1.0)
Outputs:
image- Image with film grain applied
Profile Info (Helper)
Displays information about a selected film profile. Useful for exploring available options.
Film Profiles
Black & White Films
| Profile | Description |
|---------|-------------|
| tri-x | Kodak Tri-X 400 - Classic high-contrast B&W |
| hp5-plus | Ilford HP5 Plus - Versatile all-purpose film |
| t-max-100 | Kodak T-Max 100 - Fine grain, sharp |
| t-max-400 | Kodak T-Max 400 - Fine grain at higher speed |
| t-max-p3200 | Kodak T-Max P3200 - Ultra high speed |
| delta-100 | Kodak Portra 400NC - Smooth, fine grain |
| delta-400 | Kodak Portra 400NC - Classic portrait film |
| pan-f-plus | Fujifilm Acros 100 - Ultra-fine grain |
| acros | Fujifilm Acros 100 - Modern fine grain B&W |
Color Films
| Profile | Description |
|---------|-------------|
| portra-160 | Kodak Portra 160 - Fine grain portrait film |
| portra-400 | Kodak Portra 400 - Classic portrait film |
| ektar-100 | Kodak Ektar 100 - Vibrant colors, fine grain |
| superia-400 | Fujifilm Superia 400 - Everyday color negative |
| gold-200 | Kodak Gold 200 - Warm consumer film |
| ultramax-400 | Kodak Ultramax 400 - High-speed consumer |
Example Workflow
Load Image → Film Grain (Basic) → Save Image
Or for more control:
Load Image → Film Grain (Advanced) → Adjust Parameters → Save Image
Performance Notes
- Fast Renderer: Typically completes in <1 second for HD images
- Monte Carlo Renderer: Can take 30-60 seconds depending on sample count and image size
- First Monte Carlo run includes JIT compilation overhead
Troubleshooting
"Module not found" errors
Ensure all dependencies are installed:
pip install numpy numba Pillow scipy
Slow first render with Monte Carlo
This is expected - Numba JIT compiles on first use. Subsequent renders will be faster.
Grain looks too strong/weak
Adjust the mu_r parameter (grain size) or use the zoom parameter to scale the effect.
License
MIT License - See LICENSE file for details.
Credits
Based on the GrainRX film grain synthesis library. The Boolean model implementation follows research from computational photography literature.
For issues and feature requests, please visit the GitHub repository.
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.