Skip to content

Releases: spirokai/OVRLEY

2.33.4

Choose a tag to compare

@github-actions github-actions released this 12 Aug 15:16

NEW

  • Laps: You can now display laps timings contained in CSV and VBO files. There are 4 variants: current lap, best lap, live delta and a lap log that contains all lap times. All of them are text widgets that can be fully styled.
  • Auto-updater: Installer (win), AppImage (linux), or DMG (mac) formats are now available for download. These will automatically check for updates on startup and give you the option to auto update. No-update, portable windows and Linux (DEB) packages continue being available.
  • TorquePro: Added support for CSV files exported from TorquePro - this reads typical motosports and general metrics. Thanks @lapinpt for this!
  • Engine Power: New metric widget that displays engine power in W.

IMPROVEMENTS

  • Shortcuts: Added about 30 new shortcuts across the entire app. You can access them via the help button in the top toolbar.
  • Video sync: Further refined the syncing workflow - made applying timezone less restrictive, and you can now detect video creation time from the filename if it contains a timestamp (Insta360; feel free to submit other formats from other vendors)
  • More CSV headers: Parsing CSV files now recognizes also torque and engine power.
  • Centering snap guides: Enabled guides to snap to the center of canvas and widgets. Useful to e.g. center widgets against backdrops.
  • MacOS installation: DMG installation background now contains instructions for installation.

BUG FIXES

  • Fixed incorrect route/elevation profile line width in preview, which was displaying thinner than the rendered line.
  • Fixed random video preview blackouts, especially on Linux and slower machines by reconfiguring http headers.
  • Fixed video preview not loading/crashing/getting stuck on some slower machines by increasing number of thread workers.
  • Fixed potential lockup at startup when broken template was auto-loaded.
  • Left/right balance now shows 50/50 when not pedalling, instead of 0/100 which is misleading.
Screenshot 2026-08-11 141423

2.28.3

Choose a tag to compare

@github-actions github-actions released this 05 Aug 13:48

This week was mostly about housekeeping and some QOL changes.

NEW

  • Negative sync offset: Perhaps the most requested feature is here. You can now set negative offset for a video, i.e. video starts before telemetry stream. The exported video shows no overlay for a part that has no data (if there is any). The editor always shows widgets, even if there are no data, with placeholder values - to avoid confusion why your widgets are disappearing.

