Sky Dolly v0.16 - Free Flight Recorder & Replay, Location Management

Thanks for making this awesome tool available to the flightsim community!

1 Like

For Architects - Plugins

The following explains some “technical background” of the development of Sky Dolly. It may also be interesting for those who want to know how to tweak the installation for minimal installation size.

Plugin Architecture

Since Sky Dolly v0.12 also the so-called modules are implemented as plugins. Modules provide the major functionality, such as the logbook, the formation recording / flying and newly also the locations.

A “plugin” is a set of functionality that is completely optional at runtime: it extends the base functionality of the given application if present, but otherwise can be completely removed. Where “present” means that the plugin (typically a “dynamically loaded library”, DLL) is located in some well-known location, a directly typically called the “plugin directory” (or directories).

Technically speaking: the plugin implements some well-defined interface - the “contract” between the application and the plugin, so to speak. The contract defines the expected input and output (result or functional behaviour in general).

One such example is the simple export interface of Sky Dolly, which defines exactly one method to fullfil (implement) for each export plugin.

Once a plugin faithfully implements such an interface it can be loaded at any time during runtime - on demand. As opposed at application load time, where a missing DLL typically prevents the application from loading.

Efficient Memory Management

This implies that - since a plugin is completely optional - that it can also be unloaded after use. And this is exactly what Sky Dolly does: not only are import / export plugins unloaded after use, but now (since Sky Dolly v0.12) also the modules.

Especially in the “normal (non-minimised)” UI mode this leads to another measurable reduction in RAM usage (*):

Whereas the previous v0.11 was still using 98% of RAM when launched in “normal UI” mode (compared with the reference v0.10 with 100% relative RAM usage) the current v0.12 is now only using 77% of RAM (again, relative to the reference v0.10 usage). Or almost a quarter less than the v0.10!

The same figures in absolute numbers:

(*) All measurements were made with an empty logbook, in order to make them better comparable between each other (which leads to even slightly better numbers than posted in a previous post above). The RAM usage was simply measured with the Windows task manager multiple times.

Architectural Benefits

Not only can a plugin architecture lead to less RAM usage (when plugins are unloaded after use, that is), but is also leads to a better software design (“architecture”). The functional parts are strictly hierarchical - and hierarchy is good when it comes to software design, as “mutual dependencies” (“A calls B and B calls A”) are prevented.

In fact, especially with a plugin architecture such “mutual dependencies” are “physically impossible”: an application would not even “link” when an attempt from the main application was made to directly call a function implemented in a plugin (or generally speaking: to call “higher level functionality” from a lower level).

Or simply put: “Spaghetti code” is simply not possible.

Tweaking the installation

As plugins are optional by definition one can also remove them from the corresponding plugin directories. Don’t need that import plugin? Delete it! No need for the new location module? Remove it!

Not only does this regain some storage space, but may also improve the user experience itself (by not providing functionality in the user interface that is never needed).

Sky Dolly stores its own plugins in a subdirectory called Plugins. The plugins are further organised into the following subdirectories therein:

  • Connect - yes, even the connection with the flight simulator (currently: MSFS) is implemented as a plugin
  • Export - export plugins (CSV, GPX, IGC, JSON, KML)
  • Import - import plugins (CSV, GPX, IGC, KML)
  • Module - the modules which provide the major functionality (logbook, formation, location)

Unless the connect plugin is removed Sky Dolly pretty much remains functional (however Sky Dolly even launches - with much reduced functionality - without a connect plugin ;))

Community

No software architecture would be worth anything if the actual functionality wouldn’t let you do what you are trying to achieve, in an efficient manner! So the overall goal of Sky Dolly is still to simply provide the best functionality with the biggest usability (ease of use, “least amount of clicks”).

I do understand that especially the formation module is not exactly intuitive enough just yet (respectively people have different expectations, like that “AI aircraft automatically follow their user aircraft”). I am also still working (eventually ;)) on the online manual, with both a “reference manual” and “goal-based tutorials” (“How do I get XYZ done!”).

However feedback such as the following “tutorial video” is very encouraging and rewarding. The video gives a quick overview about Sky Dolly’s functionality, including the new location module:

The video is shared with kind permission from the author, Pilot Studd. Go check out his other videos, too.

