Sky Dolly - best replay tool yet (IMHO)

I just downloaded the free app Sky Dolly v.0.5, which is a free replay tool that I believe deserve much more attention than it has received so far. The reason is simple: This tool gives the most smooth replay I’ve ever seen, also when the A320 is in action, as shown in this test:

Also, the program simple to use, and it seems stable to me. I really recommend trying out this (and no, I have no affiliation with the creator of the app :grinning:)

https://forums.flightsimulator.com/t/announcement-sky-dolly-v0-5-flight-recorder-till213/370938

4 Likes

Dear community,

Another magic number has just been reached: 1,111 downloads :partying_face:

image

Thank you all so much for your support and kind words! @StumpyFrame6, unfortunately I am not even getting such smooth framerates during normal flying with simple planes on my mid-range desktop, let alone with an A320neo. So I was quite pleased with your results.

Just today a major feature branch has been merged into the „main“ branch, so the next preview v0.6 is making very good progress.

There is still quite a lot of usability polishing to do with the new functionality, but at least the „stop“ button is (still) doing what you‘d expect a stop button should do :wink:

1 Like

Just gave this replay tool a go.
Must say I like and am impressed that it has zero effect on sim performance when recording or in play back.
Works really well and am impressed.

Thanks to the developer and the OP for recommending this tool.

2 Likes

I’ve found an issue with the Just Flight Arrow III. The flaps don’t animate properly in a replay. At the point in the replay where the flaps are moved, they will briefly move and then return to the position dictated by the control setting. Here’s a video to illustrate. There’s an external view followed by a cockpit view.

The flaps are set by the „flaps handle index“ simulation variable. This works with the default aircraft, as well as the following 3rd party aircraft:

  • Spitfire
  • Fiat G.91
  • T-45C Goshawk

Values are only sent once they change (for resource and performance reasons). You can observe this in the „Simulation Variables“ dialog in Sky Dolly.

Now I have already observed that the CANOPY OPEN variable is always „resetting to 0“ if not repeatedly set to the desired value (Sky Dolly already takes care of this).

Also refer to the SDK discussion here, if interested in some technical details:

So what do you observe with the „flaps handle“ at that point when the flaps retract unexpectedly (in Sky Dolly: press V, „Handles & Brakes“)?

There isn’t an entry on the “Handles & Brakes” tab for the flap handle. But I was able to use FSUIPC’s monitoring facilities to observe the flap handle index behaviour. In a replay with the default Cessna 172 I see the index changing correctly as the flaps are lowered but in a replay with the Arrow, there is a fight going on. Every time the handle index is changed by Sky Dolly it is immediately changed back to zero.

I think what is happening and it may be the issue with your sliding canopy too, is that Just Flight have created an Lvar for the flap handle position in their aircraft called “LOWER_flap_handle” which is over riding the sims default flap handle index and reseting it to whatever value LOWER_flap_handle contains.

Yes, I am sorry, that was my confusion: I placed the “Flaps Position” value under “Secondary Controls”:

(Please ignore the displayed values: those are randomly generated “test values”)

The “Flaps Position” (simulation variable: FLAPS HANDLE INDEX) is a value between 0 (“flaps fully retracted”) and the number of flaps handle positions (minus one).

(You can hover the mouse over any value and it will reveal the underlying “simulation variable” as tooltip - that is usually only of “academic interest”, for the more technically inclined users ;))

That’s what I suspected as well: depending on how the aircraft is modelled it may give its own “local variables” preference, or the (externally readable/settable, via the “SimConnect API”) “simulation variables”. In my opinion the later simulation variables should always take precedence - that is, if a given simulation variable is set to a certain value then that value should be the “single source of truth”, until changed again later on.

