Skip to content

Repository files navigation

Visor Studio

Visor Studio is a visual boot.conf configurator for Visor BootManager. It helps you edit, preview, validate, and export a Visor configuration without rebooting after every small change.

The project started from the very real pain of editing boot.conf, rebooting, noticing one wrong color/path/layout value, booting back into the OS, and doing it again. Visor Studio makes that loop faster by putting the config, diagnostics, generated output, and boot menu preview in one place.

Visor Studio is a companion project for Visor BootManager. It is not the bootloader itself.

Highlights

  • Visor-aware parser for entry {}, linux {}, and windows {} blocks
  • Schema-driven config controls from Visor's upstream boot.conf.schema.json
  • Alias handling for older/friendlier config keys
  • Diagnostics for malformed syntax, unknown keys, duplicate keys, risky values, and unclosed blocks
  • Safe auto-fix for aliases and hex color comment hazards
  • Unknown keys are preserved instead of silently discarded
  • Live boot menu preview using bundled Visor default config and assets
  • Entry wizard with Linux, UKI, Windows, and custom EFI presets
  • Automatic icon suggestions from entry names
  • Upload support for custom backgrounds, logos, icons, power icons, and fonts
  • Local draft persistence across refreshes
  • Drag-and-drop boot entry reordering
  • Raw config, generated config, and diff views with syntax highlighting
  • Export bundle containing EFI/visor/boot.conf, staged assets, and install instructions

Screenshots

Main editor with a custom preview, staged assets, generated config flow, and schema-driven controls.

Visor Studio editor with custom preview

Fullscreen boot menu preview.

Fullscreen custom Visor preview

Boot entry wizard with presets, icon suggestion, upload support, and path helper commands.

Add boot entry modal

Diagnostics and safe auto-fix warnings before exporting.

Parser diagnostics and safe fixes

Export bundle with uploaded assets staged for EFI copy.

Export bundle with uploaded assets staged

Project Layout

.
├── main.py                    # FastAPI app
├── core/                      # Parser, serializer, schema metadata
│   └── boot.conf.schema.json  # Upstream Visor schema snapshot
├── schemas/                   # API request/response models
├── tests/                     # Backend tests
├── frontend/                  # React/Vite app
│   ├── src/                   # UI, preview, controls, local asset handling
│   └── public/
│       ├── defaults/          # Bundled upstream boot.conf.example
│       └── visor-assets/      # Bundled Visor default assets
├── docs/                      # Screenshots used by the README
├── samples/                   # Sample configs for testing
├── NOTICE.md                  # Upstream attribution
└── LICENSE

Requirements

  • Python 3.12+
  • Node.js 20+ recommended
  • npm

Run Locally

Start the backend:

python -m venv .venv
source .venv/bin/activate
pip install -e ".[test]"
uvicorn main:app --reload

Start the frontend in another terminal:

cd frontend
npm install
npm run dev

Open the Vite URL shown in the terminal, usually:

http://127.0.0.1:5173

The frontend expects the backend at:

http://127.0.0.1:8000

Useful Commands

Backend tests:

pytest -q

Frontend checks:

cd frontend
npm test
npm run build

Docker Deployment

The repo includes a production Dockerfile that builds the Vite frontend and serves it from the FastAPI app.

Build locally:

docker build -t visor-studio .

Run locally:

docker run --rm -p 8000:8000 visor-studio

Then open:

http://127.0.0.1:8000

For Railway, deploy from the repository root. Railway should detect the root Dockerfile automatically and run the container with its provided $PORT.

API

Health check:

GET /health

Parse a Visor config:

POST /api/parse-visor

Generate normalized boot.conf:

POST /api/generate

Apply safe text fixes:

POST /api/autofix

Read schema metadata for the UI:

GET /api/schema

Uploads And Export

Browser uploads are staged locally in the app. They are used for previewing and for building an export ZIP, but Visor itself still needs files to exist on the EFI System Partition at boot. PNG uploads that use indexed/paletted color are converted in the browser to a Visor-friendly PNG before export.

When you download the export bundle, it includes:

EFI/visor/boot.conf
EFI/visor/backgrounds/...   # staged backgrounds
EFI/visor/logos/...         # staged logos
EFI/visor/icons/...         # staged icons and power icons
INSTALL.txt

Typical install command after unzipping the bundle:

sudo cp -r EFI/visor /boot/efi/EFI/

If your EFI System Partition is mounted somewhere else, replace /boot/efi with the correct mount point, such as /efi or /mnt. EFI System Partitions usually do not preserve Linux file ownership, so the command intentionally avoids archive-mode ownership preservation.

Working With Visor Paths

Visor paths should match what Visor can read at boot, usually paths on the EFI System Partition or boot filesystem using backslashes:

\EFI\visor\icons\arch.png
\EFI\Linux\arch-linux.efi
\vmlinuz-linux
\initramfs-linux.img

Useful commands to find candidates on your machine:

findmnt /boot /efi /boot/efi
find /boot /efi /boot/efi -maxdepth 4 -type f \( -name '*.efi' -o -name 'vmlinuz*' -o -name 'initramfs*' -o -name 'initrd*' \)

Current Limits

The preview is useful for reducing reboot-and-check cycles, but it is still a browser approximation of Visor's EFI renderer.

  • It cannot verify that kernel, initrd, EFI, logo, background, icon, or font paths exist on your EFI System Partition.
  • Uploaded files are not installed automatically; the export bundle must still be copied to the correct EFI location.
  • Some runtime behavior is config-only in Studio, including hotplug scanning, NVRAM remember-last behavior, logging, snapshot discovery, and real firmware setup actions.
  • Theme file loading is not fully simulated yet.
  • Browser font rendering and EFI text rendering will never be perfectly identical.

Credits

Built by Farid.

Visor BootManager and bundled Visor assets are created by IO-ZetZor. Assets are used with permission from the Visor maintainer.

See NOTICE.md for upstream attribution.

License

This project is licensed under the BSD 2-Clause License. See LICENSE.

About

A visual configuration studio for Visor BootManager, with live boot.conf preview and generation.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages