Zaneham/BoothPublic

Open-source CUDA, Triton and HIP compiler targeting multiple GPU and CPU architectures.

AI summary: A lightweight, self-hosted photo booth application for events.

Stars
1.7K
+4 today
Forks
92
Watchers
19
Open issues
50
Open PRs
3
Contributors
~7
Commits
257
Branches
7

CApache-2.0Created Feb 16, 2026Last push todayLatest release v5.01+7 stars this week+7 this month

Star history

since Jul 30, 2026
05001K1.5KJul 2026Aug 2026Aug 2026Aug 2026
1.7K stars as of Aug 7, 2026, tracked back to Jul 30, 2026.

Signals and awards

derived from tracked data
  • Actively maintained

    Pushed within 48 hours

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

What Booth does

Booth is a simple, robust web application designed to run on a tablet or laptop to serve as a digital photo booth at parties and events. It connects to local webcams or tethered DSLR cameras, providing a clean, customizable touchscreen interface for guests to take photos, GIFs, and boomerangs. The software handles automated printing, applies custom overlays, and provides a local QR code sharing system so guests can download their photos instantly without requiring external cloud services.

Event organizers, DIY enthusiasts, and professional photobooth operators who want a reliable, customizable, and subscription-free software solution. Requires basic familiarity with web servers and camera hardware for initial setup.

  • Touch-first interface: features a large, intuitive UI designed specifically for tablet and touchscreen use.
  • Hardware integration: supports standard webcams and professional tethered DSLRs via gphoto2.
  • Local sharing: generates QR codes for guests to download media directly over the local network.
  • Custom branding: easily apply watermarks, borders, and event-specific overlays to all captures.
  • Automated printing: integrates with local dye-sublimation printers for immediate physical copies.

Where teams use it

Weddings and parties

Event hosts use it to provide a fun, interactive photo experience for guests.

Corporate events

Companies use it for branded photo marketing and lead generation at conferences.

Professional photobooths

Photobooth rental businesses use it as the reliable software backend for their hardware setups.

Community gatherings

Organizers use it to create memorable physical and digital keepsakes.

Getting started: docker-compose up -d

README

master branch

Booth

Booth is an open-source CUDA, HIP and Triton compiler targeting multiple GPU architectures, either natively by emitting machine code or as close as we can possibly get. Now with distinctly less fish.

It is named to honour Kathleen Booth: creator of the first assembly language, co-builder of the computer it first ran on, an early researcher into neural nets, a champion of women in computing, the daughter of a tax clerk, English by birth and Canadian by choice, and a mother. I believe it is fitting to name this after an incredible woman whose work this is built on. She built the machines her assembler ran on, which is exactly the bootstrapped "yeah, why not ay?" attitude this whole compiler is going for.

A running log of what's changed is in CHANGELOG.md.

Update: Fortran do concurrent kernels now compile to AMD, NVIDIA and x86-64 through LFortran, checked against SLATEC values in CI. See Using Fortran.

What It Does

Takes CUDA C, HIP, or Triton source (the same files you'd hand to nvcc, ROCm, or Triton's JIT) and turns them into AMD RDNA 2/3/4 binaries, NVIDIA PTX, Tenstorrent Metalium C++ or native RV32IM, or just plain x86-64 you can run on a laptop with no GPU in it.

That last one still surprises me a bit. You can write a Triton kernel, matmul and all, and run it on a machine that's never seen a GPU, from scratch, no LLVM, straight to native. I haven't come across anyone else doing Triton like this, but I'd happily be proven wrong, so give me a yell if you've seen it somewhere.

It also borrows a pile of operational discipline from the mainframe world: real crash dumps when a kernel faults, structured output routed by class, parameter snapshots on entry. See docs/mainframe.md if that sounds like your kind of thing.

Build

make

That's the whole thing. You need a C99 compiler (gcc, clang, whatever you've got) and nothing else.

# compile a CUDA kernel to an AMD GPU binary
./kath --amdgpu-bin kernel.cu -o kernel.hsaco

The binary is kath (after Kathleen but if she picked Australia or New Zealand instead of Canada), not booth: there's already a booth in the Linux HA stack, so you'll likely end up with both on your PATH. The full command reference, every backend and flag, lives in docs/usage.md.

Documentation

  • Usage — every backend, every flag, and the runtime launcher
  • Feature status — what compiles today, and what doesn't yet
  • Mainframe curios — ABEND dumps, SNAP, SYSPRINT, TDF
  • Validated hardware — the silicon it's been tested on, and the test suite
  • Roadmap — where it's headed
  • Contributing — style, naming, and where to help (PRs in any language welcome)

Supporting this compiler

If you're considering supporting this compiler please feel free to get in touch.

However if this compiler has been particularly helpful for you then please consider the Kate Edger Foundation which funds women in education across Auckland and Northland, named for Kate Edger, the first woman in New Zealand to earn a university degree (Latin and mathematics, 1877). If Booth's namesake means anything to you, they're well worth a look.

