Skip to content

Releases: poli0981/frameledger

FrameLedger 0.1.0-beta.23

Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 17:54
v0.1.0-beta.23
4c07baa

The twenty-third pre-release: a game's artwork on its page, in a band that takes the picture's colour, and pages
that open and change session without freezing.
The same unsigned installer: verify its hash against
SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.22: Help ▸ Check for updates, then Restart to update with no game running. The
Privacy Policy (2.11) is shown once for you to accept. No game is read again: the detection rules (2026.10.4) are
beta.22's. The artwork shows by itself for the games Steam or GOG GALAXY installed; Settings ▸ Games turns it, or
its colour, off.

Added

  • A game's page shows its artwork (owner request 2026-10-14, decisions D60/D61). At the top of the page: the
    banner and the cover the Steam or GOG GALAXY app already keeps on your PC for the game it installed — read where that
    app keeps them, never downloaded and never copied — or an image you choose yourself in Edit… ▸ Choose image… (a
    copy is kept in the data folder's covers folder; Use the store's image goes back). The band they sit in takes the
    picture's main colour, never so strongly that a text on it gets hard to read (primary and secondary text keep 4.5:1,
    the faintest 3:1, in both themes), and follows a theme switch. A game from itch, the Epic Games Launcher or another
    store has a picture only once you choose one, because those apps keep no image files. Settings ▸ Games has Show
    game artwork
    and Colour the game page from its artwork, both on. Privacy Policy 2.11 names the images read and
    the copies kept; FrameLedger still makes no request to any store.

Changed

  • The list of tested games has its first Vulkan game: Everhex Demo, measured through FrameLedger's Vulkan layer on
    2026-10-13 when Play started it directly (docs/LIST_GAME_TESTED.md, LIMITATIONS.md). Four places in the developer
    documents that described something never built, or kept a count that went stale, are corrected in place.

Fixed

  • A game's page opens and changes session without freezing the window (owner request 2026-10-14). Measured on the
    dev PC over a ledger shaped like the owner's (docs/spike-notes.md §21): a game with 100 sessions took 1.2–1.5 s to
    open — its Sessions list built every row, now only the rows on screen (it scrolls itself and hands the wheel to the
    page at its ends) — 0.37 s now; choosing a two-million-frame session froze the window 0.8–1.0 s — the session was read
    and decoded on the UI thread, then sorted three times for the Distribution tab — 17 ms now: it is read on the thread
    pool and what the charts need from all of it is worked out there once. The page also asks whether the game's .exe is
    on disk off the UI thread (a USB drive that sleeps answered on it), and no longer summarises every game to show one.
  • Each visit to the Dashboard or Logs no longer stays in memory. Every Dashboard ever opened stayed alive and kept
    listening to the capture agent, so at each session's end each one reloaded its lists and raised its own "Session
    saved" notice — twenty visits, twenty notices, the last one shown. The Dashboard listens only while it is on screen,
    and the notice has one home for the App's life, shown once whichever page is open; each Logs page kept its tail of up
    to 2 MB, twice.
  • The Logs page reads its file only when it changed, not every two seconds, and filters it off the UI thread; Play
    reads the stores' lists of installed games off the UI thread (Steam's manifests sit on whatever drive its libraries
    are on). At Debug level the App now logs how long each page took to appear (ui: page … shown … ms).
  • The native ring-buffer tests no longer pass or fail by the scheduler's luck (developers only). The
    hammering-writer test required the reader to keep more than half of the stream, which measured how the operating
    system scheduled two threads: on a hybrid Intel processor it failed 5 of 200 runs with the ring correct every time.
    Both concurrency tests now start the writer only once the reader is running, repeat until the reader really read
    the ring while the writer wrote it, and require that; the small-ring test's old check also passed a reader that
    started after the writer had finished (src/native/tests/ring_test.cpp).

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

71e017bafe0ccb0fe67d4a02519af0c89db6d998fd54b77c70d2580e9cd8c291  assets.win.json
b9c9f4ba8e7da25d4088f253835a8eb363f0fe6e85fdef40134c29a0161a90a0  FrameLedger.App-0.1.0-beta.23-delta.nupkg
89d2f6867c9fc888fbae03e4027e36dce58bc3f0985b56a9accb8283dfad7418  FrameLedger.App-0.1.0-beta.23-full.nupkg
9c90bd889dc9264ec4ce6a892ff27596c67ac759486cd718f599bbd81a374cc9  FrameLedger.App-win-Portable.zip
54e6c1b283106375c19ab07ee1f997d09a9bbe217545bc575ebae6b5412c24c7  FrameLedger.App-win-Setup.exe
b0fdfffa12f3b237d0f7157b4025cca5366b4bed8c5beb973ae1809930d71ed8  RELEASES
7d81ecbb505c7941e7d4ee330cf260beebbac9213020ddda3b66f93914569b71  releases.win.json

FrameLedger 0.1.0-beta.22

Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Oct 15:13
v0.1.0-beta.22
76e89b6

The twenty-second pre-release: a request the capture agent never answered is said as such, never as a crash. The
same unsigned installer: verify its hash against SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.21: Help ▸ Check for updates, then Restart to update with no game running. Nothing is
shown to accept and no game is read again: the legal documents and the detection rules (2026.10.4) are beta.21's.

