PractiLight offers a light-weight solution for relighting a prompt-generated image using a simple control signal - direct illumination. On contrary to prior work, we support relighting various image domains, including portraits, sketchs, landscapes, anime, and many more !
- intrinsic (https://github.com/compphoto/Intrinsic)
- diffusers
- transformers
- torch
- yaml
- opencv
- gsoup
- bpy (optional, used for programatically creating a control signal)
Note: you need these packages installed, we recommend a virtual environemnt such as conda or mamba to do so.
Edit the prompt and all other settings in config.yml, and run:
python relight.py config.yml
This will create an output file (it is a 2D disparity map) that you can load on blender using our addon.
Open booth.blend with Blender 3.6, and follow the animation bellow:
Note: pressing the "run" button in the begining simply loads the addon, then the "Load Depth Map" will appear in the menu.
You can swap the light type, and change the roughness in the node editor. In fact, this way of creating a control signal is just a suggestion. Feel free to use any input as control. For better results it should resemble a direct irradiance map (this is Blender's output in the above video).
After you render, save the file to disk, and this is your new control signal. Now edit the parameter called "control_signal" in config.yml, and make it point to the rendered file from blender from step 2.
Finally, run the same command again:
python relight.py config.yml
Which will generate the relit result.
- Manual illumination
- Support sequence of control signals (from folder)
- Automatic illumination
- Reproduction of dataset / benchmark
If you find our work useful, please consider giving a star ⭐ and a citation.
@misc{erel2025practilightpracticallightcontrol,
title={PractiLight: Practical Light Control Using Foundational Diffusion Models},
author={Yotam Erel and Rishabh Dabral and Vladislav Golyanik and Amit H. Bermano and Christian Theobalt},
year={2025},
eprint={2509.01837},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2509.01837},
}