Skyfill

3 min read

Skyfill allows you to do fill in the gap in the sky in high-resolution images. I used it for all my own drone panoramas.

Most drones (UAVs) cannot look straight up to photograph the sky above them. As a result, spherical panoramas made with drones tend to have a gap in the sky. Some drones, like my DJI Mavic 2, can fill in this gap automatically while generating a preview. However, when I stitch the photos myself to get a better quality output, there is still that sky gap. I got fed up with having to choose between a nice sky or a nice overall image, so I did what developers do and made my own software: Skyfill.

This page is about Skyfill. I have a different article about my drone panorama workflow.

Before applying Skyfill
Original image, before applying Skyfill
After applying Skyfill
Skyfilled image

Thanks to Ork de Rooij for his help getting the pixels right.

Using Skyfill

Skyfill is a console program. This means that it won’t show a graphical user interface, it’ll just show you some text. The simplest way to run Skyfill is just skyfill somephoto.jpg.

Mirror Ball

The sky part can be made a bit more interesting by creating a so-called mirror ball that reflects the ground. This results in a mini planet version of the panorama hanging in the sky. To see what it looks like, check these tulip fields and be sure to look up.

Run Skyfill with skyfill -mirrorball input-file.jpg to enable this mode.

Drag & Drop on Windows

The simplest way to use Skyfill on Windows is to just drag & drop the image onto skyfill.exe. The way I personally use it is with a shortcut on my desktop, which I can drop images onto. When you drop somephoto.jpg onto it, it will create somephoto_filled.jpg in the same folder.

To get the mirror ball, you can edit the shortcut to run skyfill.exe -mirrorball.

Options

Run skyfill -help to get a list of all the options that are available to you:

-adobergb: Treat the input image as AdobeRGB. Without this option, sRGB is assumed.

-blend percentage: Skyfill blends the generated sky into the photo, to prevent a hard edge between the generated and the real sky. This parameter determines how large the blend will be. For example. with skyfill -blend 20 photo.jpg you will get a soft blend that is 20% of the height of the sky gap.

-lower-sky percentage: Lowers the sky boundary, in percent of detected sky gap height. Use this if you want to tweak the result of the automatic sky gap detection. For example, use skyfill -lower-sky 20 photo.jpg to lower the sky by 20%.

-sky pixels: Height of the sky gap in pixels. Disables automatic sky gap detection. For example, to only fill the top 100 pixels, use skyfill -sky 100 photo.jpg.

-quality percentage: Set the JPEG quality of the output file. Valid values are 0-100, and 90 is the default. Only used when actually writing JPEG, of course. For example, to write larger files with pretty much lossless compression, use skyfill -quality 100 photo.jpg.

-quiet: Disable info-level logging, and only show warnings and errors.

Debug/developer Options

These options probably aren’t that interesting for producing nice photos, but are very useful when working on Skyfill itself.

-bounds: a debugging option. This draws two horizontal lines, below & above the blend area.

-debug: Enable debug-level logging, so you get a little bit more information about what’s going on behind the scenes.

-samples: Show sample points as red pixels.