Fixed

  • A request the capture agent never answered is said as such, never as a crash. When the agent stopped, or restarted
    for an update, while FrameLedger was asking it something, deleting sessions ended in the crash dialog, and turning a
    game's hooking on or off or making or withdrawing an anti-cheat exception showed IOException or TimeoutException as
    its notice. Each now says that the agent did not answer and that whether it was done is not known, and the page shows
    what is stored; Play says the same (it said the agent was not running). A request that could not be sent because the
    agent was already gone still says that nothing was changed (docs/07_IPC.md §Client behavior).

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

a50eed0bb69b987d0da159e990215fb685ed528ecba89ced31a9dca532310f7a  assets.win.json
c3f76fec147d43e0842cc3610d2a812bb0c17b8c995ddbd9bdaf8e47c60d7599  FrameLedger.App-0.1.0-beta.22-delta.nupkg
384b000bec1458974d62bc3f4ce118d199322ed51a597c6d8588768652c116f5  FrameLedger.App-0.1.0-beta.22-full.nupkg
c5a65520e6d4f46a8ba3a729f54995316dd3900b2b4f32ae1eacda8f4d6dcda1  FrameLedger.App-win-Portable.zip
280feb78554eefa9ad03fc9e9222bb0fe179aa1f6f607a1f5e159850b65b2b28  FrameLedger.App-win-Setup.exe
86f7fb5871283e5b70bcbad52d5391018c4217d9bf6059ec0810d1ea4ede82e8  RELEASES
573001278ccae50697f4cadb0b4957411e52307419f868538e40af89e115c8e5  releases.win.json

FrameLedger 0.1.0-beta.21

Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Oct 14:40
v0.1.0-beta.21
86dffa6

The twenty-first pre-release: an anti-cheat kept beside a game's executable found before anything is injected, four
itch.io downloads that carry malware, documents that scroll further and smoothly, and Play.
The same unsigned
installer: verify its hash against SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.20: Help ▸ Check for updates, then Restart to update with no game running. The Privacy
Policy (2.10) is shown once for you to accept. Every game is read and checked for anti-cheat once more (detection rules
2026.10.4): Wuthering Waves, and any game that keeps an anti-cheat beside its executable, has its hooking turned off.
If you installed HELLO, HELLO WORLD!, A Doll's Locket - Remake, City of Bones or Träumerei Chapter 2 from itch.io, read
Security below first.

Added

  • Play, on a game's page and on each game in the library. Through the store that installed the game — Steam or the
    Epic Games Launcher starts it, GOG GALAXY runs it, the itch app asks which copy to launch — or started directly by
    FrameLedger, recorded from its first frame: Settings ▸ Games ▸ Play button switches between the two. A game no
    store installed, and a GOG game without GOG GALAXY, is started directly. FrameLedger never starts a game as
    administrator: Start directly does not start one that asks for it, and while FrameLedger itself runs as
    administrator, Play starts every game directly so that the game does not. A game whose recording is off is started
    only through its store. The Epic Games Launcher's link is the one its own shortcuts carry and has not been tried on a
    real Epic game yet (docs/08_UI.md §Games).
  • The Privacy Policy (version 2.10) names the store records Play and the library import read — the lists of installed
    games the Steam, GOG GALAXY, Epic Games and itch apps keep on your disk, and where GOG GALAXY is installed; the import
    read the Epic and itch lists before and the policy did not say so — and that Play hands a game to its store's app,
    which may connect to its store while FrameLedger itself connects to nothing. It is shown once for you to accept.

Changed

  • The documents in the app scroll further and smoothly — the user guide, Help ▸ Limitations, About's documents, the
    Legal Gate and the update notes. A wheel notch moved them a fixed short step whatever the wheel or touchpad sent;
    it now moves the number of lines Windows is set to scroll (a screen if it is set to that), about twice as far by
    default, in proportion for a touchpad, and glides there unless Windows' animations are off. At the end of the update
    notes the wheel scrolls the window instead; Ctrl+wheel still zooms. A page is drawn once when it is opened, not two or
    three times, and going back to a page you have read in the same window is immediate.

Fixed

  • An anti-cheat kept beside a game's executable is found before anything is injected. The safety check looked three folder
    levels into a game's install folder and no further, so an anti-cheat beside an executable that is itself three levels down
    was never seen: Wuthering Waves keeps Tencent's Anti-Cheat Expert in Client\Binaries\Win64\AntiCheatExpert\, its
    page read clean, and a session with hooking turned on was hooked for 37 seconds before the check that runs every 30 seconds
    met the anti-cheat's driver — and because a driver counts for the whole PC, the game's hooking stayed on. The check now also
    looks in the executable's own folder, on the game's page and before every injection. Wuthering Waves is also named by its
    Steam id (owner decision D58), and ACE's files, its second driver, its driver's service and its module are named (detection
    rules 2026.10.4). Every game is checked for anti-cheat once more after the update; one found this way has its hooking
    turned off, as any finding does (docs/19_SAFETY_AND_ANTICHEAT.md §Pre-injection checks, item 4).
  • A game's Supports card said Not scanned yet for a game the agent had read whenever the game ships none of the
    upscaler, frame-generation or Vulkan files the rules name — beside a Details card the same read had filled. It says
    so now only until the agent has read the game, then None found.