Can a sky dolly replay video be exported to a video player? I would like to watch the video without being in MSFS.

1 Like

Use e.g. https://obsproject.com/ for this. It is also open source and freely available. It supports all sorts of video encoders and also supports GPU encoding.

I just got skydolly. This might be the best mod in the game.
I’m going to have a lot of fun with this and still am learning what it can do.

1 Like

For Challengers - Create Your Own Landing Challenge

Location Module

The newly introduced Location module allows you to capture your own favourite locations, based on your current flight location in the flight simulator. In combination with the various flight import options this lets you easily create your own landing challenges.

Can You Beat A Real-World Pilot?

Whether you want to „butter that landing to perfection“ or try the same landing with strong crosswinds and worse weather conditions, Sky Dolly lets you do so with the following easy steps. Once you have selected and exported your favourite destination and flight from either flightaware.com or the equally popular flightradar24.com (refer to the previous post above how to export a flight as KML file from flightaware.com) do the following with an active flight in the flight simulator:

Capture the Landing Location

And that‘s it already. You may now add an optional description, airport identifier (e.g. an ICAO identifier) and country.

Any time you select this entry in the locations table and press the Teleport button you are ready to go for another approach.

In fact, that is exactly how I did the Santos Dumont approach.

Pro tip: the imported altitudes are usually „standard pressure altitudes“ and may not exactly reflect the actual real-world altitude above ground. In the flight simulator you may fine-tune the location (altitude) even more, with the „slew“ mode. Once the desired position has been set press the Capture button in Sky Dolly.

Share Locations

Did you know that you can also copy location coordinates given in various decimal and DMS notation flavours and easily paste (with CTRL + V) them into the Location module? A new table entry is automatically created for you.

Go have a look here in the World Discovery forum or any website like https://flightspots.co/ with collections of interesting places to fly!

Feature Overview v0.12

The following video shows a very nice overview over the latest Sky Dolly v0.12, including the new Location module. The video is commented in German:

Shared with kind permission of the author. @JayDee6281 regularly reports about latest developments, aircraft, scenery and various add-ons for MSFS. You may also check out JayDee‘s other videos on his JayDee YouTube channel.

I love Sky Dolly and I want to send videos of my recordings of approaches and landings to my friends in common video formats e.g mpeg2.
Any ideas?

1 Like

Refer to the same question and its subsequent answer here:

Hi Steeler,

Sky Dolly is a great piece of software I use on pretty much every flight in order to record take offs and landings – except when I forget to start (or sometimes stop) recording.

In order to avoid the latter, rule based automated recording would be quite helpful. So Sky Dolly would start / stop recording according to custom, predefined rules, like:

  • Start recording when plane is on ground, landing lights turn on AND no recording is active already, then stop recording X minutes after gear up event
  • Start recording when plane is in the air, gear goes down and no recording is active already, then stop recording X minutes after flaps up

Any chance to have something like that in a future release?

First of all, feature request (and also bug issues) may be added here:

(free github.com account required)

This would be the place for more extensive discussions. I do my best to at least give a timely answer. But Sky Dolly being a project developed in my free time I cannot of course guarantee any “service level agreements”.

In general I don’t announce or comment on new features anyway ahead of time, in order not to necessarily raise expectations. In this case however I cannot deny that those exact thoughts are in my own personal “backlog”.

But again, when - and if - such a feature would arrive is at my own discretion.

And thanks so much for your comments about Sky Dolly, very much appreciated :slight_smile:

1 Like

Minimal UI & Usability

I am happy to see that Sky Dolly’s Truly Minimal UI that has been introduced with Sky Dolly v0.11 a couple of months ago is inspiringly fresh and leading the pack here:

The user interface is designed with usability in mind: every non-necessary mouse interaction is “optimised away” and also callable with keyboard shortcuts, while still trying to retain an intuitive experience.

Example:
You can move the time slider at almost every moment (except during recording, for obvious reasons) without having to first press either the stop or pause button. Or in other words, skipping back in time during replay is as easy as dragging the time slider to the desired position.

That doesn’t mean that there is nothing more to improve: I have quite a to-do list.

Talking of which: the next release v0.13 is expected to arrive shortly after the long-awaited 40th anniversary of Flight Simulator, after having ensured final compatibility (Sky Dolly keeps working flawlessly with the current beta) and added support for the new aircraft models.