Now I am not familiar at all with “designing aircraft” and I merely know about the existence of those “local variables” (also called L:vars). For instance the mentioned Spitfire and T-45C Goshawk do not react at all to the “official” CANOPY OPEN simulation variable: they use their own “local variables” for the canopy animation (and operation). And as discussed in the SDK topic the other two aircraft (that I have access to) - the Fiat G.91 and a freely available “Alpha Jet” - automatically close the canopy (possibly for the same reason: they might use “local variables” internally as well, which - wrongly, IMHO - take precedence over the CANOPY OPEN simulation variable. Or it is simply a bug in the SimConnect server implementation in FS2020 itself, who knows…

Now here is the thing: whereas I cannot really judge the situation with the CANOPY OPEN simulation variable (two aircraft both “automatically close the canopy”, two other aircraft do not react at all) with the FLAPS HANDLE INDEX it is a bit different: all default aircraft retain the set FLAPS HANDLE INDEX value, and so do all other 3rd party aircraft that I have tested so far (and have access to). So I’d argue that “this is the expected behaviour”.

As I do not have access to the Arrow, if you want you could help me prove the above theory, as done in the previously mentioned SDK discussion:

That is:

  • Download and install the MSFS SDK, by enabling the developer mode (a download option is available in one of the developer menus)
  • Start FS2020
  • Start a flight
  • Start the SimvarWatcher example application, located in C:\MSFS SDK\Samples\SimvarWatcher\bin\x64\Release
  • Click on the “Connect” button
  • Add the FLAPS HANDLE INDEX simulation variable, with unit “number”: “Add Request”
  • At this point the simulation variable should display the currently set flaps handle position
  • Now try to set the value to a value between 0, …, N-1 (where N is the number of flaps positions, including “fully retracted” = 0)
  • (Uninstall the SDK again)

Now my theory is that with the Arrow that value would immediatelly go back to 0 (when it should really retain its value).

Is that the case? Well, you basically already illustrated that case with FSUIPC, but reproducing it with the “SimvarWatcher” example app would be the “ultimative proof” (because that is essentially what Sky Dolly is doing).

Also refer to a similar discussion, which illustrates the “SimvarWatcher” user interface:

The new bug fix release v0.5.2 addresses this issue by introducing explicit settings (well, I’d call them “workarounds” for the time being ;)) to “repeatedly send” the following simulation variables (which are known to “auto-reset” for certain aircraft):

  • Flaps (simulation variable: FLAPS HANDLE INDEX)
  • Canopy (simulation variable: CANOPY OPEN)

If the “repeat” option is enabled then the corresponding simulation variable (in fact, the entire “group” of simulation variables) is repeatedly sent - regardless of whether its value changed or not - if its value is greater zero (“flaps extraced” or “canopy open”).

Since v0.5 one can observe this behaviour in the Simulation Variables (press V) dialog: variables (groups) which are currently not sent to Flight Simulator - that is, their value did not change for a certain amount of time - are rendered as disabled (“inactive”) in the user interface.

Note that the default settings value for the canopy is enabled, as I have yet to find an airplane which does not automatically close the canopy if that value is not repeatedly sent (and which responds to CANOPY OPEN in the first place: currently I only know about the Fiat G.91 and the freeware Alpha Jet). But of course this default setting may change in future releases, depending on the availability of aircraft which properly keep the canopy open when (once) requested to do so.

The release fixes some other minor issues, including a crash which could occur when closing the application, see the CHANGELOG for full details.

As I do not have access to the Just Flight Arrow III I’d be super grateful for some feedback :slight_smile:

Hello @PeterHolt7506,

The newly introduced “Repeat Values” settings should help to “keep the flaps extracted”.

Note that the default setting for the “Flaps Position” is disabled (as all aircraft that I have tested so far / have access to behave nicely), whereas the default value for “Canopy” is enabled (= repeat values), as the only two aircraft that react to the simulation variable (CANOPY OPEN) in the first place both “automatically” close the canopy (again, those aircraft that I have tested so far).

I must admit that I “blindly” implemented the “repeat values” feature for the flaps, as I do not own the mentioned Just Flight Arrow III, so if you’d find the time to confirm whether those settings actually work for the flaps issue with that airplane that would be very helpful :slight_smile:

… and it just got better! :slight_smile:

With the newly released Sky Dolly v0.6 a major milestone has been reached: the „logbook“!

Every recorded flight is now automatically persisted, using an SQLite database - away with pesky file handling :wink: Basic „create / update / delete“ functionality is in place, and sophisticated „flight filters“ on the roadmap. Want to know which flight „has the longest inverted flying with a jet“? The „logbook“ just laid the foundation to answer all those questions!

For all new features check out the complete changelog.

Current Sky Dolly binaries are freely available here:

Source code (including older binary releases):

Happy flying and recording!

3 Likes

Hey @Steeler2340 ,

In order to support planes that use custom simvars (e.g FBW, CRJ), do you think it will be possible to add a config file or interface to add these custom simvars by the user in order for these to be recorded? (In case you just only need to record and play)

Hello @omarsmak,

I give a little bit of context / background information, such that also other readers understand the basics, how a “flight recorder” works. Just enough that even if you are not a developer you get the gist out of it, and not too much in order not to bore you to death (in case you are a developer) :wink:

Sky Dolly and other replay apps / 3rd party tools communicate with FS2020 via SimConnect, a standardised “application programming interface” (API) introduced with FSX. That API let’s you read and in most cases also “write” (set) so-called “simulation variables” (there exist also “events”, but for simplicity’s sake I’ll ignore them for now - they have been declared “legacy” anyway).

So what are “simulation variables” again? Basically the state of the aircraft: the position and velocity of the aircraft itself, its instrument / lever / knobs settings (flaps position, yoke, throttle, RPM settings, …) which control the aircraft, but also simulated values such as engine temperature and oil pressure etc.

In order to access (“get the values”) those simulation variables the 3rd party application first needs to “register” the exact set of variables that it is interested in, including the desired unit (e.g. “feet / sec”) and update frequency. The same goes for “setting” those variables (= “replay”): the application first needs to specify the set of variables it is going to “write” later (typically for “replay” purposes the set of read / write variables is identical).

Or simply said: “Know what you want, tell exactly what you want”.

Here is already the first small problem (with the current state of the SimConnect API): most of those simulation variables are indeed also writeable (settable) by the 3rd party application, but quite a few variables are only readable.

Take for instance the variable APU GENERATOR SWITCH: as we can see in the API documentation (in the column “Settable”) that variable is only readable. So while this is sufficient e.g. for some hardware indicator it is of no use to a “replay app”: while we can record it, we cannot replay (set / write) it!

(Again, I am conciously ignoring events for now, both for simplicity’s sake and because they are now considered “legacy” - also refer to my question that I raised for the next developer update, if interested).

Why are some variables writeable, and others not? I guess for “historic reasons” - I don’t see any technical reason for this.

Second problem: not all 3rd party aircrafts actually use those “simulation variables” (at least not all of them: “basic variables” are supported, but not all of them). So while there exists the CANOPY OPEN variable (which indicates by how much percent the canopy is opened) some aicrafts simply ignore it: neither do they report the value properly, nor do they react to it.

And this is exactly where your qeustion comes in now :slight_smile:

So those aircrafts use their own set of internal variables, so-called “local variables” (or L:vars in short). While there exist at least one solution (well, I’d call it “workaround”) to access those local variables there are several reasons why I won’t go down that road for now:

  • That solution requires the installation of a so-called WASM module into the community folder, which reads those “local variables” and sends it back - as custom “client data” - via the SimConnect API
  • (I am not 100% sure, but that WASM module could even be aircraft-specific)
  • This solution requires custom “client data” (as mentioned): the required IDs could “collide” with other WASM modules (which might try to do the same) → hence the “workaround” nature of any such approach
  • Even if such a solution would run “collision-free” (and the users were willing to install such WASM modules, simply to get replay working with their 3rd party aircraft) a replay tool would have to write “custom code” (namely the specification of which “local variables” exactly it wants to read / write).

So in the worst case you would end up with N solutions (for N 3rd party aircrafts) in order to e.g. control the state of the canopy (or landing hook, throttle, …), because each of those N aircrafts might be using another “local variable” (assuming that they are identified “by name”) for the same thing.

And what for: we already have a “standardisation” of all those variables, and it’s called - SimConnect!

Now why are some aircrafts using their own “local variables” instead of the “simulation variables”, such as e.g. the mentioned CANOPY OPEN then? A fair question! And I’ve had some conversation with one of the 3rd party aircraft developers, and there are at least two reasons (for aircraft developers):

  • They simply won’t work (as expected) in the current FS2020 implementation - yet. So for “time to market” reasons aircraft developers invent their own variables (that they can “fully control”)
  • They simply don’t exist (yet) for a given feature of the aircraft