License

Apache 2.0. Do whatever you want. If this compiler somehow ends up in production, I'd love to hear about it, mostly so I can update my LinkedIn with something more interesting than wrote a CUDA compiler for fun.

Contact

Found a bug? Want to discuss the finer points of AMDGPU instruction encoding? Need someone to commiserate with about the state of GPU computing?

zanehambly@gmail.com

Open an issue if there's anything you want to discuss. Or don't. I'm not your mum.

Based in New Zealand, where it's already tomorrow and the GPUs are just as confused as everywhere else.

Acknowledgements

  • Fernando Magno Quintão Pereira and the Compilers Lab at UFMG (Universidade Federal de Minas Gerais). Fernando reached out after seeing the project, pointed me to the divergence analysis papers, and offered guidance. The SSA register allocator exists because of that conversation.
  • The academic community: Cooper, Harvey & Kennedy for dominators; Braun & Hack for SSA spilling; Sampaio, Souza, Collange & Pereira for divergence analysis. I'm just a hobbyist who reads papers and writes C. The actual hard work was done by the researchers.
  • Steven Muchnick for Advanced Compiler Design and Implementation. If this compiler does anything right, that book is why.
  • Low Level for the Zero to Hero C course and the YouTube channel. That's where I learnt C.
  • Abe Kornelis for being an amazing teacher. His work on the z390 Portable Mainframe Assembler project is well worth your time.
  • To the people who've sent messages of kindness and critique, thank you from a forever student and a happy hobbyist.
  • My Granny, Grandad, Nana and Baka. Love you x

He aha te mea nui o te ao. He tāngata, he tāngata, he tāngata.

What is the most important thing in the world? It is people, it is people, it is people.

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Discussions

all 6

Releases and announcements

2 total
  1. Booth 5.01v5.01Jul 14, 2026

    So long, and thanks for all the fish. BarraCUDA was a good pun and a bad description, so it swam off: the compiler is Booth now, the binary is `kath`, and the version jumps to mark the line. This is the first release under the new name. Since 0.5 the compiler grew a spine on the CPU side. x86-64 and RV64 both gained most of their scalar arithmetic, so a CUDA, HIP or Triton kernel now compiles and runs on a machine with no GPU in it at all. Tensix learned to emit native machine code for the baby RISC-V cores instead of leaning on a C++ handoff. `__device__` calls are inlined away before isel, so device helpers with control flow finally work on the GPU and vector backends. Diagnostics were rebuilt to read like Clang's, carets and colour and all, and the frontend picked up a pile of coverage. Thanks to the people who sent patches this cycle: @GauthamMK-0 for `__hip_bfloat16` and the `warpSize` builtin, @nataliakokoromyti for lowering `tl.where` to select and keeping the PTX header ASCII, and @kstppd for fixing the Makefile on non-x86 machines. Much appreciated.

  2. BarraCUDA 0.5v0.5.0May 29, 2026

    # BarraCUDA 0.5 The first tagged release. The headline is that you can write a Triton kernel, matmul and all, and run it on a CPU with no GPU. The `--cpu` backend lowers BIR straight to x86-64 with the SIMT model collapsed into a thread loop, and the rank-2 tile path materialises and unrolls so `tl.dot` plus a K-loop sweeps an arbitrary contraction. ## New in this cycle - **CPU backend (`--cpu`)**. CUDA and Triton kernels compile to a host object and run natively. Headline demo: `examples/cpu_launch_matmul.c`. - **RISC-V backend (`--rv64`)**. Same idea, RV64IMFD objects that run under qemu. - **Cross-backend differential testing** (`tests/diff/`). Same BIR through two backends, diff the output buffers, CPU is the oracle. Every case runs `--inject` so a green result actually means something. - **Triton scalar math intrinsics**. `exp`, `log`, `sin`, `cos`, `tan`, `tanh`, `sqrt`, `rsqrt`, `abs`, `floor`, `ceil`, `maximum`, `minimum`, `fdiv`. Thanks to @shivam2931120 for the PR, radians-to-turns convention done right. - **Triton constexpr ABI compaction**. `tl.constexpr` params with defaults fold to literals and drop out of the runtime signature. - **CUDA fi

Code frequency

