Skip to content

Instantly share code, notes, and snippets.

View vjeux's full-sized avatar

Christopher Chedeau vjeux

View GitHub Profile
@vjeux
vjeux / README.md
Last active September 27, 2026 16:45
Altered U10S — change log (what changed on which map, and when records were reset)

Altered U10S — change log

Generated 2026-09-27 16:42Z. One file per alteration; one line per map per published version that changed something in the MAP itself (blocks, items, physics) since the previous version.

How to read a line: U10S_26 — 09-20 · after last wipe · 2 changes: custom items / custom blocks (1: …) means: on Sept 20 the published Wet Wood 26 was replaced by a version whose custom block changed, the records were NOT reset for it, so the records on the board were driven on the previous version. wiped marks the version where the records WERE reset (new leaderboard).

What counts as a change: the physics fingerprint of the map — every authored block (name, variant, cell, rotation) and every embedded item's collision hulls per placement. Thumbnail-only, name-only or lighting-only republishes are not listed. pillars (not driven) are generated filler pillars re-emitted by the converter — visual, never touched by the car.

| Alteration | maps with listed changes | changed versions |

@vjeux
vjeux / gisttest.md
Created September 22, 2026 06:25
test

test gist

@vjeux
vjeux / vlc-mkv-negative-block-timestamp.md
Created September 5, 2026 02:28
VLC and negative Matroska SimpleBlock timestamps: where it lives and how it got there

VLC and negative Matroska SimpleBlock timestamps — where it lives and how it got there

Context: https://x.com/vanilagy/status/2095904592307355834 — a Matroska file whose SimpleBlocks carry a negative 16-bit timestamp offset makes VLC show 351909:41:29 as the playback time.

TL;DR: the tweet's diagnosis is slightly off. VLC (via libmatroska) does read the SimpleBlock offset as a signed int16. What it doesn't handle is the resulting absolute timestamp going negative: that value flows through an unsigned uint64 API, wraps to ~2⁶⁴ ns, and that is exactly the number on screen.

Where it is

VLC doesn't parse block headers itself; modules/demux/mkv/ hands the bytes to libmatroska and asks it for the absolute time.

@vjeux
vjeux / gist:30e90bd00f8d3ff565c76b3a41bfcf67
Created December 5, 2025 06:18
webcodecs-node-results
RUN v4.0.15 /Users/vjeux/random/webcodecs-harness
✓ test/node-webcodecs/video-decoder.test.ts (13 tests) 7ms
❯ test/node-webcodecs/core-types.test.ts (22 tests | 2 failed) 8ms
✓ should create a VideoFrame from RGBA buffer 1ms
✓ should create a VideoFrame from I420 buffer 0ms
× should throw if required parameters are missing 2ms
✓ should return correct size for RGBA 0ms
✓ should return correct size for I420 0ms
✓ should create an independent copy 0ms
@vjeux
vjeux / gist:7955a64e336c7f1c4fbc74e16d9fb9fa
Created December 5, 2025 06:08
node-libav-webcodecs-results
RUN v4.0.15 /Users/vjeux/random/webcodecs-harness
[libvpx @ 0xc9556c700] v1.15.2
[libx264 @ 0x9fb9dc000] using cpu capabilities: ARMv8 NEON DotProd I8MM
stderr | test/node-webcodecs/integration/hevc-av1-encode-decode.test.js > HEVCEncodeSingleFrame
Encoder error: TypeError: Unrecognized codec
at Module.encoder (/Users/vjeux/random/webcodecs-harness/node_modules/node-libav-webcodecs/src/avloader.ts:414:23)
at /Users/vjeux/random/webcodecs-harness/node_modules/node-libav-webcodecs/src/video-encoder.ts:130:38
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at /Users/vjeux/random/webcodecs-harness/test/node-webcodecs/integration/hevc-av1-encode-decode.test.js:59:3
@vjeux
vjeux / gist:888392b771252fb4fcf7b9412c3060f0
Created December 5, 2025 06:02
webcodecs-polyfill-results
RUN v4.0.15 /Users/vjeux/random/webcodecs-harness
✓ test/webcodecs-polyfill/audio-encoder.test.ts (3 tests) 74ms
[h264_videotoolbox @ 0x868dc0000] [IMGUTILS @ 0x16e3eadf8] Picture size 0x0 is invalid
[h264_videotoolbox @ 0x868dc0000] [IMGUTILS @ 0x16e3eadf8] Picture size 0x0 is invalid
[h264_videotoolbox @ 0x868dc0000] dimensions not set
✓ test/node-webcodecs/video-encoder.test.ts (11 tests) 307ms
✓ test/webcodecs-polyfill/audio-decoder.test.ts (1 test) 451ms
✓ AudioDecoder lifecycle 450ms
❯ test/node-webcodecs/integration/encode-decode.test.js (4 tests | 1 failed) 506ms
@vjeux
vjeux / gist:74383591bfe474f9dda3454fd3589042
Created December 5, 2025 05:57
node-webcodecs-results
RUN v4.0.15 /Users/vjeux/random/webcodecs-harness
[libvpx @ 0x94ade0000] v1.15.2
[libvpx @ 0x94ade0000] v1.15.2
[libvpx @ 0x94ade0000] v1.15.2
[libvpx-vp9 @ 0x94ade0000] v1.15.2
[libvpx-vp9 @ 0x94ade0000] v1.15.2
❯ test/webcodecs-polyfill/audio-decoder.test.ts (1 test | 1 failed) 9ms
× AudioDecoder lifecycle 8ms
[libvpx-vp9 @ 0x94ade0000] v1.15.2
...if it is also Aquatic, it has +25 Damage.
...if it is also Aquatic, it has +50 Damage.
Adjacent Heal items gain 10 Heal for the fight.
Adjacent Heal items gain 15 Heal for the fight.
Adjacent Heal items gain 20 Heal for the fight.
Adjacent Heal items gain 25 Heal for the fight.
Adjacent items are Aquatic.
Adjacent items gain +10% crit chance for the fight.
Adjacent items gain +15% crit chance for the fight.
Adjacent items gain +20% crit chance for the fight.
[0] => "#785 { \xe2\x80\x93}"
[1] => "#813 { \xe2\x80\x94}"
[2] => "#1346 { \xe2\x80\x9c}"
[3] => "#1768 { \xe2\x80\x9e}"
[4] => "#2683 {----------------}"
[5] => "#3178 {.\xe2\x80\x9d}"
[6] => "#3995 {,\xe2\x80\x9d}"
[7] => "#4189 {********}"
[8] => "#4291 {:\xe2\x80\x89}"
[9] => "#4936 {========}"
@vjeux
vjeux / difficulty.js
Created July 12, 2021 06:32
Trackmania fetch difficulty
/*
>> node difficulty.js qDkVXW6pEqrwH0WP86jilQW4uZ8
{ rankAT: 629, rankGold: 4332, rankSilver: 7256, rankBronze: 8158 }
>> node difficulty.js qDkVXW6pEqrwH0WP86jilQW4uZ8
$i$o$s$c30Vashj'ir { rankAT: 629, rankGold: 4332, rankSilver: 7256, rankBronze: 8158 }
>> node difficulty.js 5yg9Ga2Kh11Ow2b4E9f4_viMo_h
$o$s$n$fffT$0ffhe $fffB$0ffank $fffR$0ffobbery { rankAT: 423, rankGold: 5425, rankSilver: 7641, rankBronze: 8913 }