IMPROVEMENTS

  • Auto sync: Turns out video creation time in metadata tag can be both UTC or local time disguised as UTC. Thanks to @samarskyrider-dev for bringint this issue up. OVRLEY now treats this time as ambiguous, calculates potential syncing offsets for both scenarios. If only one options is valid, it will be used. If both are valid, it defaults to local time. Added a switch to syncing panel that allows user to toggle the timezone application to the video creation time.
  • Manual sync: You can now select clip/activity in the timeline and manually adjust the sync offset by left/right arrow keys for high precision. Autoscroll speed during dragging the clip is now slower at higher timeline zoom levels, so you have better control over the clip placement.
  • Video creation time: OVRLEY now prioritizes GPS timestamps from protobuf to determine video creation time if available; ffprobe is only used as fallback. This should make syncing more robust since the times come from satellites and should be more reliable.
  • Export quality: Enabled variable bitrate where possible - this improves quality and reduce blockiness around the overlay text in highly dynamic scenes. I am considering going even further and use constant quality flag, but that would give only abstract quality values and unpredictable file sizes (since you can't use CRF with bitrate).
  • Preview performance: Reduced re-renders, geometry and widget rebuilds, so playback and scrubbing should be smoother.
  • Widget resizing: Consolidated the widget resizing logic, so it should be more consistent, less jittery and more performant.

BUG FIXES

  • Fixed GPS timestamps and video creation time for DJI AC004 remote controller. Both are now correctly treated as naive/UTC, respectively. Also applied 8 hour offset since the GPS timestamps appear to encoded in local Chinese timezone as per data I got from Philip. This remains to be monitored - I have no idea if this weird offset is general behavior of DJI AC004 or unit dependent. (Does anyone know?)
  • Fixed minor jagged edges of remaining route map line in the render - the geometry is now rotated prior to rasterization.
  • Fixed improperly rotated video frames when encoding with Intel QSV. After extensive testing, it turned out that Vpp_qsv=transpose is no-op, so the overlay frame is rotated instead outside the filter.
  • Fixed audio for trimmed clips not being interpreted correctly by some media players (looking at you, Windows Media Player) and resulting in malformed audio.
  • SRT timestamps are properly treated as naive instead of UTC; giving correct timestamps/time widget values.
  • Fixed datetime(utc) in AirData .CSV not parsing properly; the time widget now populates correctly.
  • Fixed a bug where sync offset section would not display for AirData .CSV.
  • Fixed interpolation bug where some metrics did not respect null/0 values and bridged the gap between two valid values instead of leaving it empty.

2.25.7

Choose a tag to compare

@github-actions github-actions released this 29 Jul 16:41

NEW

  • G-force animated gauge: Shows the G-force as circular XY plot with a marker. You can define the axes, invert signs. Style fully customizable. I was not able to figure out a reliable way to auto-detect the axes. E.g. acceleration/deceleration should happen along the vertical axis, turning should happen along the horizontal axis. Again, CSV files are inconsistent, e.g. some CSV files use x, some z as the vertical acceleration. Because of this you will have to define the axes yourself. If you have a suggestion on how to reliably detect the axes, PLEASE let me know.
  • Lean angle animated gauge: Shows the lean angle as an annular sector with a numeric label in the center. Style fully customizable.
  • Total ascent widget: Shows the total ascent of the activity. It is derived from barometric atltitude where available, with altitude/elevation data as a fallback. Different units are available.
  • Distance to home widget: Shows the 2D haversine surface distance to the initial GPS coordinate of the activity. Different units are available. Useful for drone activities. Should option to override the initial GPS coordinate be added?
  • GPS coordinates widget: Shows the GPS coordinates of the activity. Available in deg/min/sec and deg/decimal min formats. You can add latitude, longitude or both.
  • Calories widget: Shows the cumulative calories burned during the activity. Uses the data from fit-parser and gpx extensions. If unavailable, it is derived by integrating the power data over time.
  • Undo/redo: You can now undo and redo changes in the editor with 20 steps of history. Ctrl/Cmd + Z to undo, Ctrl/Cmd + Shift + Z to redo, or use buttons in the toolbar.
  • AirData support: Added support for AirData CSV files. Thanks to Chris from https://greyarro.ws/ for the help!

IMPROVEMENTS

  • Sync offset by drag: You can now adjust the video sync offset by dragging the video in the timeline. The sync offset input field remains available.
  • Data availability indicators: OVRLEY now gives you a feedback on the availability of data in the imported activity in two ways: 1) Hovering over the activity in the timeline shows list of available metrics in the tooltip. 2) Inside the widget drawer, the widgets with available data show a tiny green triangle in the top right corner of the button. You can still add widgets that are not available, in case you want to create templates for future activities, but this should eliminate the confusion if the data is available or not.
  • More VBO/CSV headers: Added support for more headers in VBO files. Thanks Darren for the files!
  • FFmpeg timeout: Increased the finalization timeout for FFmpeg from 30 seconds to 600 seconds. FFmpeg did not always finish in time for long videos caused the finalization to fail. Thanks to @guiximenes for contribution and all the testing!
  • Smoothing: Enabled circular EMA smoothing for heading extract from CSV, VBO, MP4 and SRT files, and zero-phase smoothing for g_force_x/y/z to prevent epilepsy from the jittery movements. Alpha and window duration might require some tuning.

BUG FIXES

  • Fixed the error that prevented save/render after switching display variants of widgets. (min_max_label_font required)
  • Fixed the visual bug that caused incorrect track shadows preview in linear/arc/corner gauges. Rendering was correct.
  • Fixed bug that caused not respecting/saving font type from/to template for arc/corner/heading tape widgets.
  • Fixed wrong min/max label formatting (units, decimal points) for linear/arc/corner gauges.
  • Fixed incorrect heading shadows color in the editor preview.
  • Fixed some more shadows not displaying properly in the editor preview.
  • Fixed unnecessary re-rendering of all widgets in the editor on widget drag, editor should be smoother.
  • Fixed unncessary re-rendering of route widget in editor.
  • Fixed some unit formatting issues in renders.

2.21.7

Choose a tag to compare

@github-actions github-actions released this 23 Jul 16:26