Again the CANOPY OPEN example: landing procedures for “WW II warbirds” foresee that the canopy be opened (in the best case “sliding backwards” ;)) for landing - at speeds around 100 knots or so. The problem: apparently the “stress simulation” in FS2020 causes then a “stress failure” at such “high speeds” (assuming that any canopy should be closed before take-off, and remain closed until after landing).

So what do 3rd party developers of such “warbirds” do? Exaclty: they invent their own “local variable” to control the canopy state - unfortunatelly.

Now personally I have zero experience with the aircraft development aspects of the MS software development kit (SDK), I only know about the SimConnect aspects. So I just let those statements stand here on their own.

But IMHO the proper solution would be that Asobo would introduce a “canopy stress factor / threshold” of some sort, such that aircraft developers could still use the standard CANOPY OPEN variable. But of course that is just one out of many examples…

So to fully answer your question: while I am certainly looking into more SimConnect “simulation variables” (specifically also with regards to engine start/shut-down currently - also considered to still use “events” for the time being…), supporting “custom/local variables per aircraft” is not something that I can consider.

Especially not as a “one-man show” developing Sky Dolly in my free time :wink: Because even if such “custom variables” would technically work (possibly with the help of a custom WASM module) it would mean to maintain different solutions, in the worst case “one solution per 3rd party aircraft” - and which would imply that I own those aircrafts in the first place (I do own a couple by now, but only those that personally interest me ;)).

So, the answer got a bit longer than planned, but - “such is life as a developer” :wink:

3 Likes

Just here to add that Sky Dolly is the best freeware tool that I’ve tried. Not sure of it’s the interpolation method but it’s smoother on replay and seems to have no impact on frames during record.

:+1:t6::+1:t6::+1:t6:

2 Likes

Sky Dolly can record with various sample rates, ranging from as low as 1 Hz („one sample per second“ - perfect for airliners) up to the default rate „auto“ („one sample per simulated frame“ or „as many samples as reported my FS 2020“).

Interpolation merely calculates (or rather: „makes an educated guess“ ;)) the values „in between two sampling points“. For instance you sampled the aircraft‘s altitude at points in time 1 and 2 [seconds] to be 1000 feet and 1200 feet . And now you want to know the altitude at time 1.5 seconds (and 1.1, 1.2, …) between those „sample points“ (let‘s call them P1 and P2 for now).

There exist many different interpolation methods. Their main differentiator is mostly - simply put - at „how many sample points in the neighbourhood of points P1 and P2 they have a look at“.

The simplest - and most intuitive for most of us - methods are „nearest neighbour“ („take the value which is closest to our desired sample point“) and „linear interpolation“ („draw a straight line from P1 to P2: those are our desired interpolated values“).

So in our example the interpolated altitude at time 1.5 seconds would be 1200 feet („nearest neighbour“, value 1.5 being rounded up to 2) and 1100 („linear interpolation“).

While those methods are extremely simple and hence extremely fast to calculate it is easy to see that not even the linear interpolation results in „smooth lines“ when you interpolate along a whole series of sample points P1, P2, P3, …, Pn. Intuitively this is because for each „segment“ we only consider the points which define that segment. But we don‘t consider sample points beyond that (the „support“ of that segment).

(Mathematicians would say that the derivation of a „linear curve“ is not coninuous - but let‘s quickly turn back to easier terms, as my own education is also a couple of years in the past ;)).

Enter „higher order“ interpolation methods: the next easier methods („cubic interpolation“) look at the immediate next neighbours of P1 and P2 (remember: we are still interested in an interpolated value between P1 and P2), so the „predecessor“ of P1 (let‘s call it P0) and the successor of P2 (we name it P3).

(The term „cubic“ comes from the fact that there is a ^3 („to the 3rd power“) term in the analytical form of the equation)

For instance we may have the following sampled altitudes:

P0: 980
P1: 1000
P2: 1200
P3: 2000

