guide
Using JoltCracker
Jolt reads Minecraft's tick counter off the hunger bar and the hearts in a video and reports where the counter and the video clock disagree: cuts, lag, a second game window. This guide covers the window, how the hearts and the hunger bar give the tick away, typing jolts in by hand, the graphics card decoding, and what to do when something goes wrong.
Starting it
Jolt is one file, jolt.exe. Put it in a folder of its own, it keeps the tools it downloads next to itself.
- Double click it and the window opens. A console window shows for a moment first.
- Drop a video file on
jolt.exeand the window opens with that video filled in. Files can also be dropped on the open window. - From a terminal it works too:
jolt VIDEO_OR_LINK [options]. The options are at the end of this guide.
The first scan needs ffmpeg. If it is not on the PC, Jolt says so, asks, and downloads it (about 115 MB). The first YouTube or Twitch link also needs yt-dlp and Deno, fetched the same way. Nothing has to be installed by hand.
Windows may show "Windows protected your PC" the first time, because the exe is not signed. Click More info, then Run anyway.
If you open Jolt from inside the zip without unzipping it, it runs from a temp folder that Windows
cleans up later. A box says so and offers to put Jolt in Downloads\Jolt and start it from there, so
ffmpeg, downloaded videos and updates stay. Open it from that folder next time.
Updates
Which version you have is at the bottom right of the window and at the bottom of every report.
When a newer version is out, Jolt says so when it starts and asks whether to update:
- OK: Jolt downloads the new version, puts it in the place of the one you have and starts again. It takes a few seconds, there is nothing to do by hand, and your settings stay.
- Cancel: nothing changes. A yellow line at the bottom left of the window stays, click it whenever you want the update.
Jolt only replaces itself with a build that carries my signature, and only after that build has started once on your PC. If the update does not work, the Jolt you have is still there and still works. It says why (J12) and opens the download page, where you can get the new version by hand.
Linux and Mac update the same way. Linux needs curl and unzip installed, and replaces the AppImage
file you started. A Mac replaces the program inside Jolt.app. Either way the file has to be in a
folder you can write to, so keep Jolt.app in Applications and not on the downloaded disk image.
In a terminal, jolt --update does the same and jolt --version says which version it is.
Videos that show more than one player's screen
An edited video often cuts to another player's screen. When that player's game is drawn at another size, their hunger bar sits in another place. From version 2.2 Jolt finds every hunger bar in a video and reads them all, which adds a few seconds to a scan.
Each screen counts as its own game. A cut to another player shows in the report as "Another screen, game N" under game changes, not as missing footage, and the footer of the report says where each screen's bar is and which game is on which screen. What Jolt finds on the main screen is the same with or without other screens in the video.
Two players whose games are drawn at the same size share a bar. Jolt then tells them apart by their counters. If you give the bar's place yourself (x, y, scale), only that bar is read.
The window
| Setting | What it does |
|---|---|
| Video | A video file, or a YouTube or Twitch link. A link is downloaded first. |
| Start reading at, Stop reading at | Read only part of the video. Times like 68, 1:08 or 1:02:03.5. Empty means the start and the end. |
| Longest game uptime, hours | How long the game may have been open when the video starts. 24 by default. When jolts are seen but none is matched, Jolt looks up to 168 hours by itself. |
| Use the graphics card | Lets graphics cards take a share of the decoding. Can make a scan faster or slower, that varies from PC to PC. Never changes what the scan finds. |
| Open the report when done | Opens the report page in the browser. |
| Read every frame | Decodes all of the video, also the parts where no bar that could jolt is in sight. Slower, for when a scan seems to miss things. |
| Delete downloaded videos | Once the report is written, deletes the video Jolt downloaded from a link. A video file picked or dropped in is never deleted. The download stays when a scan is stopped or fails, or part of the video could not be read, so it can be scanned again. Off by default. |
Under More settings:
| Setting | What it does |
|---|---|
| Hunger bar x, y, scale | Where the bar is, in video pixels, and how many pixels one gui pixel is. Only for when Jolt does not find the bar itself. |
| CPU decoders at once | How many stretches of the video the processor decodes at once. The default is a third of the PC's threads. |
| Folder for downloaded videos | Where videos fetched from links are kept. videos means a folder of that name next to Jolt. |
| Report page | Where the report goes. Empty means next to the video, as video.mp4.jolt.html. |
| Raw result file | Also saves the result as json. |
| yt-dlp arguments | Passed to yt-dlp as they are, like --cookies-from-browser firefox. |
Manual, beside Scan at the top, is for typing jolts in by hand (see below). Start runs the scan and turns into Stop while it runs. Open report opens the last report. Check this PC, top right, tests everything Jolt needs.
The line under the buttons says what Jolt is doing and how long it has been at it. Its square is yellow while a scan runs, green for a video with no cuts, red for cuts or a problem. The box at the bottom shows what the scan prints.
Hearts, the hunger bar and jolts
Minecraft draws its HUD with random numbers that it takes from the game's tick counter. The counter starts at 0 when the game opens and goes up 20 times a second. The way the icons shake on a tick is the same every time that tick comes round, so Jolt can work back from the shake to the tick. That shake is a jolt, and working back from jolts to the tick is jolt cracking.
Two rows of the HUD jolt:
- The hunger bar, once saturation has run out. It jolts on one tick at a time, on ticks that are a multiple of food level × 3 + 1: every 61 ticks with a full bar, more often as it empties. Each shank goes up a pixel, stays, or goes down a pixel.
- The hearts, at 2 hearts or less. They jolt on every tick, and each heart drops a pixel or stays. At low health the hearts take their random numbers before the hunger bar does, so the hunger bar jolts differently then.
For about a second after damage or healing the hearts blink white. From version 2.3 Jolt reads them through the blinking too. In a dark place the empty hearts can be too faint to make out. From version 2.5 Jolt then follows the hearts it can see from one tick to the next, even a single one. A heart that Regeneration lifts hides its own jolt.
Ten hearts make only 1,024 patterns and ten shanks 59,049, while a day of play is 1,728,000 ticks. One jolt fits many ticks, so Jolt pins the tick down with the jolts around it and the time between them.
Typing jolts in by hand
The scan reads the jolts by itself, but some it misses: a bar that is too small or blurry, an odd texture pack, a frame the encoder smeared. Those you can read off the video yourself.
- Click Manual at the top of the window.
- Pick Hunger bar jolts or Heart jolts.
- Open the video in a player that steps one frame at a time. Find a frame where the row is jolted and compare each icon with where it sits on a frame where the row is still.
- Type the code in Jolt codes and press Crack.
A code is one mark per icon, left to right as on screen:
| Mark | The icon is |
|---|---|
+ |
a pixel higher than at rest. Hunger bar only, hearts never go up |
0 |
where it rests |
- |
a pixel lower than at rest |
? |
cannot tell. It never gives a wrong answer, it only leaves more ticks that fit |
A hunger code starts with the food level in half shanks, a full bar is 20. Put H after it when
the player had 2 hearts or less on that frame. Then the ten shanks: 18H -000+0--+0.
A heart code is the ten hearts of the bottom row alone: 0--------0. Give a heart that
Regeneration lifted a ?.
In front of a code can go @ and the video time it shows at, like @1:08.25 or @68.25, right to a
tenth of a second. Codes go in the order the video shows them, with spaces between. A code with no time
is the tick right after the one before it, which is what you see when you step frames until the icons
move. Once any code has a time, the first one needs a time too.
How many codes it takes:
- Hunger bar: one code with its food level often leaves a handful of ticks in 24 hours. A second
jolt with its time almost always leaves one:
@0.10 20 +--+000-++ @3.17 20 -0+++0+--+ - Hearts: one code is never enough. Low hearts jolt on every tick, so type three ticks in a row:
0--------0 -00-0--0-0 0-0000-0-0
What comes back:
2 hunger jolt codes, looked up over 24 hours of game uptime
Cracked, one tick fits. Game uptime at the first code:
0:05:11.10 (6222 ticks), video began at 0:05:11.00- Cracked in green: one tick fits. The log says how long the game had been open at the first code, and when that code has a time, how long it had been open when the video began.
- N ticks fit: up to twenty are listed. Read another jolt, add it and press Crack again. A fit that says "with 1 absorption heart" only works if the player had absorption hearts, those come last.
- No tick fits in red: most often one mark is read wrong, or the food level or the H. It can also be a game that was open longer than Longest game uptime, which manual mode uses as well.
Graphics cards
Decoding the video is nearly all of the time a scan takes. Jolt decodes on the processor and lets each graphics card decode a share next to it:
- NVIDIA: through CUDA. If that does not work on the PC, through Direct3D 11.
- Intel: through Direct3D 11, with the chip cutting the hunger bar's strip out of each frame itself so only that comes back. A whole frame comes back from an Intel chip at about a third of the speed it decodes. If that does not work, through Direct3D 11 alone.
- AMD and anything else: through Direct3D 11.
Before a card is let into a scan it decodes two seconds that the processor decodes too. It is used only if its frames are the same, byte for byte. A card that fails that, hangs, or stops part way is left out and the processor does its share. So a card can make a scan faster but cannot change what it finds.
The log says what happened:
AMD Radeon RX 7700 XT is decoding too (d3d11va)
decoded by the CPU 66%, AMD Radeon RX 7700 XT 25%, Intel(R) UHD Graphics 770 10%A processor already decodes H.264 very fast, so on a strong one the cards add little. A weaker processor, or a video in AV1 or HEVC, gains more. To switch the cards off, untick Use the graphics card.
When something goes wrong
Jolt says what went wrong, what to do about it, and gives a code. Ctrl+C copies a whole message box as text, which is the best thing to send when asking for help.
Check this PC lists Windows, the processor, every tool with its version, the graphics cards with their drivers and whether each can decode, and ends with what needs putting right. With a video file in the Video box it also says whether that video can be read and whether the hunger bar is found.
| Code | It says | What to do |
|---|---|---|
| J01 | ffmpeg, yt-dlp or Deno was not found | You pressed Cancel on the download. Start again and press OK. |
| J02 | Jolt could not download a tool | The message says which case: no internet, the folder cannot be written to, no secure connection, or an antivirus took the file. Moving Jolt to Documents fixes the folder case. The message also gives the link to put the tool there by hand. |
| J03 | Jolt could not start a program | Windows or an antivirus blocks it, or the file is damaged. Allow it, or delete it so Jolt downloads it again. |
| J04 | There is no video file there | Check the path, or pick the file again. |
| J05 | Jolt could not read the video | The file is incomplete, not a video, or open in another program. See whether a video player plays it. |
| J06 | yt-dlp could not get the video | The message sorts it: the site wants a login, the video is private or gone, the link is not a video page, no internet, or yt-dlp is out of date. Saving the video yourself and giving Jolt the file always works. |
| J07 | No hunger bar found | The bar is not in the pictures Jolt looked at: HUD off, creative or spectator, not gameplay, or a mod moved the bar. Set start and stop to survival gameplay, or give x, y, scale. |
| J08 | ffmpeg gave no pictures | Delete ffmpeg.exe and ffprobe.exe next to Jolt so it downloads fresh ones. |
| J09 | Jolt could not write a file | Pick another place for the report: the folder is missing or read only, the disk is full, or the file is open elsewhere. When it says it could not put itself in Downloads\Jolt, unzip it by hand into a folder of its own. |
| J10 | Part of the video could not be read | A warning, the report is still made and marks the gap. Fresh ffmpeg, or get the video again. |
| J11 | A setting cannot be used | A time, number or bar position is not written the way Jolt reads it. Correct it. |
| J12 | Jolt could not update itself | The Jolt you have still works. The message says why: no internet, Jolt's folder cannot be written to (move Jolt to Documents), another Jolt window is open (close it), or an antivirus took the new file. You can always download the new version from the page that opens and use that jolt.exe instead. |
| J20 | Jolt crashed | A fault in Jolt. It saves jolt-crash.dmp next to itself. Send that file and the message to me on Discord. |
| J99 | Something unexpected | Send the message and say which video it was. |
Lines in the log that are not errors:
X is left out of the decoding: ...A card did not pass its trial. The scan goes on without it.X stopped at 0:18:37, the CPU reads on from thereA card decoder died part way. Nothing is lost.ffmpeg stopped at 0:04:55, starting it again thereffmpeg died and was started again on the same frame. Nothing is lost.no tick within 24 hours of the game starting, looking up to 168 hours: 20 or more jolts were seen and none fits, so the game was most likely open longer than the longest game uptime. Jolt matches them again from what it already read, which takes seconds and no second scan.N seen, 0 matched to a tick, with a hint under it: even that found nothing. Either the game was open for over a week, then read the video again with a higher number like 600, or these are not real jolts.
Command line
usage: jolt opens the window
jolt VIDEO_OR_YOUTUBE_LINK [options]
jolt --render RESULT.json [--html FILE]
jolt --check [VIDEO]
jolt --update
jolt --hunger CODES | --hearts CODES
--render FILE redraw the report page from a result saved with --json, without reading any video
--check test what Jolt needs on this PC and say what is wrong, with a video also that video
--update get the newest Jolt from splosh.icu and put it in the place of this one
--version say which Jolt this is
--hunger CODES crack hunger bar jolts typed in by hand, like "18H -000+0--+0"
--hearts CODES the same for heart jolts, ticks in a row, like "0--------0 -00-0--0-0 0-0000-0-0"
--start TIME video time to start reading at, like 1:08
--end TIME video time to stop reading at
--bar X,Y,SCALE hunger bar position when it is not found automatically
--max-hours N longest game uptime to consider (default 24)
--thorough decode every frame, even where no bar that could jolt is in sight
--jobs N how many stretches of the video to decode at once on the CPU
--gpu on|off whether graphics cards take a share of the decoding (default on)
--html FILE where to write the report page (default: next to the video)
--open open the report page in the browser when done
--json FILE also write the raw result to this file
--videos DIR where videos fetched from YouTube are kept (default: videos)
--delete-download delete the video fetched from a link once the report is written, never a file given
--ytdlp "ARGS" extra arguments for yt-dlp, like --cookies-from-browser firefox