While being rather a smaller, incremental update on existing functionality it will increase interoperability with another very well-known open source application. I will pinpoint it more closely on the map once the release is ready - enough said. So stay tuned :wink:

Meanwhile I get dozens of encouraging comments, the most recent comment to my “cinematic Sky Dolly trailer” which made me feel very happy:

Wow, thank you so much! This and other comments make me so proud and motivate me to give back to the community, with more amazing features and improvements to come!

Performance & Resource Usage

Due to the underlying plugin architecture the minimal UI not only means “minimal screen estate” (while still providing the most essential recording & replay functionality, including automatic persistence into the logbook of the recorded flight), but also minimal RAM usage: every module (implemented as plugin) is unloaded from memory when not in use.

So Sky Dolly uses as few as 8 MiB of RAM when launched in minimal UI mode - including a fully functional logbook (a SQLite database) and full replay & recording functionality.

Being implemented in modern C++ the code runs “as close as possible to the metal” (= the CPU). Memory is deterministically released right after usage ends (= no garbage collection, but RAII).

In simple words: Sky Dolly is taking up as little of your precious CPU and RAM resources as possible while still providing accurate and smooth replay.

This is also achieved by only recording and replaying those simulation variables that are actually changing their value, further sparing MS Flight Simulator the extra work of “setting the same value over and over again” (with no physical or visual impact).

Talking about performance: here is a very impressive “flight show” performance:

CGAviator is a real Hawk pilot and he recorded this fantastic acrobatic flight with Sky Dolly: “Weeks of practice, careful choreography, multiple camera angles. [
] Just Flight Hawk T1 solo display overhead amazing Duxford scenery.”

Shared with kind permission of the author. Also check out CGAviator’s other amazing videos on his YouTube channel !

Sky Dolly is open source and freely available here:

Source code is also available here:

1 Like

Happy 40th Anniversary, Microsoft Flight Simulator!

I am happy to announce Sky Dolly v0.13 (“Dapper Daher”) which introduces location import & export.

Location Import & Export

The new location import & export plugins make it not only possible to exchange user points with Little Navmap (by @albar965), but also allows to literally import all POIs, photogrammetric cities, airports and more from free POI databases such as Little Navmap - MSFS POI Database (hosted on flightsim.to).

The engine state (start, shutdown, keep) can now also be stored together with locations, making it effectively possible to define your own custom starting points, for instance your own helipads.

Locations can now also be conveniently filtered by keyword search, type (system, user, imported), category and country.

In addtion Sky Dolly ships with 100 system locations, fine-tuned and validated GPS coordinates, most of which now come from https://flightspots.co/ (unfortunately this website notifies visitors that it will “terminate its radar services”). It has never been easier to reach or take-off from beautiful spots such as this one:

Further improvements

  • Reduction of exported Sky Dolly CSV file sizes (by rounding to two decimal digits - GPS coordinates are rounded to 6 decimal digits)
  • The [Sky Dolly installation directory]/Resources/migr/Locations.csv file is now optional and can be deleted (it is used to migrate the system locations into newly generated logbooks)
  • All aircraft types from the 40-th anniversary update have been added to the aircraft selector combo box (when importing a flight); third-party aircraft are automatically added as they are recorded
  • The Flight Recorder (by @NguyenQHy) CSV import plugin now also imports the propeller lever position
  • Keyword search text fields now have a clear button
  • Performance improvements and bug fixes

The complete changelog is available on github.com.

Sky Dolly is open source. The latest binaries are available at:

3 Likes

For Helicopter Pilots - Create Your Personal Helipad

MS Flight Simulator does offer a couple of helipads “out of the box”. But what if you wanted to spawn at your own helipad, anywhere in the world? And possibly even in “cold and dark”?

In this tutorial we are going to define our own custom Rega helipad in Zurich airport (LSZH) and store it as user location in Sky Dolly respectively as imported location when importing from Little Navmap. The following simple steps will lead us to our goal:

  • Define the helipad GPS coordinates
  • Fine-tune (“update”) the location (helicopter attitude, “on ground”, engine)