Security

  • Four itch.io downloads this project's documentation used as examples carry malware. HELLO, HELLO WORLD!, A Doll's
    Locket - Remake, City of Bones and Träumerei Chapter 2 put the same 213 MB program in front of their RPG Maker game.
    Read without running it, it ships a registry file that switches off Windows' script scanning (AMSI) and adds
    Microsoft Defender exclusions, carries an encrypted payload, and checks for virtual machines and debuggers before it
    starts the game. The documentation called it a launcher and, for A Doll's Locket, said to measure it with the agent
    running as administrator: that advice is withdrawn. If you installed one of them, remove it and scan your PC.
    FrameLedger itself does not change: it reads a game's files to find its engine and anti-cheat, and does not judge
    whether a game is safe (docs/spike-notes.md §20).

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

2ca88c176c2e0ec6b290572f27a426ec38f485e8c39aee5a22c9c707ec7ea730  assets.win.json
195fe24e62ee4ad794ff5f7d21a5526e51326be4f6f9b15ddb84fef98d2f13b9  FrameLedger.App-0.1.0-beta.21-delta.nupkg
807cffe4ffb27b7e123a4b5748b7e5bf1653f3ba608d903df9b9be315f3f5033  FrameLedger.App-0.1.0-beta.21-full.nupkg
41dd014c5acf8d88618115acd329dfca264a219df49f10d535cb57b03791c9ba  FrameLedger.App-win-Portable.zip
730b8c473b383b017c42bc0bb28c8b56d49a35232b8c332aed85e3222c4f012c  FrameLedger.App-win-Setup.exe
8dd341a5e1c482a828924d0d611eb739ba97d66a2504e1c0b0363bbd81a98a81  RELEASES
34040f8c725f8a9796a1fde56ae48acf42ed8d3d2b721a38b627bece848662a8  releases.win.json

FrameLedger 0.1.0-beta.20

Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Oct 12:33
v0.1.0-beta.20
57a4288

The twentieth pre-release: the engine version of Ren'Py games. The same unsigned installer: verify its hash against
SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.19: Help ▸ Check for updates, then Restart to update with no game running. The Privacy
Policy (2.9) is shown once for you to accept. Every game is read once more for its engine (detection rules 2026.10.3).

Added

  • The engine version of Ren'Py games, as Unity's, Godot's and RPG Maker's have been shown since beta.19 — on the game's
    page with what it was read from, the engine's own renpy/vc_version.py: Ren'Py 8.5.0. A game whose engine names no
    version there reads as not found. Every game is read once more after the update (detection rules 2026.10.3;
    docs/05_DETECTION.md §Engine version — Ren'Py).
  • The Privacy Policy (version 2.9) names that file among the version marks it reads; it is shown once for you to
    accept.

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

009a8816d15e8734aaffcf9bd90dd891c56c44854be66fbbb90fc5fd52a55fb3  assets.win.json
9b90cdb4318aa1cea20cec4b54b28a1b3e2b85bc56aec55af4bcc1b0e0c2e4a9  FrameLedger.App-0.1.0-beta.20-delta.nupkg
28016491f649349f13b341e6d201ab7680e48f66e2e67feec374d50dff7c4df7  FrameLedger.App-0.1.0-beta.20-full.nupkg
4c20ca344b45e38d06fd22b4de8e8d7cedd3cfd295ae535718752a232df63c81  FrameLedger.App-win-Portable.zip
beb374f20a6c3eb4195cec6495b3962be6f4f3cfe0f21ff147c2c7e4e43ec98d  FrameLedger.App-win-Setup.exe
371c22aa7441656be5c608bff37b22a6be9706528e3b8c8c6a5193d82f9e6824  RELEASES
599706d3c240a8fb713a2a768fd7e02a414b890f9a11cc6d545b58c13666e1fb  releases.win.json

FrameLedger 0.1.0-beta.19

Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Oct 10:25
v0.1.0-beta.19
3e9028c

The nineteenth pre-release: an imported game that is its own runtime and not a helper, Change executable… in the game's
folder, the engine version of Unity, Godot and RPG Maker games, and games you uninstalled leaving the library by
themselves.
The same unsigned installer: verify its hash against SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.18: Help ▸ Check for updates, then Restart to update with no game running. The Privacy
Policy (2.8) is shown once for you to accept. Every game is read once more for its engine (detection rules 2026.10.2).
The agent removes the entries of games you uninstalled that have no sessions, about ten minutes after it sees them gone —
turn Settings ▸ Data ▸ Remove uninstalled games off first if you want them kept. An entry an earlier import made for a
helper is not changed: re-point it with Change executable….

Added

  • The engine version of Unity, Godot and RPG Maker games, as Unreal Engine's has been shown since beta.10 — on the game's
    page with what it was read from, and the maker on the library card too: Unity 2022.3.39f1 (from the player library,
    else its data file; a game whose data file is encrypted reads without the release letter, 2019.4.40), Godot 4.4.1
    (from its data pack), RPG Maker MZ 1.10.0 and MV 1.6.2 (from the core script), RPG Maker VX Ace (RGSS 3.0.1)
    (from the runtime library its Game.ini names — that number is the library's, not the editor's). A Unity version used
    to read as its library's build number (2022.3.39.5118735), and a Godot one was never found. Every game is read once
    more after the update (detection rules 2026.10.2). RPG Maker 2000/2003 is not recognised (docs/05_DETECTION.md
    §Engine version — Unity, Godot, RPG Maker).
  • The Privacy Policy (version 2.8) names the files those versions are read from, and two that were already read and
    never named (Unity's player library and an RPG Maker game's title); it is shown once for you to accept.
  • A game you uninstalled leaves the library by itself when it has no sessions: the agent removes an entry whose .exe
    has been gone for ten minutes, if its drive is connected and the folder it was installed in is still there — an
    unplugged or re-lettered drive never counts — and never one where anti-cheat was found. A game with sessions stays, with
    them, and reads Not installed as before. The Games page says so when it happens — once, naming them, for all the games
    one check removes; Settings ▸ Data ▸ Remove uninstalled games turns it off (docs/02_SPEC.md FR-1.8).

Changed

  • Change executable… opens in the game's own folder — the install folder a store made (steamapps\common\<game>
    and the like), or above an Unreal game's Binaries\Win64, else the folder the executable is in — instead of wherever
    the last file dialog was. For a game whose folder is gone it opens at the nearest folder still there
    (docs/08_UI.md §Games).

