AFL 2026 Season in Motion: Visualising the Ladder Race

AFL 2026 Season in Motion: Visualising the Ladder Race
Another AFL home-and-away season has wrapped up, and what a rollercoaster 2026 turned out to be! Between surprise ladder leaders, brutal mid-season slumps, and a mid to late-season resurrection that you wouldn’t beleive unless it happened, watching the premiership table evolve from the Opening Round to Round 24 was dramatic.
To capture the changes in the ladder during the season, I thought the best way would be to build an bar chart race animation with round-by-round ladder movements as a high-polished broadcast-style video.
Here is the full animated 2026 AFL Ladder Race in 30 FPS:
The 2026 AFL Ladder Race Video
3 Standout Stories from the 2026 AFL Ladder
When you animate all 25 rounds of data (Opening Round through Round 24) with smooth transitions, several fascinating team trajectories stand out.
1. Carlton’s Great Escape: From 16th Rock Bottom to the wild card
If you looked at the ladder at Round 9, you would have written Carlton’s season off completely. The Blues opened their campaign in dire straits:
- Rounds 1–9 Record: 1 win, 8 losses (11.1% win rate).
- Ladder Position: Languishing in 16th place for 7 consecutive weeks (Rounds 3 to 9), with percentage sinking into the 70s.
Then, starting in Round 10, the Blues staged one of the most astonishing mid-season turnarounds in recent memory. Over the remaining 14 rounds, Carlton caught on fire, winning 11 matches and drawing 1 (including an 8-match win streak and a thrilling Round 23 draw). They surged 6 ladder positions up to 10th place (50 points, 101.47%), securing them into one of the first ever wildcard matches and a chance to sneak into the finals.
| Metric | Rounds 1–9 (The Slump) | Rounds 10–24 (The Surge) | Final (Round 24) |
|---|---|---|---|
| Record | 1–8–0 | 11–2–1 | 12–10–1 |
| Ladder Position | 16th | 16th ➡️ 10th | 10th (50 pts) |
| Percentage | ~78.0% | +23.4% boost | 101.47% |
Round 1- 9: 🔴🔴🔴🔴🔴🔴🔴🔴🟢 [16th]
Round 10-24: 🟢🟢🟢🟢🟢🟢🟢🟢🔴🔴🟢🟢🤝🟢 [Surge to 10th]2. The Fremantle Juggernaut: 14 Consecutive Weeks at #1
Fremantle’s 2026 campaign was a clinic in excellence. After a low-key start in Round 1 (sitting in 13th), the Dockers found their rhythm rapidly:
- Round 2 to 5: Jumped from 13th ➡️ 5th ➡️ 3rd ➡️ 2nd.
- Round 11 Takeover: Overtook Sydney for 1st place on the ladder.
- Rounds 11 to 24: Held the #1 spot for 14 consecutive rounds without relinquishing the lead once.
Freo finished the regular season as deserved Minor Premiers with a 19–4 record, 76 premiership points, and an imposing 137.21% percentage.
3. Gold Coast Suns: Fast-Start Flyers to Mid-Season Freefall
The Gold Coast Suns provided the most dramatic roller-coaster arc of 2026:
- The Flying Start (Rounds 0–3): Reached #1 on the ladder in Rounds 2 and 3 with an eye-watering percentage over 191.0%.
- Holding Firm (Rounds 4–12): Remained firmly entrenched in the Top 5 with a 7–4 record at Round 12.
- The Collapse (Rounds 13–21): Suffered a disastrous 8-game losing streak, tumbling from 5th all the way down to 14th (a net drop of 13 ladder positions from their peak).
- Final Result: Finished 13th with a 9–14 record (36 pts, 94.50%).
Rounds 1-3: 🥇 #1 on Ladder (191% percentage)
Rounds 4-12: 🎖️ Top 5 (7-4 record)
Rounds 13-21: 📉 8-game losing skid (fell to 14th)
Round 24: 🏁 13th (9-14)Honourable Mention: The Battle for the Top 8
The race for finals qualification went right down to the wire in Round 24:
- Brisbane Lions: Staged their own charge from 16th in Round 2 all the way to 3rd (64 pts) to claim the double chance.
- Western Bulldogs vs Collingwood: Collingwood held 8th spot through the late rounds, but the Western Bulldogs (54 pts) edged past the Magpies (52 pts) in the final round to clinch the last top 8 spot.
Building the Tool with Antigravity CLI on Omarchy
As a side note to this project, creating this animation was my inaugural test drive of running Antigravity CLI on Omarchy.
I wanted to see how frictionless it would be to set up this brand new Linux environment, launch Antigravity CLI in the terminal, and get Gemini to build an end-to-end data pipeline and video rendering engine from scratch.
My Experience with Omarchy & Antigravity CLI
Before this small project I had used Antigravity IDE for AI assisted programming, and the Github Copilot agent within VScode before that.
As of writing this, I think I do prefer the CLI for the prompting and interacting with the agent, but I’m still use to using VScode (or VScode forks) for looking at changes to files and making manual adjustments.
How the Pipeline Works
The source code is structured in the ml/eda/afl-ladder workspace:
📁 afl-ladder/
├── 📁 data/
│ ├── 📁 raw/ # Cached HTML snapshots per round
│ └── 📁 processed/ # Compiled ladder_2026.csv
├── 📁 output/
│ ├── 🎥 afl_2026_ladder_race_landscape.mp4
│ └── 🖼️ preview_round_24.png
├── 📁 src/afl_ladder/
│ ├── 📄 cli.py # Typer + Rich CLI entrypoint
│ ├── 📄 scraper.py # FootyForecaster scraping & caching
│ ├── 📄 processor.py # Cubic/cosine easing & rank calculations
│ ├── 📄 config.py # AFL club branding, colors, HUD themes
│ └── 📄 renderer.py # Matplotlib & FFmpeg rendering pipeline
├── 📄 pyproject.toml # uv project configuration
└── 📄 README.mdKey Technical Highlights:
- Automated Scraping & Local Caching: Scrapes round-by-round tables saving the raw HTML in
data/raw/. - Sub-frame Cosine Easing: Generates 24 interpolated sub-frames per round using cosine interpolation. This produces smooth accelerations and decelerations when bars overtake each other on the ladder.
- Dual Aspect Ratio Support: Renders in 16:9 Landscape (
1920x1080) for YouTube and 9:16 Portrait (1080x1920) for YouTube Shorts / Instagram Reels. - Broadcast HUD Styling: Custom dark theme with gold/silver/bronze badges, Top 4 double-chance boundary lines, Top 8 finals cutoffs, and dynamic point axis expansion.
Running It in One Command:
# Generate the entire dataset and render the video
uv run afl-ladder all
# Render with custom frame rates or orientation
uv run afl-ladder render --fps 30 --orientation landscapeCode
The complete code is available on GitHub: 👉 github.com/mortie23/ml/tree/master/eda/afl-ladder