TL;DR

  • In the Location module (press key F3) paste the GPS coordinates into the table (CTRL + V)
  • Alternatively import a Little Navmap user point CSV file
  • Teleport to the newly inserted location, adjust the aircraft position and attitude in MS Flight Simulator as needed
  • In Sky Dolly, select the desired location table item and press the Update button
  • Update the other location attributes as needed: category, country, identifier and engine action

Helipad Coordinates (Step 1)


 With Bing Maps

Open Bing Maps (or any other map service) and find the desired helipad. As already hinted at in this example we are going with the Rega helipad in Zurich Airport (LSZH). A simple search with e.g. “zurich airport rega” will quickly reveal the Rega Center, just next to the beginning of runway 28.

The helipad is easily found when enabling “satellite view” and zooming in, so in this example:

Fetching the actual GPS coordinates depends on the actual map service, but in most cases it is as easy as:

  • Right-click on the desired position
  • Copy the GPS coordinates

In Sky Dolly


Now switch to Sky Dolly, activate the Location module (press key F3) and insert the new location:

  • Make sure the location table has focus (click on any row)
  • Paste the GPS coordinates with CTRL + V

That’s it! The GPS coordinates from the clipboard have been pasted into the location table, by creating a new entry with the default altitude, indicated airspeed, engine action and on ground values.

In fact, thanks to the underlying GeographicLib Sky Dolly understands a whole range of coordinate flavours, such as decimal coordinates and various degrees, minutes, seconds (DMS) variants. So the following coordinates would all work

  • 47.458143, 8.571866
  • 47° 27’ 29.3142" N, 8° 34’ 18.717" E
  • And various other DMS variants, with or without comma separator

Hint: activate the User filter in order to only see your user locations:

Before we go to step 2, the fine-tuning of the location, we will show another way to define your helipad coordinates. Perhaps you already have a collection of helipads in Little Navmap, or any other source that provides user point CSV files.


 With Little Navmap (User Point CSV)

  • Add a new user point (CTRL + SHIFT + click) at the desired position
  • Conveniently we can also already define the user point type, here: Helipad, and provide the other information as needed

You can repeat those steps for as many helipads as required. Or possibly you already have some helipad database file that you can import into Little Navmap (in case it is already in Little Navmap CSV format, you can also import it directly into Sky Dolly, as shown below).

Once all helipads are defined as user points:

  • Choose Userpoints / Export CSV

  • Choose the export options as desired
  • Click OK
  • Choose any suitable location for the CSV file to be exported

In Sky Dolly


Now switch to Sky Dolly and:

  • Choose File / Location Import / CSV (Comma-Separated Values)
  • Select the previously exported CSV file
  • Select Little Navmap as CSV format flavour

Optionally we can already define the default country to Switzerland, depending on whether that value is defined in the Little Navmap user point CSV data or not. We will refine the default altitude and indicated airspeed later, so we can keep the default values for now as is.

  • Click on Import
  • Activate the Location module (press F3)

Hint: activate the Import filter in order to only see the imported locations:

And indeed, our “Rega Helipad” has been successfully imported, including its description, country and identifier (as set in Little Navmap).

Fine-Tune Helipad Location (Step 2)

Now we are going to place our helicopter as precisely as possible onto the helipad and refine all location settings as needed. Therefore:

  • Launch MS Flight Simulator
  • Select a location anywhere in the world, but best near the desired helipad (such that scenery data can already start downloading)
  • Fly

Before we teleport to our helipad location we are already manually going to change two location properties:

  • On ground: checked
  • Inidcated airspeed: 0 knots

With those settings we are already placed properly onto the ground (regardless of the location altitude) and we should not be moving (*).

(*) Depending on the state of the scenery download and/or your previous flying conditions your aircraft might still be moving erratically, especially as the digital elevation model (DEM) is being refined. Simply wait a little bit until the scenery has been downloaded and simply teleport again to the same location.

Once we clicked on the FLY button in MS Flight Simulator, we teleport to our location with Sky Dolly:

  • Select the location entry in the table
  • Click on the Teleport button
  • Alternatively double-click on the ID column

This will now - roughly - place us anywhere near the helipad. Now we are gonig to fine-tune the heading, position and helicopter attitude. Best use the slew mode (press key Y) in MS Flight Simulator, or - if you are really good with helicopters :wink: - manually land at the exact helipad position.

Hint: the slew mode is very coarse to control with keyboard. If you have use a joypad, or any other available analog stick / input.

Once the helicopter is standing still at the exact helipad position, with the correct heading, and slew mode is disabled (such that the helicopter gets properly placed on the ground), switch back to Sky Dolly again, and:

  • Select the desired location entry in the table
  • Click the Update button

This will update the currently selected location:

  • The coordinates and altitude
  • The on ground setting
  • Pitch, bank, true heading
  • Indicated airspeed

As a final step we will also:

  • Select the desired engine behaviour, here: Stop (“cold and dark”)
  • Optionally we can also set the category to Helipad, change the country, provide an (ICAO) identifier and provide a description

And that’s it! From now on you can always teleport to your custom helipad and start with “cold and dark”.

Tip: By setting the category to Helipad you can then easily filter and find all your helipads, with the category filter.

P.S. “Take and give”: the CSV user point data exchange goes both ways. So if you want you can export all your Sky Dolly locations as Little Navmap CSV and import into Little Navmap as user points (again).

4 Likes

Happy New Year 2023!

Dear all, I wish you a Happy New Year 2023, health to you, your family and friends, and most of all peace to everyone!

Just before Christmas the Sky Dolly downloads crossed the 30’000 download mark. Thank you so much, to each and everyone of you! To clarify: I am not measuring the success of Sky Dolly in download numbers. I develop Sky Dolly for my own needs, in the hope that it might be useful to others, to keep up with “modern C++ development patterns and language features” - and most importantly for the fun of it!

So each comment of encouragement, or even a simple “Sky Dolly does exactly what I need!” means so much to me! So thank you again.

A Bit of History


Sky Dolly is pretty much exactly 2 years old now - that is, development started with the first “commit”, like:

Commit: 11380a0652d5ab760983d5b007ec82ca398cdd69 [11380a0]
Date: Tuesday, 22. December 2020 13:35:36

The first v0.1 was released shortly thereafter on flightsim.to (end of February 2021).

The first year 2021 mainly focused on adding new SimConnect / recording / replay related features and already introduced a database (“SQLite”) based persistence and other unique features:

  • The “logbook” with automatic flight storage (v0.6)
  • “Formation” recording and replay (v0.7)
  • Import/export plugins (v0.8)

the second year - 2022 - mainly focused on architectural aspects, driving forward the “plugin-based architecture” and applying it not only to the connection with the flight simulator (yes, also the communication with MSFS is plugin-based ;)) and the various import/export plugins, but also the “modules”:

  • A module system, with currently three modules (logbook, formation, location), reducing the RAM usage to a minimum (only around 9 MiB when launching Sky Dolly in “minimal UI” mode) (v0.10)
  • “Under the hood” performance improvements by applying "modern C++ coding patterns and features (v0.11)
  • And finally a new “Location” module, allowing to capture, edit and teleport to any location (v0.12), including import/export plugins (v0.13)

And while I certainly take some “shortcuts” every here and there, especially in the “user interface department”, each feature is implemented with “ease of use” in mind. For instance you can simply seek forward and backward at any time, without having to click on “pause” or “stop” first. Or you can start replaying right after recording, without having to “load a file” first. And for pretty much every action exists a keyboard shortcut, including access to all UI elements.


 And a Quick Outlook

As mentioned in various replies to comments on flightsim.to I don’t generally promise any concrete features, let alone making any commitments of any sort. This is simply because Sky Dolly is developed in my spare time, for fun and mostly for my own needs.

While this may sound selfish this is actually a good thing, for two reasons: first, whenever something annoys me, be it “too many mouse clicks required” or a “missing feature” you can be sure it ends up on my internal “to do” list. While this does not guarantee any timely implementation it is “in my own interest” to eventually implement or improve on it.

Second, most “community wishes” are pretty much aligned with my own wishes. Perhaps not with the exact same priorities, but so far I never encountered a suggestion where I had to completely say “no, that totally does not make any sense at all” :slight_smile:

That being said, I can reveal the “top three annoying things” that I intend to fix / improve next:

  • Support (as far as feasible) for 3rd party aircraft (e.g. the A320 by Fenix and the PMDG Boeing 737)
  • Smoother replay, specifically when it comes to “formation flights” (AI aircraft), keyword: “aircraft jitter”
  • Properly align imported flight paths on the ground (e.g. when importing real-world flight paths from flightaware.com or flightradar24.com, but also IGC flights etc.)

I made already some developments with regards to the first bullet point, but while I had some success with my ideas in some cases, there were “setbacks” in other cases (notably with the A320 by Fenix - what’s more, the latest 1.0.6 Fenix release makes matters even worse, in that this version does not even properly report the “simulation variables” correctly anymore, specifically “flaps” and “thrust lever position”).

But I am not giving up just yet :wink:

Once those things are implemented there is a plethora of other new features that I have in mind, but again
 shhht! :slight_smile:

I will now leave and visit my family and celebrate the 2023 a little bit and again wish you all a very happy 2023 as well!

Best, “Steeler”

P.S. A small bug fix release v0.13.1 has just been released. The most important fix is probably the “typo fix” in the location CSV export in Little Navmap format (“airport” is now spelled correctly, letting Little Navmap properly assign the correct icon to it).

6 Likes

Hi, the freshly released Sky Dolly v0.14 has improved support for 3rd-party aircraft, including gears, flaps and spoilers.

However unfortunately I noticed that the latest Fenix A320 v1.0.6 doesn’t report certain simulation variables anymore, so I did my major testing with an older release v1.0.2 - and even there not everything works as expected, specifically the spoiler handle positon is not reported as expected: only between a range of 0% and something like 33% - and the spoiler handle does seemingly not react at all to the corresponding “set spoiler position” event that I now send.

Anyway, I will re-test the flaps and gears with the latest Fenix 1.0.6 release again and let you know. In fact, I intend to do some thorough tests again with various 3rd-party aircraft and publish my results in some table form later next week or so.

1 Like

For the Big Birds!

Sky Dolly v0.14 “Ethereal Embraer” (v0.14) has just been released. This release focuses on improved 3rd-party aircraft support and tries to improve replay of control surfaces and other controls such as:

  • Elevators, rudder, ailerons
  • Flaps and spoilers
  • Gears
  • Arrestor hooks, wing folding
  • Lights (landing, taxi, 
)

Sky Dolly also improves the corresponding animation of AI aircraft (aircraft that are part of a formation flight): flaps, elevators, rudders and ailerons are now also animated, including arrestor hooks, canopies and wing folding.

Question: “Do I have to reload the flight each time before starting replay?”

Answer: “No. Sky Dolly uses a sophisticated test-and-set pattern to set ailerons and flaps, specifically also in cases (e.g. PMDG Boeing 737) where the corresponding flaps handle position variable is only updated in real-time (meaning: not immediatelly, but rather with the time it takes to extend/retract the flaps). As usual you can seek back and forth on the timeline as you want, at any time, and start, stop and restart the replay as you wish.”

Import and export of Little Navmap userpoints has also improved, by supporting the latest Little Navmap 2.8.8 userpoint types.

Adjusting the replay speed now also speeds up (or slows down) the simulation rate accordingly (with simulation rate factors of 0.25, 0.5, 1, 2, 4, 8 and 16, matching closest with the selected replay speed in Sky Dolly).

And if you need to take a coffee during recording, no worries: pressing the pause button during recording now also pauses the actual simulation. “Here’s your coffee, Capt’n!” :slight_smile:

Finally an annyoing issue with “counteracting ailerons, elevators and rudders” has finally been fixed: the root cause seemed to be that the unit “radians per seconds” for “rotation velocity” wasn’t liked by MSFS, especially by those aircraft having a PID controller.

A what?

A “Proportional–Integral–Derivative” controller is a control loop mechanism employing feedback for systems requiring continuously modulated control.

[PID Primer]

The complete changelog is available on github.com .

The following “historically accurate & researched video recreating the final patrol of Baron Manfred von Richthofen (The Red Baron) with 8 aircraft” shows an amazing work of creativity done with Sky Dolly, shared with kind permission from the author simPaul flights:

Sky Dolly is open source.

The latest binaries are available at:

2 Likes

Paint It Black!

Sky Dolly v0.15 “Flamboyant Fokker” (v0.15) has just been released. This release focuses on upgrading several 3rd-party libraries, most importantly the Qt6 framework and as such is a no-new-features release.

