Skip to content

The Theme Editor

The plugin opens in a default gold-on-leather palette. If that doesn’t suit your Studio setup — too dark, wrong accent, the wrong font for your eyes — there’s a Theme Editor panel that retints every plugin surface. Nine built-in presets, custom mode for free editing, live preview without restarting Studio.

Open the plugin HUD. Click the Theme button (gear / palette icon, depending on icon set). A new panel appears with rows for each themeable property and a row of action buttons at the bottom.

Changes preview as you type. There’s no Apply step required to see the effect — the panel itself, the property panels, the inventory, the graph editor, all retint immediately. The Apply step is for persisting the change across Studio restarts.

Six colors, two opacities, font family, font size:

  • Accent color — borders, dropdown carets, active dropdown highlights
  • Panel background — the main panel fills (Properties, Toolbench, etc.)
  • Blob background — secondary fills (rows inside panels, inventory grid cells)
  • Slider color — slider tracks and graph keypoint fills
  • Scrollbar color — scrollbar thumb tint
  • Text accent — gold-tone label text and active values
  • Panel opacity0 (fully transparent) to 100 (fully opaque)
  • Blob opacity — same scale, separately tunable
  • Font — Roblox font enum (FredokaOne, Gotham, RobotoMono, and others Studio supports). Body fonts in surfaces like the inventory and tooltips survive theme-font changes — switching the panel font no longer wipes the body-text font in those secondary surfaces.
  • Font size50 to 200% of the plugin’s base size on the slider. Values below 50% set through JSON import or by typing the value directly are preserved as-is; the slider doesn’t snap them up to 50% on next interaction.

A Preset dropdown at the top of the editor offers nine curated palettes plus Custom:

PresetVibeFont
Default GoldWarm gold accent on dark leatherFredokaOne
Midnight BlueCool blues, low contrastFredokaOne
Crimson DarkWax-red accent on near-blackFredokaOne
Forest GreenMuted forest with sage accentsFredokaOne
Pitch BlackPure black, white slidersGotham
MonochromeGreyscale, mid contrastRobotoMono
DraculaDracula-scheme purple/pinkRobotoMono
NordNord-palette cool greys + tealGotham
SunsetOrange/pink warm gradientFredokaOne

Pick one, every color and font field updates to that preset’s values, and the panel re-tints. The dropdown switches to Custom automatically the moment you tweak any individual value — so you always know whether you’re on a curated preset or have started branching off.

At the bottom of the panel:

  • Apply — writes the current theme to plugin settings (persists across Studio restarts) and snapshots it as the “saved” state.
  • Cancel — reverts every field back to whatever was last applied or last loaded. Useful if you’ve previewed a preset and want to back out.
  • Reset — restores the Default Gold preset.
  • Export — writes the current theme as a JSON blob into a code box at the bottom of the panel. Select-all and copy from there to share or save it.
  • Import — reads JSON from that same code box and applies it. Paste a theme blob into the box first, then click Import.

The JSON format mirrors the settings stored internally — six hex color strings, two integer opacities, a font name, an integer font scale. Malformed JSON is caught silently — no warning is printed — and the panel just stays on its previous theme.

When you edit any theme field, every UI surface the plugin owns retints in the same frame — main panels, inventory, the graph editor, the colour pickers, the toolbench, the property panel rows. Strokes follow the accent colour too, so changing the accent updates outlined panels and dropdown borders alongside everything else. There’s no manual refresh step; the change you made is reflected the moment you typed it.

This works for the plugin’s own UI only — there’s no public hook for adding your own panels into the theme system from outside the plugin.

Themes are stored in the plugin settings via Studio’s plugin:SetSetting("ThemeJSON", json). Settings persist per-Studio-install — uninstall and reinstall the plugin and your saved theme returns automatically.

If the saved JSON has been corrupted somehow, the loader catches the parse error and falls back to the default theme. Plugin still loads.

Theming covers the look of the plugin’s panels. The interactions inside those panels — multi-axis graph editing, panel resize/collapse, selection-aware Clipboard, search-with-auto-expand — are what the next chapter, UI Quality of Life, is about.