additions and deletions
+22.6K-22.6KWeek of 2026-02-15: +20,729 linesWeek of 2026-02-15: -386 linesWeek of 2026-02-22: +22,589 linesWeek of 2026-02-22: -15,924 linesWeek of 2026-03-01: +7,361 linesWeek of 2026-03-01: -2,996 linesWeek of 2026-03-08: +6,293 linesWeek of 2026-03-08: -752 linesWeek of 2026-03-15: +3,608 linesWeek of 2026-03-15: -54 linesWeek of 2026-03-22: +119 linesWeek of 2026-03-22: -20 linesWeek of 2026-03-29: +0 linesWeek of 2026-03-29: -0 linesWeek of 2026-04-05: +0 linesWeek of 2026-04-05: -0 linesWeek of 2026-04-12: +0 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +45 linesWeek of 2026-04-19: -1 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +6,765 linesWeek of 2026-05-17: -322 linesWeek of 2026-05-24: +12,467 linesWeek of 2026-05-24: -434 linesWeek of 2026-05-31: +3,693 linesWeek of 2026-05-31: -294 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +2,004 linesWeek of 2026-06-14: -938 linesWeek of 2026-06-21: +75 linesWeek of 2026-06-21: -5 linesWeek of 2026-06-28: +191 linesWeek of 2026-06-28: -3 linesWeek of 2026-07-05: +670 linesWeek of 2026-07-05: -725 linesWeek of 2026-07-12: +1,412 linesWeek of 2026-07-12: -827 linesWeek of 2026-07-19: +1,981 linesWeek of 2026-07-19: -415 linesWeek of 2026-07-26: +2,917 linesWeek of 2026-07-26: -700 linesFeb 15, 2026Jul 26, 2026
+92.9K lines added, -24.8K removed over the last year.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 1 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 1 commitsSun 13:00 — 1 commitsSun 14:00 — 2 commitsSun 15:00 — 0 commitsSun 16:00 — 2 commitsSun 17:00 — 1 commitsSun 18:00 — 3 commitsSun 19:00 — 4 commitsSun 20:00 — 2 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 2 commitsMon 2:00 — 4 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 1 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 2 commitsMon 12:00 — 1 commitsMon 13:00 — 2 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 2 commitsMon 17:00 — 0 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 1 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 4 commitsTue 0:00 — 3 commitsTue 1:00 — 1 commitsTue 2:00 — 0 commitsTue 3:00 — 2 commitsTue 4:00 — 0 commitsTue 5:00 — 1 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 1 commitsTue 9:00 — 0 commitsTue 10:00 — 1 commitsTue 11:00 — 4 commitsTue 12:00 — 3 commitsTue 13:00 — 2 commitsTue 14:00 — 3 commitsTue 15:00 — 5 commitsTue 16:00 — 2 commitsTue 17:00 — 0 commitsTue 18:00 — 1 commitsTue 19:00 — 4 commitsTue 20:00 — 1 commitsTue 21:00 — 0 commitsTue 22:00 — 1 commitsTue 23:00 — 2 commitsWed 0:00 — 1 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 1 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 5 commitsWed 13:00 — 1 commitsWed 14:00 — 0 commitsWed 15:00 — 0 commitsWed 16:00 — 4 commitsWed 17:00 — 0 commitsWed 18:00 — 6 commitsWed 19:00 — 5 commitsWed 20:00 — 4 commitsWed 21:00 — 7 commitsWed 22:00 — 1 commitsWed 23:00 — 10 commitsThu 0:00 — 2 commitsThu 1:00 — 2 commitsThu 2:00 — 1 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 0 commitsThu 13:00 — 1 commitsThu 14:00 — 0 commitsThu 15:00 — 1 commitsThu 16:00 — 3 commitsThu 17:00 — 0 commitsThu 18:00 — 1 commitsThu 19:00 — 2 commitsThu 20:00 — 2 commitsThu 21:00 — 7 commitsThu 22:00 — 7 commitsThu 23:00 — 7 commitsFri 0:00 — 0 commitsFri 1:00 — 1 commitsFri 2:00 — 1 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 1 commitsFri 8:00 — 0 commitsFri 9:00 — 2 commitsFri 10:00 — 0 commitsFri 11:00 — 1 commitsFri 12:00 — 0 commitsFri 13:00 — 0 commitsFri 14:00 — 1 commitsFri 15:00 — 1 commitsFri 16:00 — 1 commitsFri 17:00 — 1 commitsFri 18:00 — 1 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 2 commitsFri 22:00 — 1 commitsFri 23:00 — 3 commitsSat 0:00 — 3 commitsSat 1:00 — 3 commitsSat 2:00 — 2 commitsSat 3:00 — 2 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 1 commitsSat 9:00 — 1 commitsSat 10:00 — 6 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 0 commitsSat 15:00 — 1 commitsSat 16:00 — 0 commitsSat 17:00 — 9 commitsSat 18:00 — 0 commitsSat 19:00 — 0 commitsSat 20:00 — 1 commitsSat 21:00 — 5 commitsSat 22:00 — 0 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits230 (89%)
Community commits27 (11%)

257 commits in total over the last year.

  • Genymobile/scrcpy

    Display and control your Android device

    147.1K stars · C

  • vercel/next.js

    The React Framework

    141.7K stars · JavaScript

  • microsoft/PowerToys

    Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows

    137.6K stars · C

  • webpack/webpack

    A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.

    66K stars · JavaScript

  • colbymchenry/codegraph

    Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, and Hermes Agent — fewer tokens, fewer tool calls, 100% local

    65.2K stars · C

  • jamiepine/voicebox

    The open-source AI voice studio. Clone, dictate, create.

    49.6K stars · TypeScript