Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ pixel explosions and a spinning radar. Runs with GitHub Actions.
**Lincoln — default carrier**

<picture>
<source media="(prefers-reduced-motion: reduce)" srcset="examples/demo/git-jet.png?v=water-bow-loop-20261102">
<img src="examples/demo/git-jet.gif?v=water-bow-loop-20261102" width="960" alt="A pixel jet launches from a Lincoln-inspired carrier through rolling ocean water, with an angled runway, detailed island and spinning radar.">
<source media="(prefers-reduced-motion: reduce)" srcset="examples/demo/git-jet.png?v=runway-queue-20261102">
<img src="examples/demo/git-jet.gif?v=runway-queue-20261102" width="960" alt="A pixel jet launches from a Lincoln-inspired carrier through rolling ocean water, with an angled runway, detailed island and spinning radar.">
</picture>

**Classic — original carrier**

<picture>
<source media="(prefers-reduced-motion: reduce)" srcset="examples/demo-classic/git-jet.png?v=water-bow-loop-20261102">
<img src="examples/demo-classic/git-jet.gif?v=water-bow-loop-20261102" width="960" alt="The original ivory-island carrier with a spinning radar and flowing ocean wake launches a pixel jet to clear the commit calendar.">
<source media="(prefers-reduced-motion: reduce)" srcset="examples/demo-classic/git-jet.png?v=runway-queue-20261102">
<img src="examples/demo-classic/git-jet.gif?v=runway-queue-20261102" width="960" alt="The original ivory-island carrier with a spinning radar and flowing ocean wake launches a pixel jet to clear the commit calendar.">
</picture>

Choose `carrier: 'lincoln'` (default) or `carrier: 'classic'` in your workflow.
Expand All @@ -26,7 +26,7 @@ Choose `water: 'ocean'` (default) for the flowing ocean surface and wake, or
`water: 'original'` for the original small wave patches. This works with either
carrier. For the CLI, use `--water ocean` or `--water original`.

Both demos use **56 synthetic commits across 14 active days**. Live mode uses your
Both demos show **three jets** and **56 synthetic commits across 14 active days**. Live mode uses your
actual data. **One attack clears one day cell**, regardless of that day's count.
The jet returns to land, the calendar rebuilds, and the animation loops.

Expand Down Expand Up @@ -55,8 +55,11 @@ smooth curves at a steady cruise speed and fires while moving. The default is

Set `jets: '2'` or `jets: '3'` to launch multiple jets and clear busy calendars
faster. The default is `jets: '1'`. Jets share the day cells, so each active day
is still attacked exactly once. Launches are staggered and the calendar resets
after every jet lands. Small calendars may take a similar time because launch
is still attacked exactly once. Jets line up visibly on the runway, launch one
at a time and land in order, returning to their original runway spots. Waiting
jets remain visible before takeoff and after landing. Launch timing keeps the
runway clear for each arrival. The calendar resets after every jet lands.
Small calendars may take a similar time because launch
and return flights still need to finish. For the CLI, use `--jets 3`.