Nevertheless this is a huge jump, paving the way for better SQLite support (enabled “math functions”), gRPC & Protobuf. Stuff that gets developers excited, but what is probably of little interest to flight sim enthusiasts :wink:

Internally Sky Dolly is now also using named database connections, laying the foundation for additional import & export plugins - in the Sky Dolly logbook (SQLite) format, that is.

And of course the current Qt 6 framework should iron out some minor quirks that may have been present on Windows 11.

Qt 6 also introduces preliminary dark mode support: this is not yet enabled by default, as it is work in progress in the Qt 6 framework itself. However a sneak preview can be taken by providing some command line arguments.

For the default “Windows” style:

SkyDolly.exe -platform windows:darkmode=2

The “Fusion” style arguably looks currently a bit better:

SkyDolly.exe -platform windows:darkmode=2 -style=fusion

In both cases dark mode needs to be enabled in the Windows (operating system) user settings.

Sky Dolly is open source.

The latest binaries are available at:

2 Likes

For Hollywood Directors: Create Timelapse Videos - With SQL

I agree that this most likely falls under the more “esotheric” category of what you can do with MSFS and Sky Dolly. But it goes to show what you can achieve with a little bit of imagination and creativity.

Abstract

The goal of this little tutorial is to create a 2 minutes long timelapse video with a speedup factor of 16, without having to record 32 minutes of real-time MSFS video footage. After all, the recent Sky Dolly v0.14 now also adjusts the simulation rate upon replay speed changes, so let’s make use of that fact:

In a previous tutorial we have already seen how to open the Sky Dolly logbook with an SQLite database browser like SQLiteBrowser. and an introduction to the most important tables was given.

Preflight Checks

It is best to create a new logbook from within Sky Dolly (CTRL + N) and open this for your experiments. Like this you are not risking to loose any of your recorded flights. However don’t forget to close Sky Dolly before accessing the logbook (= SQLite database) witht the database browser: SQLite databases do not support concurrent write access from different applications.

Programmatically Create A Flight

So we are basically doing the following now:

  • Create a flight
  • Add an aircraft
  • Add two positions with two distinct GPS coordinates and possibly camera movement (pan, rotate, tilt)

Now is the time to open the logbook with your database browser. Once you have done so, execute the following SQL statements.

Flight

Most flight data is optional. So the simplest way to create a flight is:

insert into flight (title, user_aircraft_seq_nr)
values ('LSZH camera pan', 1);

Note that even the title is optional, but it is good to have a descriptive title for later on in Sky Dolly.

The sequence number indicates the user aircraft in the flight (we are going to add the aircraft in a second). In most cases the sequence number equals to 1, but for formation flights (a flight having multiple aircraft this defines the user aircraft the camera is following during replay).

Note that internal IDs are automatically generated, typically by simply incrementing a number. We come to this point in a second.

Aircraft

Next we are going to add our aircraft. The aircraft table references the previous flight table with a so-called foreign key. Essentially this defines the association of the given aircraft with a flight.

So how do we evaluate the ID of the most recently inserted flight? Knowing that those IDs are automatically incremented (sic!) we can simply execute the following query:

select max(id) from flight;

This returns the automatically generated ID of the most recent flight. Good. We can nest this query into the following aircraft insert statement:

insert into aircraft (flight_id, seq_nr, type)
values ((select max(id) from flight), 1, 'Asobo XCub');

Now the type must exactly match with any existing aircraft_type. You can list all available aircraft types with the following query, in alphabetical order:

select * from aircraft_type
order by type;

Note that every Sky Dolly logbook comes with the default aircraft types that come “out of the box” with MSFS (including the premium aircraft). Otherwise this table is automatically populated with every new (3rd party) aircraft that is used for recording.

In fact, the aircraft type in this example - “Asobo XCub” - is not that important, because we can choose any user aircraft for replay in MSFS later on. But in any case we must satisfy the foreign key validation.

Camera Pan Positions

We want to create a simple camera pan from one to another position. Like any good filmmaker we need to create a room plan: we do we want to setup the camera? Where should it point to? Where is the action going to be?

Of course we think big and use any given world map or flight planning tool to determine our desired GPS coordinates and altitudes.