Hotfix

  • Fixed the error that prevented save/render after switching display variants of widgets. (min_max_label_font required)

2.21.6

Choose a tag to compare

@github-actions github-actions released this 22 Jul 12:31

CSV parsing & better stability

NEW

  • CSV Parsing: OVRLEY now parses CSV files (I had logs generated by AiM, RaceChrono, Racebox, LapLegend, TrackAddict). This was quite an out-of-body experience, since there seems to be zero standard for CSV files and the headers can be named almost anything. There are even logs that do not include units for some metrics (like speed) and you just have to guess and hope for the best. I tried to make this as robust as possible and prioritize direct recordings over calculated values. If you have a CSV file that does not work properly, please let me know. Huge thanks to @v-ivanyshyn and Péter for providing me with a bunch of CSV files to test with.
  • VBO parsing: OVRLEY now parses VBO files (at least those generated by RaceChrono). There appears to be no standard for VBO files, and while I tried to make the parser robust, it is likely that some VBO files will not be processed correctly, e.g. metrics not parsed at all, or having weird values/units. If you have a problem, please let me know.
  • Route Map Data Processing: Introduced centripetal Catmull–Rom spline. Each Catmull–Rom segment is converted to cubic Bézier control points and then adaptively flattened to a polyline with certain tolerance. This makes the route maps look smoother and more natural, and especially helps with poor or sparse GPS data, e.g. short circuit laps with low GPS update rate. You can tune the smoothing and route detail with the sliders.
  • Lean Angle Widget: Added a new widget to display lean angle in degrees. This is useful for motorcycle and cycling videos where you want to show how much the bike is leaning during turns. When not available, OVRLEY tries to calculate it from gyro/acceleration data. For now only the text option is available.
  • RPM Widget: Added a widget to display engine RPM; text, linear bar, arc gauge or corner gauge.
  • Brake Position Widget: Added a widget to display brake position; text, linear bar, arc gauge or corner gauge.
  • Throttle Position Widget: Added a widget to display throttle position; text, linear bar, arc gauge or corner gauge.

IMPROVEMENTS

  • Encoding Pipeline: The encoding pipeline (~5K LOC) was essentially completely rewritten to a canonical workflow that can spawn multiple frame render workers. The old pipeline segmented the video/overlay into multiple segments, spawned a separate ffmpeg process for each segment, and then concatenated the segments. This apparently created issues, e.g. malformed files, for some users, especially for very long videos. The new pipeline is a single ffmpeg process fed by 1 or more workers depending on codec profile and the number of CPU cores available. In most cases, the performance is unchanged and the main benefit is robustness and (hopefully) stability, especially for MacOS users.
  • Resolution Autoswitch: Resolution of the canvas switches automatically to match the resolution of imported video. This helps with the resolution mismatch warning.
  • Canvas Panning: You can now move around the canvas when zoomed in using scroll and shift+scroll to move horizontally. Zooming in and out is still done with ctrl+scroll.
  • Export in Timeline: Added two buttons [ and ] to the timeline toolbar. This will set export start/end to the current playhead position. The current export range is now also displayed in the timeline and can be cleared with the x button. When exporting composite video, the export times are clamped to the video range - this prevents exporting empty black video frames. Transparent export range is still independent of the video range.
  • HEVC Codec Detection: OVRLEY now detects if your machines has HEVC codec and will provide instructions to install it if not. This should avoid confusion "why is my imported video black?".

BUG FIXES

  • Temporarily disabled parallel render workers for MacOS VideoToolbox due to stability issues. I am considering exposing the number of parallel jobs in the render settings in the future so that users can experiment with it themselves.
  • Gear widget now displays 'N' when the value is '0'.

2.17.2

Choose a tag to compare

@github-actions github-actions released this 15 Jul 14:48

NEW

  • Animated Gauges: Phase 1 of animated gauges is now complete. You can add linear, arc and corner gauges for most metrics. When adding a widget, OVRLEY will give you a choice of available options for that specific metric. The gauges are fully customizable including size, color, arc angle, corner radius, label font, borders and more. All 3 gauges also support a "fill" option which will fill the gauge with a color of your choice and "segmented bar" which gives an array of bars. Number of bars, gaps, border can also be customized. I tried testing them as much as I could. After fleshing out the kinks, I will start working on the next series. Here is a showcase of just some of the styles you can create with the new gauges:
gauge-showcase
  • .IGC flight-log parsing is now supported and extracts gps location, altitude, speed, true heading, vertical speed, and air temperature. It attempts to calculate the missing metrics when the IGC file does not provide them.

Improvements

  • Mute: Added ability to mute the video in preview player.
  • Pinning FFmpeg: Pinned FFmpeg version to 8.1.2 master instead of always using the latest. This also fixes NVIDIA+CUDA export producing green frames due a scale_cuda refactor in later commits which introduced this bug.

Bugfixes

  • Fixed a bug in some metric widgets where decimal places with value '0' were being trimmed and the values displayed as integers instead.
  • Fixed a bug where minimize/maximize/close buttons of the window were unresponsive.
  • Fixed broken template selection introduced by making the window draggable by the title bar.
  • Fixed a bug where hardware-accelerated export would sometimes result in a malformed video file that could not be played.
  • NVIDIA+CUDA export always produced a small green strip at the bottom/side of the video because of a weird NVIDIA spec (thanks NVIDIA for the prank!). Fixed by sheer creativity of metadata.
  • Some hardware-accelerated exports would lose 0-5 frames at the end due to stitching of parallel export jobs and audio packet mismatch. This is now fixed.
  • Some portrait videos are shot in landscape and only contain metadata for video players to rotate them (who knew?). Being unaware of this, OVRLEY would previously export them as a landscape, but now it correctly rotates them to portrait orientation.

2.13.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 15:51

KNOWN BUG: Selecting template from dropdown menu with mouse does not work, you can only select with keyboard. This is fixed in the next patch.

NEW

  • NLE-like timeline: The timeline and video playback have been completely reworked. The new timeline now behaves more like a non-linear video editor, showing the activity data and video as separate tracks, along with their relative duration and position. You can zoom the timeline using the toolbar buttons or by scrolling while hovering over the timeline axis. You can pan by clicking and dragging the tracks, or by using ctrl + scroll wheel. Clicking the timeline axis jumps the video/activity to that point in time.When custom export range is active, it shows up in the timeline as two green indicators and you can adjust the range by dragging them around.
image

  • Backdrops: You can now add backdrops behind your widgets to improve contrast between the data and the video. The first two available shapes are circle and rectangle, including corner rounding for rectangles, with more shapes coming soon. You can customize color, transparency, border thickness, border color, and more.

image

Improvements

  • Adding a widget with multiple available variants now opens a mini-menu, allowing you to choose which version to add.
  • Added the version number to the OVRLEY header, so you can easily see which version you are using.
  • Added drag support to the header, allowing the window to be moved by dragging it.
  • Continued general UI polish.

Bugfixes

  • Fixed an issue where the draggable area for metric widgets extended outside the selection box, making manipulation feel clunky and confusing
  • Clarified the error shown when activity data does not cover the full duration of the video - this was confusing many people..

2.10.9

Choose a tag to compare

@github-actions github-actions released this 30 Jun 18:23

NEW

  • MP4 telemetry: the first version of extracting telemetry embedded inside MP4 files rolls out. Most of the support is provided by telemetry-parser by AdrianEddy. These metrics are currently extracted - GPS, speed, altitude, heading, distance, acceleration and camera settings. If not available, OVRLEY tries to derive them. The data are culled to match GPS frequency. These are high-frequency updates 25-50Hz, and the noise might manifest as jitter in the values, i.e. constantly changing. The code is currently applying zero-phase smoothing, but this must be monitored and adjusted as needed. Since there is large number of camera models, I could obviously test this only in limited scope. This will have to rely on you to report any issues with your camera model - just open issue, ideally with a link to the footage.

  • More supported cameras: added support for cameras that telemetry-parser did not parse out of the box properly. Camera settings extractions is now more general. External GPS Remote Controller for DJI Action Cam 4/5/6 (embedded as AC004 tag) is now also supported.

  • Note on multiple data sources: GPX/FIT/SRT data are given a priority if both GPX/FIT/SRT and MP4 data are available. In such case, MP4 data are not used. I was thinking to allow you to cherry pick which source to use for which metric. The problem is these two sources use two different timelines, but OVRLEY uses just 1 timeline and reconciling them will require a massive rewrite. Tbh, how often this feature would really be used, so I am leaving this for later.