Fixed

  • An imported game is no longer one of its helpers, and an RPG Maker MV/MZ game behind a launcher is its runtime.
    A Doll's Locket - Remake (itch) was added as notification_helper.exe, NW.js's notification helper, because the itch
    app's own record named only that file (it leaves out a launcher that asks for administrator and anything a folder
    deeper) and the import took it as the game. A helper named by the store is skipped now and the executable is guessed —
    the import list says so — and the guess takes the executable beside NW.js's nw.dll and package.json, the process
    that draws (css\Game.exe there; its launcher asks for administrator, so it is measured with Run the agent as
    administrator
    on). The import also no longer offers a store's game again when the library has it at another
    executable: an entry already there is re-pointed with Change executable… (docs/05_DETECTION.md §Library import).
  • The Games page shows its newest read of the library. When two reads overlapped — a session ending while an import
    added games — the one that started first could finish last and be shown, an older list until the next read.

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

87de7e9a69b528aa4cafc7dc50139970b55a505f501568770ce6fa41086b6df2  assets.win.json
084cf480641da16cd0a4da59fa4ff528763e5258800255a6c36001c796a8f0ec  FrameLedger.App-0.1.0-beta.19-delta.nupkg
a4b082b3f633e71f073584cc4b63844583da5386c1087e6191c4346652ab58e2  FrameLedger.App-0.1.0-beta.19-full.nupkg
50858fa45e67abceba20f0376f735358f44bfc4e564e30c36817f30903c1e47c  FrameLedger.App-win-Portable.zip
859e88aa391292f7b977d4aa0f68fb3a9bfcbbe8cbab8b9c2653ac4bf53f32ad  FrameLedger.App-win-Setup.exe
2b03f091279d35fb98ba4bf34ccb84f641f440c0e0f05f27eb8d013ea51b8ab9  RELEASES
c556617aaebe5bb515e862902106b85f644ddbc4c915c53884b2908a1b69ab8a  releases.win.json

FrameLedger 0.1.0-beta.18

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Oct 17:21
v0.1.0-beta.18
6ed7851

The eighteenth pre-release: every page readable in the dark theme, notices that say what happened in words, and a
release whose build no longer calls itself dirty.
The same unsigned installer: verify its hash against
SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.17: Help ▸ Check for updates, then Restart to update with no game running. Nothing in
the database changes and nothing is shown again for you to accept; sessions already stored keep their status.

Fixed

  • Page titles and section headings read in the dark theme again. Every page's title and its section headings — Dashboard,
    Recent sessions, Games, Compare, Settings and each of its groups, Logs — were drawn near-black on the dark window
    (owner's screenshots of beta.17; beta.16 had it too). A page is shown in WPF UI's navigation Frame, which passes no text
    colour into the page, and a text that sets none is black; a page open during a theme switch picked the right colour up,
    and the next one navigated to did not. Every page now sets the theme's text colour itself. AccessibilityTests.EveryPageSetsItsOwnTextColour
    and PagesLoadTests.EveryTextIsReadableInBothThemes (every surface hosted as the App hosts it, ≥ 3:1 in both themes)
    went red on the unfixed pages first; the theme-switch check now hosts pages in the Frame too, and its harness derives the
    accent for each theme as the App does (docs/08_UI.md §Contrast, docs/16_WPFUI_SYNTAX.md §Gotchas, docs/14_TESTING.md).
  • Every notice says what happened in words. With Disable all hooking on, a game's notice read "kill switch was
    detected in this game (the global 'disable all hooking' switch is on (FR-2.4); …)" — it reads "All hooking is switched
    off in Settings, so nothing was measured." now, and a game blocked before reads as that, not as a finding. A refusal no
    anti-cheat names read "… reason RefusedByGuard." and is said in the guard's words ("the game is 32-bit, and the hook
    runs in 64-bit games only"); the agent sends the guard's reason for every refusal (docs/07_IPC.md). A safety re-scan
    that could not look while the game ran read "Access is denied. was detected" and says the check could not be made. And
    Measurement stopped printed "The hook stopped (WriterSelfDisabled); the session continues without measuring." — it
    says why in a sentence, and no longer that the session went on: a stop ends it. NoticesFromTheAgentTests builds the
    agent's own events for every refusal and every stop and went red with each text above (docs/08_UI.md §Notifications policy).
  • Disable all hooking says when it applies. Turning it on said "The capture agent reads it at the next session start";
    a game being measured stops at its next safety scan, within 30 seconds, and the message says so.
  • Turning hooking off with no agent says nothing changed — Settings' Turn off, the game page's switch and a
    withdrawn exception said "Nothing was enabled.", the enabling path's words.
  • A viewer over a copy leaves every agent setting alone. The user-mode exception option, the three Recording numbers
    and the update channel stayed live in --data-dir, where no agent reads them (ViewerModeTests).
  • docs/08_UI.md listed a "PawnIO missing" banner that was never built; struck, with the banners that do exist.
  • A release's overlay build no longer calls itself dirty. The Dashboard read Overlay build v0.1.0-beta.17-dirty (and
    beta.16's, and every release's before): the release workflow writes the release date into the legal documents before
    the build, and the build id was read from the tree after that. It is read from the clean checkout first and handed to
    the build, and tools/buildid-check.ps1 reads it back out of the published binaries (docs/12_BUILD.md §Release-time
    token substitution). Nothing changes for a game: both sides of the ring's handshake always carried the same id.
  • Two end-to-end tests no longer fail CI by a race (developers only). The Vulkan launch test asks the test harness
    whether this machine can present through Vulkan before it starts the capture host: on GitHub's runners the harness's
    own "skip" line never reached the host's output, and a scan of the exiting harness failed the test instead of skipping
    it. The target-exit test holds its harness 15 seconds instead of 6, the margin a slow runner's host needed
    (docs/13_CI_CD.md).

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

b010d980b39708a3401d34257382d309fe0469cc7c0cb21ef14e524332e45d5a  assets.win.json
5b5bdfe89e82d5a7e2ce7fc930f5784b7526e7704e564160dd76e6f4c512ede6  FrameLedger.App-0.1.0-beta.18-delta.nupkg
8d67ae427a5c2107de021ae4f66d4ed9a5aa83526a581f1b040d47ca870fa578  FrameLedger.App-0.1.0-beta.18-full.nupkg
b8a09d53f72adad676b0fab113f684df58c93888ba3a274e5ea5ba078693b292  FrameLedger.App-win-Portable.zip
3d93804459f51500de9605dd6598443f180ee68bc9d80c993f4b0a50aafb6e6c  FrameLedger.App-win-Setup.exe
1f502a4554623b647ab57a63e11b347bf5e0b0e93033a331152156c3ea19652e  RELEASES
fde0f774515c3446655c9fc6f599c2af645de78bc248a37c952642b45ca56683  releases.win.json

FrameLedger 0.1.0-beta.17

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Oct 11:29
v0.1.0-beta.17
15b4c6b

The seventeenth pre-release: text that keeps up with a change of theme, scroll bars hidden everywhere when you ask, a
user guide that answers more, and a wiki.
The same unsigned installer: verify its hash against SHA256SUMS.txt, then
More info → Run anyway.

Updating from 0.1.0-beta.16: Help ▸ Check for updates, then Restart to update with no game running. Nothing in
the database changes and nothing is shown again for you to accept; sessions already stored keep their status.

Fixed

  • Text keeps up with a change of theme. After switching between Light and Dark, the descriptions and captions of the
    page in view — Settings above all, where the theme is chosen — kept the old theme's colour: light grey on white, or dark
    grey on dark. Every such text now follows the switch, on every page, window and dialog (08_UI §Contrast,
    16_WPFUI_SYNTAX §Gotchas).
  • Hide scroll bars hides every scroll bar. With Settings ▸ Window ▸ Hide scroll bars on, the Dashboard still drew its
    scroll bar — and so did the first run, About, the user guide and a game's wide sessions table; only screens with a
    switch or a tick box on them lost theirs. Every scroller follows the option now, and still scrolls with the wheel, the
    keyboard and touch (08_UI §Settings, 16_WPFUI_SYNTAX §Gotchas).
  • The first run names the right place to import your library. Its last step said File ▸ Import library… on the
    Games page
    ; File is the main window's menu, and the Games page has no such button. In Vietnamese it now names the menu
    as it is shown (Tệp).

Added

  • The user guide looks things up too. Four pages join it, in Help ▸ User guide: The screens (every page, menu,
    button and shortcut), Every setting (what each one does and its default), When something goes wrong (what you see,
    what it means, what to do) and Words FrameLedger uses. Tests now fail when a setting or a menu item is added without
    its line in the guide, or a link names a section that does not exist.
  • A wiki. The project's wiki has two halves: the user guide, the
    same pages the app shows, and short pages for developers — the architecture, the repository, building and testing,
    the rules every change keeps, capture, metrics, data, the app's UI and releasing — each linking to its full document.
    It is published from the repository whenever a release is made (wiki.yml), so it always matches the newest
    release, and ./build.ps1 check fails on any link in it that leads nowhere (13_CI_CD §wiki.yml).

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