Once we have those we do:

-- Pan from 47.450681, 8.549628 at 1417.0 + 150 feet altitude (about 50 metres above ground)...
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 0, 47.450681, 8.549628, 1417.0 + 150, 0, 0, 340);

-- ...  to 47.454667, 8.571006, within 32 * 60 * 1000 [ms] = 32 minutes
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 32 * 60 * 1000, 47.454667, 8.571006, 1417.0 + 150, 0, 0, 15);

The nested “select max(id)” does the same as we have already seen for the relation aircraft → flight: it associates each position data with the most recently inserted aircraft.

And that’s it: that is all there is to insert a minimal flight into a Sky Dolly logbook. Of course our camera dolly - Sky Dolly :wink: - is self-propelled and does not need any engine data
 so we already have a flight from point A to B.

Don’t forget to commit your data (click the “Write Changes” button) before opening the logbook with Sky Dolly again. You can now load this flight, set the replay speed to 16 and enjoy your timelapse.

Pro tip: if you create a custom camera position, like in the front nose of the aircraft pointing forward, you can have your camera rotate with the aircraft. So the previous true heading changes that we inserted take effect. But this is left as an exercise for the dear reader :wink:

Go Crazy

Now it is up to you to play with your creativity, for instance:

  • Create camera paths with multiple points (they will be smoothly interpolated with Hermite spline curves - as the segment length can be tricky to predict you may need to fiddle around a little bit with the timestamps of the in-between positions, in order to get a smooth velocity as well.
  • Change also pitch, bank and altitude
  • Think big: pan over the Himalya and increase the timelapse factor in your video editing software (= increase the duration of the panning) (*)

(*) Note: MSFS’ maximum simulation rate is 16. So if you want to have a factor of 32 you need to double the duration of the flight and then add a speedup factor of 2x in your video editing software to achieve a 32x timelapse

Happy filming :slight_smile:

This is the complete SQL, ready to be copy & pasted into your database browser:

insert into flight (title, user_aircraft_seq_nr)
values ('LSZH camera pan', 1);

insert into aircraft (flight_id, seq_nr, type)
values ((select max(id) from flight), 1, 'Asobo XCub');

-- Pan from 47.450681, 8.549628 at 1417.0 + 150 feet altitude (about 50 metres above ground)...
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 0, 47.450681, 8.549628, 1417.0 + 150, 0, 0, 340);

-- ...  to 47.454667, 8.571006, within 32 * 60 * 1000 [ms] = 32 minutes
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 32 * 60 * 1000, 47.454667, 8.571006, 1417.0 + 150, 0, 0, 15);

commit;
1 Like

:warning::warning::warning: IMPORTANT PATCH RELEASE: 0.15.1 :warning::warning::warning:

Previous patch releases (< 0.15.1) like the 0.13.1 and the previous 0.15.0 would generate a logbook backup each time the application was started (and if the logbook option “Before migration of an older logbook” is enabled, which is the case by default).

This has been fixed with the 0.15.1 patch relase.

How to reclaim storage space:

  • In Sky Dolly: File | Logbook Settings
 | Show
  • In File Explorer: Open the Backups folder
  • Delete any logbook backups that are not required anymore (the file names contain the backup date)

I am terribly sorry for this inconvenience :disappointed:

So what happened? For the interested readers and for full transparency:

  • The recent v0.15 release had a migration step with a repeated UUID, making this universally unique identifier, well
 not so unique
  • This caused the logbook (database) version to be reset to the previous v0.14
  • So upon each application launch - and if the option "generate backup before migration is enabled, which is the case by default - a backup would be generated, taking up previous storage space, as the logbook was deemed to be from a previous version (v0.14)

After having fixed this little glitch I detected a more fundamental problem: I (intentionally) never increase the patch version number of the logbook (the third digit in the version number, e.g. v0.13.1), so:

  • The comparison between the current application (e.g. v0.13.1) and database (e.g. v0.13.0) version would always result in the database version (e.g. v0.13.0) being “from an earlier version”, so
  • The backup was still being done each time the application was started
  • Doh!

The fix for the later is to ignore the patch version number during version comparison.

All this is now fixed in the current v0.15.1 which is available here:

Source and binaries are also available here:

2 Likes