GIFs over **25 MB** are automatically retried at a lower resolution, then lower
Expand Down
Binary file modified examples/demo-classic/git-jet.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified examples/demo-classic/git-jet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
184 changes: 103 additions & 81 deletions examples/demo-classic/report.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,47 @@
"active_days": 14,
"attacks": 14,
"attack_mode": "day-cell",
"jets": 1,
"jets": 3,
"carrier": "classic",
"water": "ocean",
"seed": "git-jet-loop",
"flights": [
{
"jet": 1,
"seed": "git-jet-loop",
"attacks": 14,
"attacks": 5,
"launch_frame": 8,
"landed_frame": 480
"landed_frame": 464
},
{
"jet": 2,
"seed": "c00aa13156cdeac3fb98d0a11caf2c029fe45633b0fc5c66151bd6697d2bd51b",
"attacks": 5,
"launch_frame": 72,
"landed_frame": 533
},
{
"jet": 3,
"seed": "cfeb2707ba3fdf21e2c2ba11b9914dc444d464190efe3c955fe1f6578640abfd",
"attacks": 4,
"launch_frame": 149,
"landed_frame": 562
}
],
"maneuvers": [
{
"kind": "loop",
"direction": -1,
"start_frame": 244,
"end_frame": 289
"start_frame": 209,
"end_frame": 253,
"jet": 1
},
{
"kind": "loop",
"direction": -1,
"start_frame": 285,
"end_frame": 331,
"jet": 2
}
],
"width": 960,
Expand All @@ -36,138 +58,138 @@
"requested_scale": 2,
"requested_fps": 20,
"auto_compressed": false,
"frames": 560,
"frames": 640,
"fps": 20,
"duration_seconds": 28.0,
"duration_seconds": 32.0,
"transparent": true,
"decoded_frames_match": true,
"gif_bytes": 14334512,
"gif_bytes": 16526574,
"targets": [
{
"date": "2026-10-18",
"jet": 1,
"commits": 6,
"column": 50,
"row": 0,
"fire_frame": 189,
"hit_frame": 196
"fire_frame": 154,
"hit_frame": 161
},
{
"date": "2026-10-30",
"date": "2026-08-03",
"jet": 1,
"commits": 7,
"column": 51,
"row": 5,
"fire_frame": 197,
"hit_frame": 203
"commits": 3,
"column": 39,
"row": 1,
"fire_frame": 181,
"hit_frame": 187
},
{
"date": "2026-09-30",
"date": "2026-05-10",
"jet": 1,
"commits": 5,
"column": 47,
"row": 3,
"fire_frame": 201,
"hit_frame": 207
"commits": 7,
"column": 27,
"row": 0,
"fire_frame": 236,
"hit_frame": 242
},
{
"date": "2026-10-30",
"jet": 2,
"commits": 7,
"column": 51,
"row": 5,
"fire_frame": 240,
"hit_frame": 246
},
{
"date": "2026-09-01",
"jet": 1,
"jet": 2,
"commits": 4,
"column": 43,
"row": 2,
"fire_frame": 208,
"hit_frame": 214
"fire_frame": 253,
"hit_frame": 259
},
{
"date": "2026-08-03",
"jet": 1,
"commits": 3,
"column": 39,
"row": 1,
"fire_frame": 216,
"hit_frame": 222
},
{
"date": "2026-07-02",
"date": "2026-02-04",
"jet": 1,
"commits": 2,
"column": 34,
"row": 4,
"fire_frame": 222,
"hit_frame": 227
"commits": 4,
"column": 13,
"row": 3,
"fire_frame": 266,
"hit_frame": 272
},
{
"date": "2026-04-12",
"jet": 1,
"jet": 3,
"commits": 6,
"column": 23,
"row": 0,
"fire_frame": 241,
"hit_frame": 248
"fire_frame": 271,
"hit_frame": 278
},
{
"date": "2026-03-16",
"date": "2025-11-16",
"jet": 1,
"commits": 1,
"column": 2,
"row": 0,
"fire_frame": 287,
"hit_frame": 294
},
{
"date": "2026-03-16",
"jet": 2,
"commits": 5,
"column": 19,
"row": 1,
"fire_frame": 247,
"hit_frame": 253
},
{
"date": "2026-05-10",
"jet": 1,
"commits": 7,
"column": 27,
"row": 0,
"fire_frame": 271,
"hit_frame": 277
"fire_frame": 291,
"hit_frame": 297
},
{
"date": "2026-06-03",
"jet": 1,
"jet": 2,
"commits": 1,
"column": 30,
"row": 3,
"fire_frame": 277,
"hit_frame": 283
"fire_frame": 319,
"hit_frame": 325
},
{
"date": "2026-02-04",
"jet": 1,
"commits": 4,
"column": 13,
"date": "2026-09-30",
"jet": 3,
"commits": 5,
"column": 47,
"row": 3,
"fire_frame": 301,
"hit_frame": 307
"fire_frame": 337,
"hit_frame": 343
},
{
"date": "2026-01-13",
"jet": 1,
"commits": 3,
"column": 10,
"row": 2,
"fire_frame": 307,
"hit_frame": 313
"date": "2026-07-02",
"jet": 3,
"commits": 2,
"column": 34,
"row": 4,
"fire_frame": 358,
"hit_frame": 364
},
{
"date": "2025-12-16",
"jet": 1,
"jet": 2,
"commits": 2,
"column": 6,
"row": 2,
"fire_frame": 313,
"hit_frame": 319
"fire_frame": 360,
"hit_frame": 366
},
{
"date": "2025-11-16",
"jet": 1,
"commits": 1,
"column": 2,
"row": 0,
"fire_frame": 322,
"hit_frame": 329
"date": "2026-01-13",
"jet": 3,
"commits": 3,
"column": 10,
"row": 2,
"fire_frame": 398,
"hit_frame": 404
}
]
}
Binary file modified examples/demo/git-jet.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified examples/demo/git-jet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading