Welcome to the Sagelight Editor Blog

This blog is for things currently happening in Sagelight.

Useful links

Homepage: www.sagelighteditor.com

My direct e-mail: rob@sagelighteditor.com

Direct link to the free 30-day trial: www.sagelighteditor.com/install_trial.exe (22  megs, All Windows versions).

Sagelight Editor Facebook Page An informal place to post your pictures, thoughts, and ask questions.  It was just set up — please “like” it so it can get it’s own username.

Youtube Page (with video tutorials — can be accessed on the discussion board, too): http://www.youtube.com/sagelighteditor

Current Sale:

The $39.95 (lifetime version) sale is coming to a close, ending around the 1st of January. Sagelight is currently being split into a Standard and Enthusiast/Pro version.  The current version is the Enthusiast/Pro version, though the current pricing reflects the standard version.  Once the split is complete, the Enthusiast/Pro version will be $79.95.

Cinepan Player available for General Release (with Installer & Uninstall)


Cinepan Player Version 2.4 General Release. Now with Installer, Screensaver Installer, and Uninstall

Now that the Cinepan Player has received some feedback, I’ve written a proper installer and uninstall.

Now you can just download

www.sagelighteditor.com/cinepanplayer/CinepanPlayerInstall.exe (20 Megabytes)

and the following will happen:

  1. It will install the Cinepan Player.exe program, into the programs folder or folder of your choice
  2. It will install 6 sample Cinepan Panoramas in the default Cinepan Image Directory (or a directory you choose.  The Default is Documents\Cinepan Player
  3. It will place CinepanPlayer.scr into the screensaver directory.  You can have the installer set this as the default screensaver, if you desire.
  4. It will also place an Uninstall program into the Windows Registry so you may uninstall it.

Cinepan Player is a Windows program and requires at least 1 Gig of memory (2 is better).



New with Version 2.4

A few new things with version 2.4, and why it’s good to upgrade

  • Cinepan Images Directory.  There is now a specific directory where Cinepan Images are placed.  You can change this directory to anything you wish.
  • Refresh Images List.  You can refresh the image list when you add Cinepan Images.
  • Bug Fixes:
    • 300 Megs of Development Memory.  Cinepan Player was taking 300 Megabytes of your memory because I forgot to remove some development test-code.
    • Reduced Memory Usage.  There was also some other memory the Cinepan Player was using that it didn’t need to use.  The memory profile is now much lower.
    • Radiobuttons when Adding your own panorama.  There was a bug where the “PGR” button was filled in when you set a TEXT or JPEG file as output.
    • Exits Cleaned up.  When you exited the main UI (not in Screensaver Mode), sometimes the program quit instead of returning to the main menu.  Now everything returns to the main menu.

The Cinepan Player now puts the version in the Window.  It still identifies itself as a beta.  I will remove the beta tag after a few reports.

Please send me Feedback!

This is the first general release of the Cinepan Player.  This is the version I will be uploading generally to the Internet, outside the scope of the discussion board and this blog.

Your feedback will be great!  This version is meant to be run as a general program and you shouldn’t need to know anything about your directories or how to run uninstalled programs – it should all work just fine as a normal Windows program from this point.

Thanks for the feedback so far on the previous beta versions.

Getting New Panoramas

Remember the Cinepan Flickr Group

You can download a number of Cinepan Images from there, and I will be adding more in the next few days.



The Cinepan Player is now where I want it to be for now, finally!  I am very happy with it.  I will address bugs as they come up, as well as future additions. 

The Cinepan Player is free and based on donations, and I will add more to it as more people use it.

LanczosResize.exe – a free program


LancsozeResize.exe – A prototype for an Image Processing Library Package

In the development of the CinepanPlayer, I needed a resize function to resize the images, and I used the multi-CPU 192-bit Lanzcos Resize function I wrote for Sagelight.

Since this resize (in the Cinepan Player) is done on fairly large images at run-time, I needed something fast, so I borrowed the code I wrote in SSE assembly language from Sagelight.

Since I made it a generic class for the Cinepan Player, I wrote a sample LanczosResize.exe which anyone can use.

It’s a command-line program that will take your JPEG image, resize it to the dimensions you specify in the Lanczos Algorithm you choose.  It will then write out a new JPEG with the new dimensions in the JPEG Quality desired (or the default quality of 80).

More about how to use it a couple sections down

A prototype/beta for an Image Processing Library Package

For a while, I have been thinking about releasing an Image Processing Library Package that you can use on the command line, or, perhaps, calling it from your program as a .DLL.

Sagelight has a number of fast, multi-processing, intensive algorithms that are very useful, and the Lanczos resize is just one of them.  I thought I’d put out LanczosResize.exe as a prototype and see what people think.

There are many other functions such a package could perform, such as Gaussian Blur, Unsharp Mask, Definiton, Focus, 13 different types of Saturation, Vibrance, Curves (i.e. specify the curve points and color space), Color Space conversion, other resizing methods, fill light, noise reduction, edge detection, various analyses, HDR, Lens Blur, Box Blur, Median, Surface Blur, Contrast (various methods), Brightness, Gamma, image merging (i.e. Linear, Soft Light, Color, etc.), and so-forth.

Most of these items are very useful for professional projects and image analysis, as well as hobbyists looking to perform functions on their images for various reasons – for example, a quick Gaussian Blur or Noise Reduction prior to an HDR pass, and that sort of thing.

With a robust library, putting functions together can do amazing things to the image, too.

It’s just a thought, and I thought I’d release the Lanczos resize to see what people think and to get feedback.

Using Lanczos Resize

Since it’s a prototype of a possible larger program, the options are pretty simple:

LanczosResize <inputfile> <outputfile> –L<LanczosType> –Size <WidthxHeight>/<%NewSize> [-quality <JpegQuality>]


  • InputFile = your input file, such as MyJpeg.jpg (must be a JPEG image)
  • OutputFile = your outputfile, such as MyNewJpeg.jpg.
  • LanczosType = 2,3,5, or 8.
  • Size. This can be <width>x<height> (such as 1024×768) or a percent value, such as 50% (or 43.145% for better accuracy).  Using a percent value maintains the aspect ratio of the image, where using widthxheight creates an image of exactly those dimensions.
  • Quality.  This is optional and specifies the output jpeg quality, and is a number from 1-100.  100 is the best quality (and highest file size).  Default quality is 80, which is a good high-quality output.


  • LanczosResize MyFile.jpg MyFile2.jpg –l5 –size 40.3%. Resizes MyFile.jpg to 40.3% with Lanczos 5, and writes this image out to MyFile2.jpg (with default Image Quality 80).
  • LanzcosResize MyFile.jpg MyFile2.jpg –l3 –size 1024×768 –quality 30. Resizes MyFile.jpg to exact dimensions 1024x.768 with Lanczos 3, writing the output to MyFile2.jpg with specified JPEG Quality 30%.

About the Lanczos Resize Algorithm

The Lanczos Resize algorithm is a multi-CPU algorithm that resizes your image in 192-bit floating point.   It runs very fast and is one of its nice features.

About Lanczos Types

Different Lanczos Types are great for different things:

  • Lanczos 2.  This is a good general resizing option.  It is more like a bilinear resize and can avoid edges and artifacts.
  • Lanczos 3.  Lanczos 3 is a sharp resizing, and is the best option for downsizing images.  It keeps sharp and avoid artifacting.
  • Lanczos 5.  Lanczos 5 is even sharper than Lanczos 3, and is the best option (imho) for making an image larger.  Using Lanczos 5 to make images smaller is also a great option, and will create very sharp images; however, you may see some artifacts.
  • Lanczos 8.  Lanczos 8 is a great option, too.  It is sharper than Lanzcos 5, and is great at keeping small details that even Lanczos 3 or 5 might miss.  However, watch for “ringing” artifacts/ghosting with Lanczos 8.

JPEG Quality

The Jpeg Quality of the resizing is set to the highest quality, 4x4x4.  This creates slightly larger files, but keep the color fidelity and definition very high.  Most image editors, for example, tend to use 4x2x2, which does reduce details.

Download LanczosResize.Exe

LanczosResize may be found at www.sagelighteditor.com/LanczosResize.exe and is about 400k in size.

It runs on Windows in Console mode and may be used in batch files for resizing.


LanczosResize.exe is free to use for non-commercial purposes and may not be included or used as part of any distributed program.  It is for personal use only.

If you wish to use it for professional uses, or in a distributed package, write me at rob@sagelighteditor.com


There is no warranty.  It is a free program with no promises, as with all free programs.  I have tested it and it runs great on my system.


As mentioned, LanczosResize is a prototype and a test for a larger set of available functions I am looking at releasing; perhaps as a hybrid of free functions for personal use, and something with a licensing fee for professional/distribution usage.

I’m also looking at the idea of distributing free programs and making income solely on donations. Let me know what you think about that, too.

A Programmer’s Blog Entry

I thought I’d write a little about programming today.  Usually, I use the blog for announcements and such, but maybe expanding a little will be a good thing.  Let me know what you think.

I was going to post this on the discussion board, but I thought it might be of more general interest to discuss some programming topics.  So, I am posting it here (it automatically gets sent to the discussion board, too).

Some thoughts on Sagelight and Programming

There have been a few general discussions on the discussion board (www.sagelightforum.com) about computer programming and Sagelight, and I thought I’d discuss a few things here.

It’s an interesting concept, especially for such a large program consisting of well over 800,000 lines of code, 2500 little graphic icons, and years of hard work.

A decided to write on a few topics after finishing the Cinepan Player.  This is because the Cinepan Player is a much smaller project than Sagelight, and as a fairly large program that is also a discrete piece of code, it really showed me a few things that I’ve learned with Sagelight and that could be great for discussion.

I Learned a Lot More Than I Expected Writing Sagelight

When I started Sagelight, I had already had a long career in being a consultant, programming on various projects.  I have a great reputation for being able to solve hard-to-find problems that other people have looked at with little or no success, as well as writing very complex, fast code in large systems.   I have worked on all aspects of products, both enterprise level and low-level embedded.

I really shine when it comes to crisp, fast, and sophisticated algorithms

That’s one of the reasons I decided to write Sagelight.  The idea of writing a Lightroom/Photoshop-level program was very intriguing and fun.  Plus being very into Photoshop and mathematics,  as well as photography, it was a great fit.

New Technology is Stunning, and Keeps me on my Toes

Because image-processing algorithms are so intensive, one of the first things I realized when writing Sagelight was that I really needed to understand new technology.  For example, a few years earlier, you never used the floating-point processor unless it was really necessary.   But, that’s old-school.

Another thing you avoided was using memory, whenever possible.  In a way, that’s still the case, but now CPUs have such a high-level of cache, you want to use some memory but not a lot of memory – which is more of a radical change in the thought process than some people might think.

The Bokeh Was Slow Until I Realized Something about Caching

I actually wrote the Bokeh function twice.  The first pass was just too slow.  It was taking too long, and I just couldn’t figure it out.  I profiled the code, and it really should be working much faster than it was.

Then I realized it wasn’t the instructions I needed to be looking at, but the memory usage.  Tthe Bokeh algorithm was looking at maps for the shape of the blur.  These maps are necessary and they are stored in memory. With a high-enough radius, the memory usage (being N^2, which is always a time-killer) slowed down the process far too much.

I wasn’t quite sure what to do.  But, then I realized that there really is a lot of core memory available in the CPU cache, but not enough to store these shape maps.

Then I decided to compress the maps and decompress them on-the-fly. The Cpu cache can store the compressed maps. Now, when you’re doing a Bokeh function, Sagelight is literally decompressing data constantly as it creates your final image.  Most of the time, the CPU never leaves the cache and reads from the memory where the maps are stored, even though the code itself is referring to it constantly.

It turns out that with newer CPU architecture, and the available memory in the Cache , as well as the speed of the Cache Memory, it was much, much faster to actually perform a decompression algorithm than to just store the shape maps uncompressed!

Sagelight has made me a much better programmer

Without realizing it, Sagelight has made me into a much better programmer.  As the lines of code mounted into the hundreds of thousands, you need to get organized – very organized.

Re-Usable Code

I started writing Sagelight in a highly Object-Oriented manner.  First of all, I love object oriented programming.  It’s just great, and is what makes it possible to write something like Sagelight as one person (not to mention some great, free libraries out there like TiffLib, Jpeg, and others) where it just wouldn’t be possible a few years ago.

Even though at least 30-40% of the code is written in multi-processing SSE assembly language (where OO has little impact), making the code very OO based is key in keeping track and re-using all of that code, SSE, assembly, or C++.

With such an object-oriented structure, I was able to write code to be very re-usable.  In many companies, you see a lot of cut-and-paste strategies, where code is just stolen from one part of the project and copied into another area with just one little tweak.

I have seen this over and over, and also seen it become the bane of the project over and over, too.

Thank goodness I had that experience to know beforehand what a trap copying-and-pasting code becomes when used as an easy way to re-use code because you don’t want to take the time to expand on a function that other functions are already calling.

Being able to write such re-usable – and expandable code, such as through set() and get() functions, as well as virtual functions – becomes a way to build on what you’re doing rather than having it become confusing as cut-and-paste actions do.  That is one of the things you tend to ‘know’ as a programmer, but sometimes don’t want to follow because it is time-consuming up-front, which is always…well… a bummer.

The reason many programmers do this sort of thing in company environments is because of deadlines – they will often go to their manager and state that we need to change function X() to support this new set of code.  But, the manager knows that to change function X() just a little means testing the entire system over again, which means going upstairs to let them know more money will need to be spent just to make a little change.  So, the manager says to the programmer, “Just cut-and-past function X() and call it function X2().  The manager just saved the company some money in the short-term, but cost the project a lot – possibly the entire set of code, as doing this as a common strategy causes code to crash in on itself.

Don’t get me wrong.  I used to be that way, too, and writing Sagelight – because of the needs of such a project and the desire to make it work (that is, suddenly being manager, programmer, and that guy upstairs)  – caused me to really think about long-term strategies and form some great processes that make such an incredible difference.

Unwavering Standards

I’ve also learned that certain standards are there for a reason, even when they seem like they are in the way.

Every time I write a new piece of code, such as the Cinepan Player I just released – or even a smaller item as part of a larger project like Sagelight – I am faced with the same issue.

It goes like this: if I just want to get this function done, I can just go with it and write it out.  But, if I want to start it right, by writing the exception handlers, implement get() and set() functions, and so-forth, the set up for it will take hours – hours with zero tangible results.

So many times, it’s just easier to dive right in and start programmer. 

And I pay for it every time.

Here’s a good example.  When I wrote the Cinepan Player, there were also a number of smaller items I wrote as console programs (i.e. non-Windows; just DOS/Cmd).  These were meant as temporary programs for the creation of the Cinepan Panoramas.

But, then I realized that I needed to add support for adding your own panoramas, and these programs were not only needed for the overall program, but needed to be put inside the program itself.

Suddenly, I needed this code in the main program. I couldn’t just take a console program with all of its printfs() and global variables (I didn’t OO it, either. Sad smile ) and fit it into the Cinepan Player.   Also, I had an error mechanism that just bailed to DOS on any error, where now it would need to clean up memory and present the error message to the user in a nice Windows box.

I then had to go through these programs and create a class structure, wrap the printfs() into a virtual function (which was easy, since I luckily wrote a printf() wrapper for the Windows libraries I use a long time ago), and then (the hard part) go through the entire set of code and make sure the error-handling caught any error and piped it back to the main program instead of bailing to DOS.

This took me nearly two days when, if I had just stuck with what I know to be absolute standards from the beginning, it would have taken me just a couple hours, because that’s what you get when you follow good coding standards.  

I think I might do a post just about this subject, as it turns out to be very interesting, especially when taking a look at even small practices, such as making sure there is only one exit point of a function, or wrapping all memory allocations and that sort of thing.

More in a couple days

I actually intended this blog entry to be on something else.  I wanted to compare the Cinepan Player code to writing modules for Sagelight, but I guess I had more of a stream-of-consciousness going on than I thought.

Please send me your feedback!  Let me know if this is a good place to post this sort of blog entry (or not).  I can always keep it on the discussion board.  But, I’ve wanted to do a ‘programmer’s’ blog’ for a long time now (to discuss some interesting things (to me, anyway) going on with programming, in general, as I create Sagelight).

Cinepan Flickr Group – Download Cinepan Images, and Upload Your Images


Cinepan Flickr Group

I just started the Cinepan Flickr Group.


In this group, I have placed a number of Cinepan Images – some new ones just today.  WIth the new version of the Cinepan Player, you can download any of these jpegs (as the ‘original image’) and just place it in the Cinepan Player directory.  The Cinepan information (such as Horizon, Angle, Description, Thumbnails, etc.) is embedded in the JPEG.

Uploading Your Own Cinepan Images

Now that you can use the Cinepan Player to create your own Cinepan Images, you can create a JPEG that you can upload to the group.

One of the reasons I wrote the Cinepan Player – in addition to a kind-of fascination with the idea of ‘Cinematic’ panoramas – is because people take such great panoramas these days, especially since cameras make it so much easier.

With an amazing immersive effect, putting your panorama into the Cinepan Player will make it look great!

To download the Cinepan Player (it’s free), go to www.sagelighteditor.com/cinepanplayer.

People have upload such great images edited with Sagelight Editor as well as other image editors, and I am excited to see what happens in this group, too!

Cinepan Player 2.1 (Beta) – Add Your Own Panorama


I am happy to announce the release of Sagelight Cinepan Player 2.1.

Based on requests, you can now add your own panorama to the Cinepan Player.

All you need to do is to load your image and set a few settings, such as the Horizon Angle, Description, and so-forth, and you’re ready to go!

Easy JPEG Format

In addition to the standard .PGR format (which encrypts your jpeg), you can also create a simple JPEG that you can upload to photo-sharing sites for people to download.  The Cinepan Image information is embedded in the JPEG itself, so that’s all you need.

You can also create a simple text file so that describes any JPEG file and add it to the Cinepan Player.

Add Your Panorama Interactively

You can add your panorama easily by simply loading it, and the Panorama will start displaying, moving back-and-forth.  You can then set the Angle, Horizon Angle, and other elements in realtime to get the best look for your Panorama.

When you’re done, you can write out any of the three formats (a text file, a new JPEG with a set JPEG Quality, or a PGR file that stores your JPEG).

Then just put the images into the Cinepan Player directory.

Download the new version of Cinepan Player

You can download the new version at www.sagelighteditor.com/cinepanplayer/CinepanPlayer.exe (it will show as version 2.1)

If you have not downloaded the Cinepan Player before, also download one of the two .PKG files to get started with some Cinepan Images:

www.sagelighteditor.com/cinepanplayer/CinepanPlayer.pkg (55 Megs — this has 27 Cinepan Images in it)


www.sagelighteditor.com/cinepanplayer/CinepanPlayer_lowres.pkg (25 Megs – this has 25 Cinepan images in it at a lower resolution, though it’s not really noticeable).

Put either of these files in the same directory as the Cinepan Player and it will extract them automatically.



Beta’ Tag added – Sometimes A lot of Code Looks Simple!

As it turns out, the addition of the code to add your own Panorama was just as much or more code as the main program.  This is because I wanted to make it very simple, and, as most programmers know, the more simple it looks, the more code there is underneath it all!

I labeled it a ‘Beta’ version to make sure all of the kinks or worked out.

I also put up a Flickr Group Page, which I will announce in the next post.

Getting back to Sagelight Development

Now that I have the Cinepan Player out in a way where people can add their own panoramas, hopefully it will grow.

But, I know many people are wondering if I am drifting away from Sagelight development in favor of the Cinepan Player.  As I described on the discussion board, not at all – and, in fact, this will help drive Sagelight development for many reasons, the least of which is the Cinepan Player being an outlet for work done with Sagelight editor.

I’m really looking forward to seeing your panoramas, and I think they will look fantastic in the Cinepan Player.

I am back to Sagelight development now, and the Cinepan Player will be a nice place for me to use Sagelight – all images I post for the Cinepan Player are edited in Sagelight for contrast, noise, color, etc.


Sagelight Cinepan Player (free)


(Delicate Arch Sunset, 180º Cinepan Panorama in Widescreen Mode)


Introducing Sagelight Cinepan Player

I am pleased to announce the Sagelight Cinepan Player, a free Windows program that uses the Sagelight Cinepan Perceptual algorithm to gently show amazing, high-resolution panoramas on your desktop, either as a standalone application or elegant screensaver.

For various reasons, I took a break from Sagelight Image Editor development and write the Sagelight Cinepan Player Application/Screensaver.   It gave me a creative outlet and a nice break to re-energize for Sagelight development.  The Cinepan Player, by itself, was a hefty (but discrete) project, and it allowed me to use a lot of technology and other techniques I developed for Sagelight Image Editor, such as multi-processing code, SSE4, CPU caching, and streamlined multi-threading (not always easy).

Check out the main page http://sagelighteditor.com/cinepanplayer/ and the UI help section showing all the controls

Panoramas have an incredible immersion quality (i.e. feels like you are there) to them, and a perceptual algorithm was developed to enhance this effect and to show panoramas as widescreen (when, even at 16×9, the tend to become very distorted on the edges).

Based on an algorithm I wrote a few years ago, my interest was recently renewed in the technology when I showed my previous work to a friend.  In short I was astounded (described more below) because of how the technology in the last few years has made the idea of displaying slow moving panoramas corrected in real-time suddenly more compelling and realistic.  On my high-contrast 16×9 monitor, it feels like I am looking through a window!

(see Enter Sagelight Cinepan Player below, for more information).


I spent the last 2-3 months working on a revamp of the Cinepan Algorithm, which is a perceptual algorithm (vs. QTVR, etc.) created to enhance the incredible immersion quality with panoramas.

Cinepan Player uses many of the algorithms I wrote for Sagelight Editor, working with multiple CPUs and SSE4 code to bilinearly resize and anti-alias the image in realtime, for each and every frame.

The code was written to multi-thread fluidly, using as little processor time as possible, while taking advantage of the multiple CPU, SSE4, and high-speed memory now in most computers – Cinepan play will still run with older computers, too (see various settings).

note to SSE2-only users: Cinepan Player runs on any computer with SSE2 or above.  Please let me know of any problems – it’s sometimes hard to be absolutely sure ALL SSE4 instructions are out of the SSE2 code!

The result is an elegant presentation of immersive panoramas, slowly revealing themselves in the desktop in incredibly high resolution, and without the edges and “jaggies” typical of panoramas moving as slow speed.

Where to Download the Cinepan Player

    Download both the CinepanPlayer.exe and CinepanPlayer,pkg file (either the high-resolution or low-resolution package) into any directory you choose and run it – the package will self-extract.

    From there, you can turn it into a screensaver by simply copying CinepanPlayer.exe to c:\windows\system32\CinepanPlayer.scr (and then setting it as your screensaver in the Windows Control Panel).

    Click here for more information and instructions on Downloading the Cinepan Player

Free, but based on Donations

I am giving Cinepan Player away for free, with no strings attached.  I want the Cinepan Player to be an elegant screensaver-type program, and don’t want to put nag screens in it or prompt for donation in the runtime screen.

There is a current release set of 27 Cinepan Images, as well as 3 specialty image (I will make a separate blog post about that, as well).

I have hundreds lined up, but they take anywhere from 1-2 hours to process (due to various issues, as they need to be noise-reduced, color adjusted, and – in many cases – touched up due to visible seams, etc.)

Also, I have many plans for additions, including automatic downloading, wallpaper sets, your own Panoramas, and so-forth, as donations come in.

As with Sagelight Editor, the programming and Cinepan Image creation is very intense.  It just took 2 1/2 months to revamp the first version I wrote a few years ago – it actually came out very well, so well, in fact, that it is hard to see the work behind it; the multi-cpu threading (which was very difficult to achieve), the real-time bilinear resizing, and so-forth.  And that’s as it should be, because the more elegant the program come out, the more simple it looks!

There’s also the Bandwidth issue, as with a download package of 65 megabytes, my server costs will be high, and any donations will help there, too.

Donations Help Sagelight Image Editor (free version)

I have decided to give away a free version of Sagelight Image Editor – the standard version, without many of the Pro Features.  To do this, I need some support, and I am giving away the Cinepan Player to help with the cause.

To donate to the Cinepan Project, go here

I will post more when I set up the website.

The following is from the main Help Web Page

See the help page at http://sagelighteditor.com/cinepanplayer – I will set up its own website soon, as donations come in.


360º Val Senales Ski Resort, Italy, Fullscreen Mode– Realtime Video plays in high-resolution 1080p (1920×1080) as it appears on the desktop. (Music included is in the Youtube Video, not the Cinepan Player Program)


An Introduction to Amazing, Immersive Panoramas

I’ve long been fascinated with panoramas.  They are great as still images, and even better (in most cases) as moving images.    As a 2-dimensional image, the panorama — when viewed through a panorama player that performs a lens correction on every frame, such as QTVR, Cinepan Player, and others — provides an immersion quality feeling just like you are there.

Add to that higher resolution than video, and a gently panning, smooth algorithm, and you have the Cinepan Player.     I original developed some pieces of the Cinepan Player a long time ago, and my interest was recently renewed when I realized that the new technology in monitors and computers in the last few years made panoramas even more compelling and interesting.

With 16×9 high-contrast monitors, the feeling like you are really there is much stronger than before.  I believe a lot of this has to do with mixing the art of the Still with that of Motion — the motion provides the 3-d experience, and the 2-d still provides the artistry.  Much like an impresionist painting, which can draw you in (also with an immersion quality to it) even more than an actual picture, the elegant movement of a panorama can bring you in more than a video.

I’ve put a particular emphasis on non-360 degree videos (Cinepan Player works with both types), as there are 10 times (or more) many great non-360 degree panoramas than there are full-360-degree ones out there.  This is discussed more below.



Higher Resolution than a Video

The reason panoramas can draw us in is two-fold.   Not only do we have the artists view of the world with the still picture, leaving or imagination to fill in the gaps in our own way, but the panoramas provided with the Cinepan Player are much higher resolution than a video.  I have provided two examples via Youtube, but the quality difference is really amazing.

The slow movement of the panorama with the artistry of the image itself provides an amazing you-are-there quality that has to be experienced.

Sagelight Cinepan Player

Sagelight Cinepan Player is the result of my fascination with showing art from other artists (as well as my own), and the idea of creating artistic works involving technology. In this case, it is the art of the still mixed with motion on your monitor, elegantly and slowly panning across the screen, showing breathtaking views as the panorama is slowly revealed.

Working on the Cinepan Player has been a great project over the last few months, and has allowed me to flex some programming muscle, as well as use many of the high-end (SSE4, multi-processor) code I developed for Sagelight.


Apache Canyon, Arizona (180º) – Widescreen example. This is a good example of the Cinepan Perceptual Algorithm working. (Music in the Youtube Video only, not the program itself). This is an example of non-360º images working in the Cinepan Player; there are far more incredible non-360º degree panoramas than 360º panoramas, and the Cinepan Player deals with them nicely, rotating them slowly and coming to a gentle stop. Plays in 1080p (1920×1080), try it fullscreen.


The term “Cinepan”

The term Cinepan is short for “Cinematic Panorama”, which means a panorama that is automatically played back in a way that makes it look like a camera is moving, as opposed to a still photograph.  That is to say, in terms of the Cinepan Player, the idea is to create a true cinematic experience, including high-resolution images and artistic presentation. The term “Cinepan” came from the term “Cinemagraph” (which is a seamlessly looping GIF with an aesthetic effect, usually (but not always) a clip from a movie — high-resolution cinemagraphs being one of my next projects and additions to the Cinepan Player). I decided the term  “Cinepan” worked well as a description for the aesthetic display of a moving panorama.

Also embedded in the term “Cinepan” is the aesthetic (i.e. the artistic element) and the “art of the reveal”.  In most panoramas, when displayed as a Cinepan (i.e. moving image on the screen), each frame reveals a new piece of the image that is an individual piece of artwork and describes itself in its own terms.  This is why most panoramas are not 360-degrees, because there are almost always portions of a 360-degree image that wouldn’t work due to trash cans, wires, and such.

With just about all Cinepan panoramas, the feeling of being there is enhanced as each new frame reveals a new part of the image that focuses on that aspect of the scene.   In a few 360-degree cases, there might be a part that doesn’t “self-describe”, but these are short-lived as the panorama rotates back into a more interesting part of the image.



(Main UI Screen, or Configuration Menu when run as a Screensaver)


Panorama images vs. Panoramic Images

A “Panoramic” image is one that shows a very wide angle of a scene, such as landscapes, canyons, city, and so-forth.   Panoramic images are usually very wide and give more of a feeling the scene as it was taken.

The above image is both a panorama and a panoramic image (note how the shoreline is curved – this is what makes this image a panorama; it is not lens corrected, which allows the Cinepan Player to show it as if it was shot as a panning video camera).

A Panorama is similar to a panoramic image, except that it is “uncorrected”, and can often be much wider/longer than a panoramic image.  A Panorama can be anywhere from 120-degrees to 360-degrees, much of the time impossible to view on the desktop without being distorted.  This is why many panoramas have so many bends and curves in them, because they have not been run through a lens-correction process.

When a panoramic image is a panorama (i.e. not corrected for a flat perspective), we can also play it as a Cinepan Image.

In terms of programs like Quick-Time Virtual Reality player and other panorama viewers, as well as Sagelight Cinepan Player, this allows the Panorama display in real-time, with each and every frame corrected to the angle in which you’re viewing the image — that is, as you move the image, it is just like you’re turning your head, or a video camera is panning over a scene.

My Obsession with Moving Panoramas, the Cinepan Algorithm,and Cinepan Player vs. QTVR, etc.

One day (about 10 years ago), I decided to write an algorithm to correct panoramas.  I was getting into Panorama photography (stitching together image after image), and thought it would be something nice to have in my code library, and was interested in the math involved.  I set out to see what I could do with the algorithm and just generally play with it.

I particularly didn’t like the “jaggies” that would appear in sharper images, especially when you moved them slowly.  I wanted to get a more aesthetic experience, rather than a manually controlled one.

One of the biggest reasons for wanting to explore panorama coding was because, as it turns out, most great panoramas are less than 360-degrees, and it was hard to view them in the QTVR or other manual setting.

I also wanted to explore showing them widescreen, which caused problems.  The wider a panorama is viewed (i.e. the higher the overall viewing angle), the more the edges became very distorted.   I didn’t like the idea of looking at an amazing panorama with a sweeping vista in a 3×4, or even 16×9 box.  But, once I moved them wider, the edges distorted so heavily that the aesthetic experience definitely suffered.

Cinepan Algorithm

Along the way, I tinkered with the algorithm and found a way to perceptually translate the image to help with the edge distortion, which also helped with the aliasing (i.e. jagged edges) problem.    Also, at the time, the QTVR algorithm was still under patent (maybe it still is?), so moving to a perceptual algorithm allowed me to release the code.

Cinepan Player was written to work in real-time in high resolution screens, and without much of the aliasing that can occur with the QTVR (i.e. technically correct) algorithm.   Correcting each frame takes a lot of CPU power, and to remove the aliasing requires even more.  This can be difficult on high-resolution panoramas and/or monitors.

Slow-moving, Sweeping Images

Sagelight Cinepan was written to provide a very smooth, slow-moving image in an aesthetic atmosphere.   With QTVR/other players, moving very slowly tends to increase the aliasing/jagged edges, which is why most images are not high-resolution (the higher the resolution of the image, the more jagged edges appear). Sagelight Cinepan was designed to show high-resolution images on high-resolution monitors with little or no jagged edges.

360º and non-360º Images

As it turns out, most panorama images are not 360-degrees.   It’s a rare panorama that looks great in 360-degrees; there’s always a trash can, parking lot, or some other uninteresting part of the image that makes a 360-degree panorama less than artistic.    Cinepan Player is designed around these images and plays them very smoothly for a great aesthetic effect.

Cinepan Player also plays 360-degree images, many of which are just great on their own, too! see 360-Degree Images in Cinepan Player


(Paris as seen from the Eiffel Tower)


Suddenly, Sagelight Cinepan (previously HD Panorama) More Relavent than Ever!

You may remember Sagelight Cinepan Player as “HD Panorama”.  This was released a few years ago, but then my attention moved to Sagelight Image Editor.

Nasa and Disney Connection

A long time ago, I showed Nasa and Disney the panorama program with the Mars and Moon pictures I turned into panoramas (many 360-degree).  They really liked them.  Nasa had offered funding for the project, but then Google (who was financing this sector) said they’d have to derail some funds, so that offer was withdrawn for lack of funding.  Google later offered to put this panoramas in the Google Moon and Google Mars programs.

Disney offered to put these panoramas on their DVD of Roving Mars, but only had a $40,000 budget for the entire DVD and couldn’t offer any support.   They also offered high praise for the HD Panorama program and the Moon/Mars panoramas I showed them, but $40,000 was just too small of a budget to offer even the equipment I needed to make them for the DVD.   I probably should have taken Disney up on the offer, but there were complications getting the DVD out, and I don’t know if they ever released Roving Mars on DVD anyway.

Enter Sagelight Cinepan Player

A few months ago, I was showing HD Panorama to a friend, and I suddenly realized that HD Panorama is more relevant than ever, and much more interesting now than it was before.  There were so many compelling reasons (listed below), I sat down and turned it into Cinepan Player.

Here are the reasons that not only is Sagelight Cinepan Player more compelling and relevant now, but much more improved:

  • 16×9 Monitor & Television Format.  The very first thing I noticed when showing this to my friend is that the HD Panorama program was now on a 16×9 monitor and just looked tremendously better. Since the idea of the Panorama is a wide view, 16×9 worked perfectly.  Also, the higher contrast of newer monitors and televisions just made it look that much better, crisp, and sharp
  • Faster Processor Speed and Anti-Aliasing.  At the time, even with multiple processors, it took a lot of CPU power to run the Panorama Program, and it couldn’t really anti-alias well when viewed at high resolution.  You may noticed that if you take a QTVR image and make it full-screen, it typically doesn’t run in real-time (it’s slow).  The real-time correction process in a panorama display uses a lot of CPU instructions.  Now, with higher CPU speeds, performing a bilinear-resize on each and every frame is possible and does not make your computer hot!
  • More Panoramas Available Now.  When I wrote HD Panorama, panoramas were still fairly new and hard to find.  Now, there are thousands of great panoramas people have created and can be included in Sagelight Cinepan Player.
  • Graphic Design.  Another thing I noticed when I showed HD Panorama to a friend was that something wasn’t right.  The panoramas looked nice, but there was an aesthetic quality missing.  In the original version, the borders and text were BIG.    I guess times have changed, and moving to a thinner border, and a smaller and more aesthetic font made all the difference.
  • Better Bandwidth on the Internet.   When HD Panorama was first written, downloading packages of 50 Megs or more took much longer, and was also more expensive to host.  Now, 50+ megs takes very little time and costs very little to host, making it easier to download all of the Cinepan Image files.
  • Panoramas More Popular then Ever and Panorama Functions in Every Camera.  Almost all cameras (including phones) come with a “Panorama Mode”.    Now that panoramas are more popular than ever, more people are taking them and posting them with ease.  Many come out at a professional level by hardly trying and with little or no post-processing.  In the future, Cinepan Player can have an interface to allow you to put in your own panoramas (see Supporting Cinepan Player in the Sidebar).
  • Sagelight Image Editor.  I was able to use many of the routines I wrote for Sagelight image editor (not to mention the experience) to provide fast and accurate functionality, written in multi-processing SSE2 and SSE4 code; not something that was available at the time HD Panorama was written.  This also allowed me to process each Panorama image in Sagelight Editor to work better in the Cinepan Player (i.e. noise reduction and other items, such as sharpening without creating noise).


(The Matterhorn, Swiss Alps)


Cinepan Player is Free, but Could use Some Support

I am happy to give Cinepan Player away for free.  It is a great project to work on, and I am very please with the way it came out.  Each panorama included in Cinepan Player is time-consuming, and I will do more if enough people like Cinepan Player.

Please consider supporting Cinepan Player.  It is 100% free, but your donations will help keep it going and allow me to find and create more Cinepan Images, and also to make an interface to allow you to put in your own panoramas.

Please enjoy Cinepan Player!

Rob Nelson

Sagelight Workflow: Creative Flow vs. Work Flow




A hot topic on the discussion board lately has been about workflow — general workflow and also the Sagelight workflow with its differences between editors like Photoshop & Lightroom (which are different in of themselves).

WIth the Sagelight Workflow, for example, the Undo/Redo Brush figures prominently in terms of selective or local editing vs. image-wide editing that you get when you move sliders around and such (when the masking is off anyway).

A lot of this discussion is based on what has happened with the last release as well as what is about to happen with the next release – there are new additions with the UI coming, the Sagelight format, as well as a number of other things that are aimed specifically at getting all this power in Sagelight to be more visible and even easier to use.



Work Flow vs. Creative Flow

I was just thinking about the idea of workflow and the HDR image I just posted (shown above). (Click to see the a larger version, before & after, and HDR tips.). 

There were two elements to working with this image (and most images, in general):

1. Addressing the ‘needs’ of the image.  A need of the image can be defined as something that needs to be done to the image before you can be creative with it – such as getting rid of noise, because noise tends to become amplified the longer you leave it in and continue editing. A need can also be lens correction, general brightening, etc. – the general idea being to get the image beyond what it needs and into your creative control.

I decided to wanted to HDR the above image. At this point, there were things that needed to be done, such as using the HDR Details, and other functions, in order to achieve what I was looking to get out of this image. I am, of course, in creative control of these things, in terms of what they do and how much they apply themselves to the image, but this is now a ‘need’ of the image to get what I want. I need to HDR it. I also need to perform some noise reduction on it (because it started as a medium-quality JPEG with lots of noise). Afterwards with a second pass of NR, I don’t need to do it; that’s creative because I want to smooth it; it’s not a specific need of the image.

2. Being spontaneously creative. After I did the initial HDR and noise reduction, then I could become creative with the image. A little dodging and burning, definition, Soft Glow — whatever I decided to do in a spontaneous creative mode. I will probably talk more about this in other posts as I get into the ‘Sagelight Workflow’, because this is why Sagelight was created and precisely why it works the way it does — the second part of the Apply Button blog post (The Apply Button in Sagelight (Part I –Functional Layer editing) is about the incremental/discrete editing approach. I’ve been looking for a name for this type of emphasis on creative digital editing, and the idea of being a free-flowing creativity really starts to describe it well.

With a creative flow, I can just decide what I want to do. The lower-left of the HDR image above looked too bright, so I lowered the light there selectively. Either through Dodging and Burning or just by using the RGB sliders and then the Undo/Redo Brush (or, I could mask the area, feather the mask, and do it dynamically) — that is, there are many ways. In fact, I don’t remember because it doesn’t matter. I get my ways of doing things down and just do them. In Sagelight, there are quite a few ways to get the things you’re looking for.  That’s what makes it creative and fun — the idea of just ‘doing’ things however they occur. Version 5 will have an option to give you an entire list of what you did, btw!

3. Repeating the Process. Once I perform the creative process, there may be more ‘needs’ of the image vs. creative things I want to do. For example, using HDR, definition, sharpening, etc. — this can bring out color noise and other unwanted details. So I might have to address these things selectively. Also, after I think I am done, I might inspect the image and see things I don’t like, such as some edges created by the HDR process (which is common in bright areas, but typically easily removed through NR, Bokeh, the Smoother, and the upcoming Surface Blur). So, I am back to looking at the things the image needs to not have distracting elements.

Once I do that, I might take a break from it — even come back the next day — and see if my creative process takes me anywhere else or if I think it’s just fine the way it is. For me, taking a break between images is key, so I can desaturate my brain from my edited picture and see it objectively, more as if I wasn’t the one who worked on it and was actually seeing it for the first time, with fresh eyes.

WIth a free-flowing creative session, I can often take the same image and come out with two very different result images. Sometimes it’s hard to decide which I like better, even when they look dramatically different.


I’m posting this topic for a couple reasons. One is to get that difference out there in terms of workflow — the needs of an image vs. the creative flow, in terms of ‘work’ flow and ‘creative’ flow.

As the issue of the ‘Sagelight Workflow’ becomes more prominent with the next release, I want to make sure these issues are properly bifurcated. I read an article a while back talking about the ‘Lightroom Look’, which was not a shot at Lightroom, but a recognition that sometimes our edited images can start look the same because we do the same things over and over to every image.

For me, the ‘same’ things we do to our images are what the image needs and not letting the creative flow automatically be the ‘work’ flow.

After that, it’s about being creative!

The second reason I mention all this is because, well, this is part of the discussion on the Sagelight Workflow!