ee84cdcfac8ea9eccec80c4e8b4e19226e763045e1dcd8ab367744f412d846de  assets.win.json
31ec505611e2a195ebc750bd753efd01d4c9d9926fd44eb262e9e9234f99f9bf  FrameLedger.App-0.1.0-beta.17-delta.nupkg
9ee0fa3f285f29ad19fc1fcdb3e36939e34554defcfc3fa79971d31f28fb3645  FrameLedger.App-0.1.0-beta.17-full.nupkg
19c34e9d0cfec59b724e8ff61ddd2bca50be86838a0275a602f81b628d715f5d  FrameLedger.App-win-Portable.zip
d3d935e86493c50ed9585d74c2b39fb16f5822312e28b7102fa74c67023a11d5  FrameLedger.App-win-Setup.exe
719336632725acf603c730dee270cae0c2360ed4058bcbe5eccbc97ddf562c37  RELEASES
a579be9f8f8c03c7e8f6963164d06d1b2eb4722042c273db8d37db7872a27d88  releases.win.json

FrameLedger 0.1.0-beta.16

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 07:30
v0.1.0-beta.16
cf4a1ac

The sixteenth pre-release: nothing changes in the app. It is 0.1.0-beta.15 as the owner verified it on real hardware
the same day, with the developers' end-to-end tests made reliable. The same unsigned installer: verify its hash against
SHA256SUMS.txt, then More info → Run anyway.

Updating from 0.1.0-beta.15: Help ▸ Check for updates, then Restart to update with no game running. Nothing in
the database changes and nothing is shown again for you to accept; sessions already stored keep their status.

Fixed

  • Development: the Agent's and the capture host's end-to-end tests no longer fail when another test project starts
    the test harness at the same moment.
    Each such suite now records into a copy of the harness under a name of its
    own, so the target it asks for is never ambiguous (14_TESTING). Nothing in the app changes.

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

cf571a1f02ed493e4965aa118b6222696a3088b2ec3e2573bf807862aa6426b4  assets.win.json
7203cba7bab0707c31645fff545a4aa0bb87be28b04119d5618bdd5f0b7d0f10  FrameLedger.App-0.1.0-beta.16-delta.nupkg
51bc19fb986eb4e4ae243bb94e7afcc628a9fb2b7365b8d8136df738f80eb981  FrameLedger.App-0.1.0-beta.16-full.nupkg
60be7624af2f3eb8391783956b8f93c8f60e9583730d2d4dd7d53c274eef061d  FrameLedger.App-win-Portable.zip
ffcd11f78e9dfedeab23f0ec0e5a41c1f7d9f8485fc0989aa167aa047133cc57  FrameLedger.App-win-Setup.exe
f5bedbd8032badbda7205ae312352440ce075ec2ec292ae98724c54bdcb7866f  RELEASES
033f4754556d8b61d8ad5c5b5d52c22536f04db94ee0faf0e0a9959c619c4268  releases.win.json

FrameLedger 0.1.0-beta.15

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 06:21
v0.1.0-beta.15
bfd5238