Improvements

  • Video sync: Video syncing should now be more robust. Since the telemetry is now extracted from the MP4 file, the video sync now also benefits from this. If available, the GPS/telemetry timestamps are used as the first option, metadata-derived values are used as a fallback.
  • Long exports at large resolution: thread_queue_size in ffmpeg is now resolution-aware, which should prevent some OOM crashes that happened for long exporting jobs at 8K. If this does not fully resolve the issue, please let me know - the next step is to limit the number of parallel encode jobs for large resolution and/or expose this setting in the UI, so you can adjust it manually.
  • Activity processing: the activity processing beyond initial import has been completely moved to Rust, this was necessary to consolidate it with the MP4 telemetry parsing. Might show tiny performance boost for extremely large activities, but probably just a maintenance benefit for me.
  • Resolution mismatch: made the resolution mistmatch warning explicit; it does not disable the render button anymore. Some of you have been running into this and it was confusing. I am thinking how to circumvent this altogether, but e.g. transparent overlays and templates need to be resolution-aware. I am not sure how to reconcile this.

Bugfixes

  • Resizing widgets: Heading tape widget introduced a bug in which the widgets would lose the position when resizing by dragging the corners. This is now fixed.
  • Portrait videos that were stubborn (i.e. relying on the video rotation metadata) now render in the correct orientation and are emitted as proper portrait videos.

2.8.1

Choose a tag to compare

@github-actions github-actions released this 27 Jun 16:19

NEW

  • Animated linear bar gauge: every metric widget can now render as a horizontal or vertical bar with configurable fill color, opacity, border, corner radius, and min/max labels. The display-type dropdown on each widget lets you pick between the bar gauge and plain text. This is the first of the 3 upcoming animated gauge types, each with two additional substyles.
  • Animated Heading tape widget: animated compass tape with selection of bearing indicators, rendered as a dedicated display type for 'heading' metric.
  • Heading metric: a new metric type for displaying the current heading in degrees, calculated from the GPS course over ground. This metric is available in the general category.
  • Distance metric: a new metric type for displaying the distance traveled/total distance. This metric is available in the general category.

Improvements

  • Export override: you can now override the default composite export when a video is imported to transparent export. This is done via a switch in the export dialog.
  • Export summary: the rendering progress dialog now displays a summary of the export settings of the ongoing job.
  • Time formats with seconds: four new time presets (time-24s, time-12s, date-time-24s, date-time-12s) for when you need second-level precision.
  • Font AA improvements: glyph rendering anti-aliasing has been tuned for crisper text .
  • Folder persistence: the file picker now remembers the last used folder for import of activity and video.
  • Template persistence: the app now remembers the last used template and loads it on startup.
  • Skia-safe bumped to 0.97.2: picks up upstream bug fixes and rendering improvements.
  • FFmpeg: MacOs version now uses binaries compiled on Apple Silicon, so there should be no more Rosetta warnings.

Bugfixes

  • Widget editor UI got a design pass for more unified styling, better readability, more consistent controls.
  • Player play/stop by spacebar now is now more consistent and works even when the player is not focused.
  • Selection-box is now correct when clicking and dragging on the canvas.
  • Canvas toolbar repositioned into the canvas area.
  • Shadow strength of 0 now produces no shadow at all, instead of rendering a copy of the element underneath.
  • Route and elevation maps show placeholder geometries when no GPS data is available, instead of disappearing entirely.
  • Route and elevation geometry calculation has been consolidated and ported fully to Rust, to ensure consistent geometry. The live preview still needs a follow-up pass to feel snappy after this change.
  • The warnings regarding video creation time have been rework to clarify that this is a warning, not an error, and that the video is still usable.
  • Fixed a bug where elevation progress line did not render properly when zoomed in.
  • Progress marker on the elevation graph no longer shows micro-jumps when on monotone elevation data.
  • MacOS version now displays native window title bar, instead of a custom title bar.
  • All widgets in the editor can now be collapsed

2.6.12

Choose a tag to compare

@github-actions github-actions released this 19 Jun 07:20

Linux: Added a linux build that is experimental. I tested on Ubuntu24 VM and I was able to load activity/video and export an overlay. The bundle size is unnecessarily large (nearly triple the size) - this is a known issue and will be fixed soon.

Fix: Video frame preview on macOS