Sky Dolly uses „Hermite spline interpolation“ (there are many variants of „cubic spline interpolation“ - Hermite is just one of them). And while I am not going to calculate our interpolated value for segment [P1, P2] at interpolated time 1.5 seconds („halfway into the segment“) in my head just now we intuitively already would say that it is not going to be 1100 feet (as would be the result of a linear interpolation), because there is a „steep incline to 2000 feet“ in the next segment [P2, P3]. So intuitively we would expect the interpolated altitude to be „somewhat higher than 1100 feet“ - but at the same time also still below (or equal to) 1200 feet, because that is the next „fixed sample point“ (and the next point P2 has an even higher value)!

To summarise, we want the following properties for such an interpolated curve:

  • It should be „smooth“ across segments
  • It should go exactly through the sampled points P1, P2, P3, …, Pn (that we measured)
  • It should still be reasonably fast to calculate

Now in theory that results in a „smooth flight curve“, and in practise - in FS200 - that works reportedly well.

(in practice of course also „message delays“, „CPU/GPU hickups“ etc. play a role - „frames per second“ essentially“ - how „smooth“ the replay is. But Sky Dolly being implemented in C++ has reportedly one of the lowest CPU and memory footprints)

What Sky Dolly also does right is „the timing“: the flight replay takes exactly as long as the originally recorded flight. Why? Well, that is easy to understand, now that we know about the underlying interpolation theory :wink:

Sky Dolly doesn‘t simply take the sampled values and sends them stoically one after another - with some time delay in between - to FS 2020. That would be wrong.

Instead Sky Dolly uses a timer (a „high precision timer“, to be specific), starts at time 0 and then interpolates the recorded („sampled“) values at the exact time it receives a „simulated frame“ event (from FS 2020). So in theory it might happen that we never really access an actual sampled value (except the initial values at time zero), but only „values in between“.

And naturally that works regardless of whether the original samples had been sampled at 1 Hz, 5 Hz or even 60 Hz (of course the lower the sample rate „the less details“ are captured). In fact you can even change the sample rate during recording (if you wanted to).

The following older video (made with Sky Dolly v0.4) illustrates this nicely:

Note again that the replays have the exact same timing as the original video (top left) - except that „some maneuvres are lost“, depending on the sample rate. But that is exactly the point of this comparison :wink:

References: Spline interpolation - Wikipedia

1 Like

Thank you very much for the interpolation explanation.

Brings me back to a grad school course I took in data mining.

I don’t know what method the other replay tools use, or if they just sample and replay simulated frames, but I appreciate the effort and results with Sky Dolly, especially as freeware. I’ve only used one other tool and Sky Dolly provides smoother replays.

1 Like

Ok. I got Sky Dolly.

Can someone tell me how to use it? Is there a manual?

1 Like

There is no manual yet, but basic functionality works like a “tape recorder” (if you remember those kind of devices anyway ;)).

Basic instructions can be found here:

and there is also a “Frequently Asked” section (which is easily overlooked) on that site.

Definitely a great replay tool, love it so far, not even bothering trying others, great app with the options etc, i was also surprised to see that clouds 99.9% are basically at the same place etc… so far the only issue i encountered, was while flying the Top Mach Studio f-22, is the replay seems to have issues with the g puling, it kind of amplifies it, or just not drop totally down, so when recording gotta be careful with some procedure by pulling g or speeding, as the replay might be a bit more than what you did in the recording, ending up with airplane being over-stressed and replay ending interpreting a broken aircraft.

1 Like

All replay tools simply replay so-called „simulation variables“ (including of course the recorded aircraft position and attitude).

However MSFS keeps calculating physics, based on the „imput“ provided by the simulation variables.

Hence the recommendation for all replay tools to disable both crash detection and aircraft damage.

You have no idea what g forces you are exposing your aircraft to when seeking on the timeline :wink:

oh didn’t thought about disabling this for replays. But still, i think so far the best replay tool i have seen or best replay sync so far, going from back then in FSX and not to mention DCS that replay could had been use as gambling pool, not knowing if your landing would be good or directly crave into the earth :slight_smile: using VR, love to simply replay a flight to do some sight seeing and not paying attention to any controls, especially that MSFS allows you to change weather and time in flight, making it so exiting to do one recording and change what ever you want to feel your flight different, season, time of day, weather, i am quite impress so far after 2 weeks or less in MSFS, again glad i waited 2 years to grab it. only thing i haven’t played with is timeline while replaying, so much PTSD from old sims replays that when altering time you ended up breaking your replay file.

1 Like