The fifteenth pre-release: a quick restart recorded, an anti-cheat check that stays on the game's own programs, a
change of language that reaches every list, and a launcher followed to its game.
The same unsigned installer: verify
its hash against SHA256SUMS.txt, then More info → Run anyway. What changed for a user:

  • A game started again a few seconds after closing is recorded — while the session before it was being saved, the
    new start used to be turned away and never looked at again.
  • The anti-cheat check stays on the game's own programs. Windows reuses process numbers, and a program that had
    taken over the number of a game's closed launcher could be scanned as part of the game — refusing the session, or
    turning the game's measuring off. It no longer is.
  • A change of language reaches every list at once — the theme and update-channel lists, the Logs page, the Games
    sort order, the tray's menu and the Agent's status — without a restart.
  • A game started through its launcher is followed to the game itself (the Agent's console launch).
  • FrameLedger.exe --data-dir <folder> opens a copy of a data folder to look at, with no Agent and nothing on the PC
    changed.

Updating from 0.1.0-beta.14: Help ▸ Check for updates, then Restart to update with no game running — FrameLedger
stops its Agent before the update is applied. Nothing in the database changes and nothing is shown again for you to
accept; sessions already stored keep their status.

Added

  • FrameLedger.exe --data-dir <folder> opens a copy of a data folder to look at, for checking a build of your own
    against real data without touching your own. Such a window starts and contacts no Agent, records nothing and changes
    nothing on the PC — the controls that would are disabled, and a banner says whose data it shows. It refuses
    FrameLedger's own folder.

Fixed

  • The anti-cheat check could scan a program that had nothing to do with the game: Windows reuses process numbers, and
    once a game's launcher had closed, the check followed its number to whatever program held it now — a protected one
    refused the session, one carrying anti-cheat turned the game's measuring off for good. A program started after the game
    is no longer taken for its launcher, nor one started before the game for its child; when FrameLedger cannot read when a
    program started, it still scans it, as before.
  • A game started again within a few seconds of closing was not recorded: while FrameLedger was still saving the
    session that had just ended, the new start was turned away ("one session at a time") and never looked at again. It is
    recorded now, as soon as the session before it is saved — unless the game's other processes are still running beside
    it, as a multi-process game's helpers are.
  • A game started through its launcher was never followed to the game itself (the Agent's --console launch): when
    the launcher exited or never drew a frame, FrameLedger was to find the game the launcher had started and record it, and
    it never did — the launcher's process id was not passed on, so the search stopped before it began. It is passed on now,
    and a launch that ends without one says so in the log.
  • After a change of language some text stayed in the old one until FrameLedger restarted: the theme and update-channel
    lists in Settings, the log and level lists on the Logs page, the sort order on the Games page, the tray icon's menu and
    the Agent's status in the title bar. They follow the language at once now.

SHA-256

Releases are not code-signed (11_UPDATER). Verify before running:

63826bb2654caf09c05de18ec3935dd91ef066f37bafd4bb0037e50f45507f53  assets.win.json
782b8e6928eca20106f47a6531c6fe70e47b1b0c449318c5dbd7dcea624ca7e7  FrameLedger.App-0.1.0-beta.15-delta.nupkg
d082e13fda91b965310cfa8fc8da60bdbbffbabfecf63d95416f71d0927b660b  FrameLedger.App-0.1.0-beta.15-full.nupkg
cb0df821799f04d4d5f16306fc32ba44d31973a20367daa69fb41b7f682f2454  FrameLedger.App-win-Portable.zip
ca2d78f7dfe4d8980d59d1d04fd336391bbf9d609de02e50c0aef3444d39e376  FrameLedger.App-win-Setup.exe
9b0f28bc953a664a3e25fe2464cd7e16cd0dd9bb3e6ebf96ee75271bcd159d47  RELEASES
31536b98e59c49df4cf5703bc02e2e5ac8a2c8d7888c6572eecf962f3329b1c4  releases.win.json

FrameLedger 0.1.0-beta.14

Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Oct 22:28
v0.1.0-beta.14
68f115d

The fourteenth pre-release: a wheel that scrolls, updates that find this channel and wait for your games, crashes told
apart from memory reports, and new measurements.
The same unsigned installer: verify its hash against
SHA256SUMS.txt, then More info → Run anyway. What changed for a user:

  • The mouse wheel scrolls every page, dialog and chart; over a chart the wheel scrolls the page and Ctrl+wheel
    zooms the chart. Settings ▸ Window ▸ Hide scroll bars draws no bar and still scrolls. The import list is readable
    in the dark theme.
  • Updates come from the channel of the copy you run — a beta looks for betas — and are never applied on their own
    when the App starts; restarting to update waits while a game FrameLedger measured is still running, and says so.
  • A game that crashed reads crashed, and only then: a Windows memory report about a game no longer counts as a
    crash, and an Unreal Engine game that opens its crash reporter and closes is recorded as crashed, the reporter named.
  • A game starting up or closing during FrameLedger's anti-cheat check is read again once instead of refused, and a
    check that could not read a game that had already closed ends the session as the game's own exit.
  • New in every session's summary: time below 30 and 60 FPS and below the monitor's refresh rate, how even the frames
    were, VSync and tearing, the graphics card's clocks, fan and memory temperature, how much of the time its power limit
    or heat held it back (NVIDIA), frames per watt, and a render scale chart. Trend and Compare have them too.
  • FrameLedger's own programs say what they are in Explorer and Task Manager (FrameLedger Agent).

Updating from 0.1.0-beta.13:

  1. First choose Beta in Settings ▸ Updates. beta.13 looks for stable releases by default, and every release so far
    is a pre-release, so it finds nothing until you do. From beta.14 on the channel follows the copy you run.
  2. Update with no game running. beta.13 still applies a downloaded update the next time the App starts, stopping the
    Agent to do it; beta.14 no longer does.
  3. The database is migrated in place (schema 0019, new columns only). An earlier version cannot open it afterwards.
  4. Sessions already stored keep their status — a few may still read crashed because Windows logged a memory report
    about the game. The Privacy Policy (version 2.7) is shown once for you to accept.

Added

  • Settings ▸ Window ▸ Hide scroll bars. No scroll bar is drawn anywhere in the app while it is on, and everything
    still scrolls with the mouse wheel, the keyboard and touch. Off by default; it applies at once, to the open windows
    too, and off brings every bar back.

  • New measurements in every session (recorded from this version on; earlier sessions read N/A):

    • time below 30 FPS, below 60 FPS and below the monitor's refresh rate, and how much one frame's time differs from
      the next. A game held at its frame limit is not counted as dropping below it for the small wobble every frame limit
      has — on the developer's machine a game capped at 60 read half its time "below 60" by the plain rule;
    • VSync and tearing: how many of the game's frames asked to wait for the display, and how many allowed tearing
      (Direct3D games);
    • the graphics card's clock speeds, fan speed and memory temperature, and — on NVIDIA cards — how much of the time
      its power limit or its temperature held it back;
    • frames per watt: the game's own frames per second for each watt the graphics card drew, never counting generated
      frames.

    The session's sensor statistics table shows the new card readings in their own units. The database is migrated in
    place (schema 0019), and an earlier version cannot open it afterwards.

  • Where the new measurements are shown: the session summary has a card for each (the 1% low card also shows the
    displayed frames' 1% low when frame generation was counted, beside the game's own), a Render scale chart — the
    share of the screen's resolution the game rendered at, over the session — and a Clocks and fan chart under
    Sensors, with the moments the card was held back shaded; the card's memory temperature joins the temperatures chart.
    A game's Trend has nine more metrics and Compare nine more rows, where a figure taken over presents says
    (presented) beside one taken over the game's own frames. The Latency tab is shown only for a game with a session
    that measured latency — none does yet.

Fixed

  • A session could read "crashed" when the game had not crashed, and an Unreal game's crash read "ended normally".
    Any Windows report that named the game counted as a crash — on the developer's machine a memory-leak report Windows
    writes about large games marked an ordinary The Witcher 3 session crashed; hang reports and another program whose
    name contains the game's would have done the same. Only a crash report of this game's own process counts now. And
    Unreal Engine games handle their own crash: they open their crash reporter and exit with code 3, which said nothing;
    FrameLedger now sees the crash reporter a game starts (Unreal's, CD PROJEKT RED's, Capcom's, BugSplat's) and records
    the session as crashed when the game exits within a minute of it — the summary names the reporter. Unity's and
    Chromium's crash handlers start with their game and are never taken for a crash. Sessions already stored keep their
    status. BugSplat's sender (Kingdom Come: Deliverance II) can no longer be picked as a game's executable by the import.
    The Privacy Policy (2.7) now says that FrameLedger reads Windows' crash reports and the names of programs a game starts.
  • A game that exited as FrameLedger's anti-cheat check ran could be recorded as "unhooked (safety)" — and, under a
    user-mode anti-cheat exception, end the exception's trial for good. The check reads every process in the game's
    tree every 30 s; one that was just starting (an engine's crash reporter as its game dies, any helper the game launched
    a moment before) or already gone could not be read, and the check refused. Such a process is now read once more a
    quarter of a second later, and refused only if it is still unreadable (a protected process never gets the second
    look). And when the check could not read and the game itself has exited, the session ends as that exit, normal or
    crashed by its exit code. Anything the check finds is a refusal exactly as before (owner decision D48).
  • An installed copy never found an update unless you had changed its channel. The update channel was Stable by
    default and every FrameLedger release so far is a pre-release, so the check found nothing. The channel is now
    Automatic: a pre-release looks for pre-releases and a release for releases; choosing Stable or Beta still decides.
  • A downloaded update was applied the next time FrameLedger started, before anything could check for a running game.
    The update library applies a waiting package at start unless told not to, and nothing told it: it stopped the capture
    agent mid-session instead of letting it finish. The App now offers such a package as Restart to update, which waits
    for the session to end and stops the agent properly, as it always did for a download in the same run.
  • The update dialog said ~102 MB when the download was the 1.6 MB delta. It now says the delta's size and names the
    full package as the fallback; the updater's own lines are in the App's log, so a full download shows there.
  • Restart to update could fail half way when a game FrameLedger had measured was still running — its loaded overlay
    cannot be replaced — or when an agent was still waiting on the administrator prompt, and it gave the agent 10 s to stop
    where the agent takes up to 15. It waits for all three now and says why. A full disk no longer reads as "offline",
    and uninstalling removes the Start FrameLedger with Windows entry.
  • The import list was unreadable in the dark theme. File ▸ Import library (and Games ▸ Refresh) drew every row white
    with white text, and each tick box as a sliver at the row's edge: a row style added in beta.11 to dim the games already
    in the library fell through to Windows' own row, which is white in every theme, and WPF UI's check box is too wide for
    its 40 px column. The rows take the theme's colours again and the boxes are whole, and the list is the one thing in the
    dialog that scrolls — its intro and the count under it stay in view, where a list scrolling inside a scrolling dialog
    used to carry the intro away. Compare's session picker draws the theme's check boxes too (it drew Windows' old ones).
  • The mouse wheel scrolled nothing on the Dashboard, Games, a game's page, Compare and Settings — only dragging the
    scroll bar did. WPF UI wraps a page in a scroller of its own unless the page says otherwise, and inside it each page's
    own scroller had nothing to scroll and still took every wheel. Every page scrolls itself now. The Logs page had the same
    cause: its tail grew to hold every line and never followed the newest one, as it was meant to. A scroller inside a
    dialog (the consent, administrator, anti-cheat exception and bug report dialogs) hands the wheel on at its ends.
  • The chart-wheel test read the real keyboard (developers): a Ctrl held anywhere on the machine while the test ran
    turned its plain wheel into a zoom, and a local gate went red once. The keys held are now the test's own input, and the
    Ctrl+wheel half is driven end to end as well.

Changed

  • Over a chart, the wheel scrolls the page; Ctrl+wheel zooms the chart. ScottPlot zoomed on every wheel, which with
    the pages scrolling again would have zoomed the chart and scrolled the page at once. Dragging still pans and
    double-click still resets.
  • FrameLedger's own programs say what they are. In Explorer (...
Read more