Files
sunnypilot/system/ui
Jason Wen 59a16b9cdc Merge branch 'upstream/openpilot/master' into sync-20260225
# Conflicts:
#	.github/workflows/auto_pr_review.yaml
#	.github/workflows/badges.yaml
#	.github/workflows/mici_raylib_ui_preview.yaml
#	.github/workflows/prebuilt.yaml
#	.github/workflows/raylib_ui_preview.yaml
#	.github/workflows/release.yaml
#	.github/workflows/repo-maintenance.yaml
#	.github/workflows/tests.yaml
#	.gitignore
#	Dockerfile.openpilot_base
#	SConstruct
#	docs/CARS.md
#	opendbc_repo
#	panda
#	release/build_release.sh
#	selfdrive/modeld/SConscript
#	selfdrive/modeld/modeld.py
#	selfdrive/pandad/panda_safety.cc
#	selfdrive/pandad/pandad.cc
#	selfdrive/pandad/pandad.py
#	selfdrive/test/process_replay/process_replay.py
#	selfdrive/ui/layouts/onboarding.py
#	selfdrive/ui/mici/layouts/home.py
#	selfdrive/ui/tests/diff/replay.py
#	selfdrive/ui/tests/test_ui/raylib_screenshots.py
#	tools/mac_setup.sh
#	uv.lock
2026-02-27 16:12:57 -05:00
..
2026-02-20 19:00:27 -08:00
2026-02-20 19:00:27 -08:00
2025-11-18 22:27:45 -08:00
2025-11-18 22:27:45 -08:00
2025-11-18 22:27:45 -08:00
2026-02-20 19:00:27 -08:00
2026-02-20 19:00:27 -08:00
2025-11-18 22:27:45 -08:00

ui

The user interfaces here are built with raylib.

Quick start:

  • set BIG=1 to run the comma 3X UI (comma four UI runs by default)
  • set SHOW_FPS=1 to show the FPS
  • set STRICT_MODE=1 to kill the app if it drops too much below 60fps
  • set SCALE=1.5 to scale the entire UI by 1.5x
  • set BURN_IN=1 to get a burn-in heatmap version of the UI
  • set GRID=50 to show a 50-pixel alignment grid overlay
  • set MAGIC_DEBUG=1 to show every dropped frames (only on device)
  • set RECORD=1 to record the screen, output defaults to output.mp4 but can be set with RECORD_OUTPUT
  • set SUNNYPILOT_UI=0 to run the stock UI instead of the sunnypilot UI
  • https://www.raylib.com/cheatsheet/cheatsheet.html
  • https://electronstudio.github.io/raylib-python-cffi/README.html#quickstart

Style guide:

  • All graphical elements should subclass Widget.
    • Prefer a stateful widget over a function for easy migration from QT
  • All internal class variables and functions should be prefixed with _