Photo-Reactor Recipes
Re: Photo-Reactor Recipes
EDIT: I recommend you use the "35mm Film-Simulator" effect I posted below this post instead of "RestoreBlownHiLites". The film-sim has an improved version of the "RestoreBlownHiLites" within it.
----------------------------------
"RestoreBlownHiLites"
This VFX is used on photos that have blown high-lights.
It will attempt to restore color as well as make the high-light roll-off look pleasing and 'film-like'.
It should work well with default-settings on most images.
by JEL 20130611
----------------------------------
"RestoreBlownHiLites"
This VFX is used on photos that have blown high-lights.
It will attempt to restore color as well as make the high-light roll-off look pleasing and 'film-like'.
It should work well with default-settings on most images.
by JEL 20130611
- Attachments
-
- RestoreBlownHiLites.zip
- (20.5 KiB) Downloaded 723 times
Last edited by JEL on Fri Jun 14, 2013 10:15 am, edited 1 time in total.
DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
JEL's 35mm Film-Simulator 2013 v1 (20130614)
This flow is only possible thanks to the wonderful Photo-Reactor
I couldn't even begin to do this in Gimp or Photoshop (I've tried, never got anything I was satisfied with)
It is a photo-effect, not an art-effect.
It is used to enhance photos taken with digital cameras. In my own opinion it does an absolutely amazing job at it
You can throw almost any image at it and it will come out with something that looks good. It's especially good for portraits, but don't hold back on it with other types of photos (even extremely under-exposed photos can sometimes be saved by it, as well as moderately over-exposed). This also means it's good for batch-operations (unless your taste in looks is completely different from mine, then it's likely that more than 9 out of 10 will be keepers)
It isn't suitable as video-effect, since it changes the light based on the content of the image (so a video-sequence, unless very static, would likely flicker badly)
I hope you'll find it as useful as I do myself
JEL
This flow is only possible thanks to the wonderful Photo-Reactor

I couldn't even begin to do this in Gimp or Photoshop (I've tried, never got anything I was satisfied with)
It is a photo-effect, not an art-effect.
It is used to enhance photos taken with digital cameras. In my own opinion it does an absolutely amazing job at it

You can throw almost any image at it and it will come out with something that looks good. It's especially good for portraits, but don't hold back on it with other types of photos (even extremely under-exposed photos can sometimes be saved by it, as well as moderately over-exposed). This also means it's good for batch-operations (unless your taste in looks is completely different from mine, then it's likely that more than 9 out of 10 will be keepers)
It isn't suitable as video-effect, since it changes the light based on the content of the image (so a video-sequence, unless very static, would likely flicker badly)
I hope you'll find it as useful as I do myself

JEL
- Attachments
-
- JEL'sFilmSim2013v1(20130614).zip
- (30.04 KiB) Downloaded 740 times
DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
I tried it, very moody. I am looking forward to all the photo-effects that will come out of photo reactor. I love the arty potential but sometimes you need image editing!
- Attachments
-
- PICT0196a_Finalweb.jpg (137.05 KiB) Viewed 13356 times
Re: Photo-Reactor Recipes
I hope that's a good thingRachel wrote:I tried it, very moody.

DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
3 scripts ready for use in the Reactor-Script block:
The first sample the 3 primary colors and their value.
The second sample the 3 primary colors but not their value (this script is limited to 8bit, which is only relevant to know if/when PR goes 16bit)
The third sample the 3 primary colors AND their 3 complementary colors (giving max weight to the 3 primaries) and their value.
The first sample the 3 primary colors and their value.
The second sample the 3 primary colors but not their value (this script is limited to 8bit, which is only relevant to know if/when PR goes 16bit)
The third sample the 3 primary colors AND their 3 complementary colors (giving max weight to the 3 primaries) and their value.
Code: Select all
//Sample the primary colors
//JEL2013
void primaries(image &img)
{
int width = img.width;
int height = img.height;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
// one way to get color from pixel
pixel color = img.Pixel(x,y);
if(color.r > color.g && color.r > color.b)
{
color.r = color.r;
color.g = 0;
color.b = 0;
}
if(color.g > color.r && color.g > color.b)
{
color.r = 0;
color.g = color.g;
color.b = 0;
}
if(color.b > color.r && color.b > color.g)
{
color.r = 0;
color.g = 0;
color.b = color.b;
}
// average the colors
// int intensity = (color.r+color.g+color.b)/3;
// int intensity = color.r;
// safest and fastest way to set color to pixels (clamps the value to 0..255)
img.SetRGB(x, y, color.r, color.g, color.b);
}
}
}
void main()
{
// get the image from input socket
image img(INPUT);
// sample function call
primaries(img);
// send the image to output
img.SetOutput();
}
Code: Select all
//Sample the primary colors
//JEL2013
void primaries(image &img)
{
int width = img.width;
int height = img.height;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
// one way to get color from pixel
pixel color = img.Pixel(x,y);
if(color.r > color.g && color.r > color.b)
{
color.r = 255;
color.g = 0;
color.b = 0;
}
if(color.g > color.r && color.g > color.b)
{
color.r = 0;
color.g = 255;
color.b = 0;
}
if(color.b > color.r && color.b > color.g)
{
color.r = 0;
color.g = 0;
color.b = 255;
}
// average the colors
// int intensity = (color.r+color.g+color.b)/3;
// int intensity = color.r;
// safest and fastest way to set color to pixels (clamps the value to 0..255)
img.SetRGB(x, y, color.r, color.g, color.b);
}
}
}
void main()
{
// get the image from input socket
image img(INPUT);
// sample function call
primaries(img);
// send the image to output
img.SetOutput();
}
Code: Select all
//Sample the primary and complementary colors
//JEL2013
void desaturate(image &img)
{
int width = img.width;
int height = img.height;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
// one way to get color from pixel
pixel color = img.Pixel(x,y);
if(color.r > color.g && color.r > color.b)
{
if(color.g > (color.r / 2) || color.b > (color.r / 2))
{
if(color.g > (color.r / 2) && color.b < (color.r / 2))
{
color.r = color.r;
color.g = color.g;
color.b = 0;
}
if(color.b > (color.r / 2) && color.g < (color.r / 2))
{
color.r = color.r;
color.g = 0;
color.b = color.b;
}
if(color.g > (color.r / 2) && color.b > (color.r / 2))
{
color.r = color.r;
color.g = 0;
color.b = 0;
}
}
else
{
color.r = color.r;
color.g = 0;
color.b = 0;
}
}
if(color.g > color.r && color.g > color.b)
{
if(color.r > (color.g / 2) || color.b > (color.g / 2))
{
if(color.r > (color.g / 2) && color.b < (color.g / 2))
{
color.r = color.r;
color.g = color.g;
color.b = 0;
}
if(color.b > (color.g / 2) && color.r < (color.g / 2))
{
color.r = 0;
color.g = color.g;
color.b = color.b;
}
if(color.r > (color.g / 2) && color.b > (color.g / 2))
{
color.r = 0;
color.g = color.g;
color.b = 0;
}
}
else
{
color.r = 0;
color.g = color.g;
color.b = 0;
}
}
if(color.b > color.r && color.b > color.g)
{
if(color.r > (color.b / 2) || color.g > (color.b / 2))
{
if(color.r > (color.b / 2) && color.g < (color.b / 2))
{
color.r = color.r;
color.g = 0;
color.b = color.b;
}
if(color.g > (color.b / 2) && color.r < (color.b / 2))
{
color.r = 0;
color.g = color.g;
color.b = color.b;
}
if(color.r > (color.b / 2) && color.g > (color.b / 2))
{
color.r = 0;
color.g = 0;
color.b = color.b;
}
}
else
{
color.r = 0;
color.g = 0;
color.b = color.b;
}
}
// average the colors
// int intensity = (color.r+color.g+color.b)/3;
// int intensity = color.r;
// safest and fastest way to set color to pixels (clamps the value to 0..255)
img.SetRGB(x, y, color.r, color.g, color.b);
}
}
}
void main()
{
// get the image from input socket
image img(INPUT);
// sample function call
desaturate(img);
// send the image to output
img.SetOutput();
}
DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
1 extra primary-color sampler script (ready for use in the Reactor-Script block)
It samples the 3 primary colors, and their value, and then purifies them.
In photos and video this script is probably more useful than the 3 previous (you can achieve some very good color-grading with this one in your flow
)
This 'flow' will also work on video.
EDIT:
The color-noise that was present in the previous version of this script (in this post) has been cleaned up
Now it is completely noise-free.
It samples the 3 primary colors, and their value, and then purifies them.
In photos and video this script is probably more useful than the 3 previous (you can achieve some very good color-grading with this one in your flow

This 'flow' will also work on video.
EDIT:
The color-noise that was present in the previous version of this script (in this post) has been cleaned up

Now it is completely noise-free.
Code: Select all
//Sample the primary colors
//JEL2013
//c = (a>b) ? a : b; //returns whichever is greater, a or b.
void primaries(image &img)
{
int width = img.width;
int height = img.height;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
// one way to get color from pixel
pixel color = img.Pixel(x,y);
int intensityR = 0;
int intensityG = 0;
int intensityB = 0;
if(color.r > color.g && color.r > color.b)
{
intensityR = color.r - ((color.b > color.g) ? color.b : color.g);
}
else
{
intensityR = 0;
}
if(color.g > color.r && color.g > color.b)
{
//color.r = color.r - (color.g * 0.5) - (color.b * 0.5);
intensityG = color.g - ((color.r > color.b) ? color.r : color.b);
//color.g = 0; //(color.g == color.r) ? color.r : 0;
//color.b = 0; //(color.b == color.r) ? color.r : 0;
//color.g = (color.b < color.g) ? color.b : color.g;
//color.b = (color.g < color.b) ? color.g : color.b;
}
else
{
intensityG = 0;
}
if(color.b > color.g && color.b > color.r)
{
intensityB = color.b - ((color.r > color.g) ? color.r : color.g);
}
else
{
intensityB = 0;
}
if(color.g > color.r && color.g > color.b)
{
//color.g = color.g - ((color.b > color.r) ? color.b : color.r);
//color.r = (color.r == color.g) ? color.g : 0;
//color.b = (color.b == color.g) ? color.g : 0;
//color.r = (color.b < color.r) ? color.b : color.r;
//color.b = (color.r < color.b) ? color.r : color.b;
}
if(color.b > color.r && color.b > color.g)
{
//color.b = color.b - (color.r * 0.5) - (color.g * 0.5);
//color.b = color.b - ((color.r > color.g) ? color.r : color.g);
//color.r = (color.r == color.b) ? color.b : 0;
//color.g = (color.g == color.b) ? color.b : 0;
//color.r = (color.g < color.r) ? color.g : color.r;
//color.g = (color.r < color.g) ? color.r : color.g;
}
// average the colors
// int intensity = (color.r+color.g+color.b)/3;
// int intensity = color.r;
// safest and fastest way to set color to pixels (clamps the value to 0..255)
img.SetRGB(x, y, intensityR, intensityG, intensityB);
}
}
}
void main()
{
// get the image from input socket
image img(INPUT);
// sample function call
primaries(img);
// send the image to output
img.SetOutput();
}
DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
JEL's 120mm Film-Simulator 2013 v1 (20130629)
It is a photo-effect, not an art-effect.
It is used to enhance photos taken with digital cameras.
In my own opinion this version is superior to the 35mm version I did, but I didn't want to call it version2 since it does things a bit differently from the 35mm version.
it doesn't quite replace the 35mm version, since each give a slightly different feel to the output-image. So I guess you should just choose whichever you think looks better with your photos
The 120mm version is slightly less neutral than the 35mm version. It modifies your image a bit more than the 35mm version does. However, in my own opinion the results are in almost all cases more pleasing (but that's obviously a matter of personal taste
) with only a few cases where the 35mm version gave the better image.
Be aware that the effect updates the look based on what you can see in the preview-screen, so if you zoom in (by using 1:1 for example) the look may change quite a lot. Zoom out fully to check the colors and tone, and only zoom in to 1:1 when checking how grainy the image will become.
It isn't suitable as video-effect, since it changes the light based on the content of the image (so a video-sequence, unless very static, would likely flicker badly)
i hope you'll find this version an improvement
JEL
It is a photo-effect, not an art-effect.
It is used to enhance photos taken with digital cameras.
In my own opinion this version is superior to the 35mm version I did, but I didn't want to call it version2 since it does things a bit differently from the 35mm version.
it doesn't quite replace the 35mm version, since each give a slightly different feel to the output-image. So I guess you should just choose whichever you think looks better with your photos

The 120mm version is slightly less neutral than the 35mm version. It modifies your image a bit more than the 35mm version does. However, in my own opinion the results are in almost all cases more pleasing (but that's obviously a matter of personal taste

Be aware that the effect updates the look based on what you can see in the preview-screen, so if you zoom in (by using 1:1 for example) the look may change quite a lot. Zoom out fully to check the colors and tone, and only zoom in to 1:1 when checking how grainy the image will become.
It isn't suitable as video-effect, since it changes the light based on the content of the image (so a video-sequence, unless very static, would likely flicker badly)
i hope you'll find this version an improvement

JEL
- Attachments
-
- JEL'sFilmSim120mm(20130629v1).zip
- (17.55 KiB) Downloaded 616 times
DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
Jel, thanks for your work on this. I tried it and liked how it improved my image. I am not sure how to work the controls though. It looks like one can turn off and on different effects. I like the simplicity but I wanted to make sure I am not missing anything!
- Attachments
-
- P1100619a_jel-pipweb.jpg (92.12 KiB) Viewed 12690 times
Re: Photo-Reactor Recipes
Hi Rachel
Thanks 
Yes, you're right, they are on/off switches to give the effect a bit of flexibility


Yes, you're right, they are on/off switches to give the effect a bit of flexibility

DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
Re: Photo-Reactor Recipes
JEL's Medal Maker 2013
(20130706)
This is a virtual effect for Photo-Reactor ( http://mediachance.com/reactor/index.html )
--------------------------------------------
Create a medal with a picture on it.
(medal included in virtual box)
STEP#1:
Make sure to set main-image to empty-image with a width of 300 and a height of 500.
If you have already loaded an image, then uncheck and then recheck the 'Create empty image' check-box (in the menu to the right when you have selected the box 'main image')
STEP#2:
Load your portrait (or your pet, or something else) and select between gold, silver or bronze.
(This is all done in the menu to the right, when you have selected the Winner's Medal' box. Alternatively you can unwrap the virtual effect box and work in the flow-window)
JEL
20130706
(20130706)
This is a virtual effect for Photo-Reactor ( http://mediachance.com/reactor/index.html )
--------------------------------------------
Create a medal with a picture on it.
(medal included in virtual box)
STEP#1:
Make sure to set main-image to empty-image with a width of 300 and a height of 500.
If you have already loaded an image, then uncheck and then recheck the 'Create empty image' check-box (in the menu to the right when you have selected the box 'main image')
STEP#2:
Load your portrait (or your pet, or something else) and select between gold, silver or bronze.
(This is all done in the menu to the right, when you have selected the Winner's Medal' box. Alternatively you can unwrap the virtual effect box and work in the flow-window)
JEL
20130706
- Attachments
-
- GoldMedal20130706.zip
- This is the effect box
- (107.67 KiB) Downloaded 520 times
-
- This is what the effect looks like (This medal features Arkie)
- GoldMedal.jpg (50.32 KiB) Viewed 12450 times
DAP (AOPs): http://jelstudio.dk/DAP/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/
PhotoReactor (flows, effects and scripts): http://jelstudio.dk/PhotoReactor/