UI Quality of Life
The plugin’s authoring panel is dense — eleven emitter types, dozens of properties each, three-axis graphs and ranges, a flipbook section, an advanced section. Without a few quality-of-life behaviours you’d be drowning in repetitive clicks. This chapter is the rest of those behaviours: the patterns that make per-axis edits, multi-emitter selection, and panel management painless. None of them are required to use the plugin. All of them are worth knowing because they save real time once you’re past the basics.
Multi-axis graph editing
Section titled “Multi-axis graph editing”Properties like Size, Rotation Speed, and (on ImageLabel) Size Scale are per-axis — three independent graphs, one each for X, Y, and Z (or two for ImageLabel’s 2D pair). The panel renders these as a row with axis-toggle buttons followed by an Edit button:
Size: [X] [Y] [Z] (Edit)Click an axis button to select it. Click another axis button to add it to the selection. Then click the Edit button — the Graph Editor opens, and any change you make applies to every selected axis at once.
This means you can author one graph and apply it to all three axes in a single edit, instead of opening the editor three times and copy-pasting the same shape. Useful when you want uniform behaviour: a Size graph that scales identically on every axis, a Rotation Speed graph that spins evenly around all three.
The first axis you select is the primary — the Edit button shows that axis’s existing graph as the starting point. Subsequent axes inherit the primary’s shape when you commit. A subtle stroke around the primary’s button makes which one is leading visually clear.
When you’re done, click any axis button to deselect it. With nothing selected, the Edit button is inactive — there’s nothing to edit.
The same pattern applies to the per-axis input rows like Position and Rotation (initial — under Motion in the panel). Toggle X/Y/Z, type a value, and it writes to every selected axis at once.
Multi-emitter selection
Section titled “Multi-emitter selection”Select several emitters in Studio’s Explorer (Ctrl-click, Shift-click, or rubber-band) and the property panel adapts:
- Properties shared by every selected type appear, with values reflecting the common state (or blank for “mixed values”).
- Properties unique to one type appear only when at least one item of that type is in the selection.
- Edits apply to every selected emitter simultaneously.
You can select different types together — Part + Beam + Trail — and the panel still shows the shared properties (Color, Lifetime, Rate). Type-specific rows like Beam’s Blender only appear when a Beam is in the selection.
Roblox’s ParticleEmitter and Trail join the same selection model when Native Editing is on. Pick ten of them and edit Rate once.
Panel resize and collapse
Section titled “Panel resize and collapse”Every plugin panel — Properties, Toolbench, Inventory, Graph Editor — has:
- A drag handle in the top-left for moving it around the viewport.
- An edge resize zone (invisible handles a few pixels wide centred on each panel edge) for making it bigger or smaller.
- A collapse arrow in the header that hides the body and leaves only the header bar — useful when you need the screen real estate but want the panel one click away.
Resize positions persist across plugin restarts via plugin settings. Drag a panel into a corner; it stays there next session. Resize the Inventory wider for big libraries; that width survives.
The QMenu’s Settings group has a Reset Layout button that restores every panel to its default size and position if you’ve made a mess.
Selection-aware clipboard
Section titled “Selection-aware clipboard”The Toolbench’s Clipboard tool copies the current selection’s property values to a clipboard slot. Paste applies them to a different selection.
The clever bit: clipboard is selection-aware — only properties shared between source and destination get pasted. Copy a Part’s settings; paste onto a Beam; only Color, Lifetime, Rate, and other shared properties land. Beam-specific Width0 doesn’t get a wrong value from a Part copy.
The Clipboard also lets you copy just one section (Spawning, Appearance, Movement, etc.) instead of every property. Useful when you want to share a particular look across emitters without overwriting unrelated settings like Position or Lifetime.
Search expand/collapse
Section titled “Search expand/collapse”The Properties panel has a search box that filters visible rows live as you type. Type “rot” and only Rotation, Rotation Mode, Rotation Speed appear. Type “speed” and only Speed-related rows.
When search is non-empty, all collapsed sections (Movement, Shape, Flipbook, Advanced) auto-expand so matching rows are visible. Empty the search box and the sections re-collapse to whatever state you had them in before.
This means you can drop a section to hide it, search for a property inside that section, edit it, clear the search, and the section returns to collapsed without needing to manually re-collapse.
Range-string shortcuts
Section titled “Range-string shortcuts”Range fields (Lifetime, RotX/Y/Z, etc.) accept several input formats:
1— interpreted as1, 1(point range)1, 2— explicitmin, max1.5, -0.5— the plugin sorts so min ≤ max regardless of input order1..2—..is also accepted as a separator (the plugin’s parser is forgiving)
Single-value entry is the most common shortcut: type 2 for a 2-second lifetime, no need to type 2, 2.
Garbage input — abc, 66, 66ab, an empty string, anything else the parser can’t read — flashes the field red and restores the previous value. Earlier versions silently overwrote the value with zeros across about thirty inputs in the panel; that’s no longer possible. The visual flash is the cue: if you see red, the value didn’t change.
Beam and Trail Texture fields reject non-numeric input the same way (those fields take asset ids, which are numeric). Pasting non-numeric text used to silently clear the field; now the paste is rejected and the existing texture stays.
Live editing
Section titled “Live editing”Every input applies the moment focus leaves the field — no Apply button required. Tab away from a number field, click another field, the previous edit lands. The next emission uses the new value.
Particles already in flight aren’t retroactively updated (covered in Properties → Live Editing) — they play out with their snapshotted values.
Keyboard shortcuts
Section titled “Keyboard shortcuts”The plugin provides a configurable shortcut system layered on top of a small set of always-on Studio integrations.
Always-on shortcuts
Section titled “Always-on shortcuts”| Shortcut | Where | Effect |
|---|---|---|
| Ctrl+Z / Ctrl+Y | Studio | Undo / redo plugin property changes (handled by Studio’s own ChangeHistoryService — the plugin sets waypoints around every edit). A single Ctrl+Z reverts a Color Pick, including any cancel-style action. |
| C / V | Graph Editor only | Copy / paste keypoints between graphs while the Graph Editor is open (bare keys, no Ctrl modifier) |
| Esc | Inventory Detail / Graph Editor / Shortcut capture | Close the Detail panel, close the Graph Editor, or cancel an in-progress shortcut binding. |
These three are wired into the plugin’s runtime and don’t appear in the Shortcuts panel — they’re enforced regardless of what bindings you configure.
Configurable shortcuts (the Shortcuts panel)
Section titled “Configurable shortcuts (the Shortcuts panel)”Everything else lives in a dedicated Shortcuts panel under the Settings menu. The panel lists every bindable plugin action grouped by category (UI, Tools, Edit, Animate, Emit) with a Bind button on each row. Click Bind, press the key combination you want, done.
The P-prefix leader. All configurable shortcuts use P as a hold-style leader: hold P down, then tap the chord key you bound, then release. A binding to T displays as P + T and fires when you hold P and tap T together (not P-then-T as a sequence). This sidesteps Studio’s Ctrl/Shift/Alt-saturated namespace and keeps the plugin’s keys isolated. P alone fires nothing — it’s only a modifier. Bare keys (no Ctrl/Shift/Alt) and traditional chords (Ctrl+T, Shift+I, etc.) are both supported, but the P leader is always required.
Bindable actions. The panel exposes 22 actions: panel toggles (UI, Inventory, Properties, Theme Editor, Motion Preview, Resize / Retime / Hue / Clipboard / Shifter / Emit Code / Settings / Randomize / Shortcuts), edit ops (Transform Selection, Repair Selection, Delete Selection), Animate-mode toggle, and emit ops (Toggle Enable, Toggle AutoEmit, Emit Now, Stop Emits). Each action has a unique ID; the runtime resolves a key combination to at most one action.
No defaults out of the box. Fresh installs ship with zero pre-configured bindings — you bind only the actions you want, and unintended global hotkeys never appear. The bindings persist via Studio’s plugin settings, so once configured they survive plugin reloads and Studio restarts.
Conflict + focus handling. If you bind a key combo already in use, the previous binding is reassigned automatically and a brief warning shows on that row. While a TextBox is focused (search box, Properties field, etc.) all shortcuts are suppressed so keystrokes reach the input. While the Shortcuts panel itself is open, only Toggle UI and Toggle Shortcuts can fire — so your key-tapping while configuring doesn’t trigger unrelated actions.
Studio’s Customize Shortcuts dialog is not used. The plugin does not register Roblox PluginAction instances for its shortcuts — the dialog won’t show entries for them. This is deliberate: Studio’s PluginAction dispatch fires without proof that P was held, which would bypass the leader policy. All shortcut configuration happens inside the plugin’s Shortcuts panel.
Mac Cmd label. Roblox’s plugin API doesn’t expose host-OS detection, so the panel labels the meta key as “Win” by default. Mac users who’d prefer “Cmd” can flip a setting from Studio’s developer console: plugin:SetSetting("DisplayCmdAsMeta", true). Reopen the Shortcuts panel; labels update on the next mount.
Drag-resize sidebar (docs site only)
Section titled “Drag-resize sidebar (docs site only)”If you’re reading this on the documentation site, the navigation chevron at the inner edge of each side panel does double duty: click to collapse the panel, drag to resize, shift+click to reset to default width. Same pattern on both the left navigation and the right TOC. Persists in localStorage.
Worth knowing
Section titled “Worth knowing”Multi-axis edits are atomic per-axis. If you select X and Z and edit, the engine writes the new graph to X then Z separately. There’s no “axes 1 and 3” optimisation — it’s the same as editing each axis once, just bundled into one click. Undo restores both axes in a single step.
Single-emitter edits don’t need selection-aware clipboard. If only one emitter is selected, every clipboard paste just lands as-is — no shared-property filtering. The filtering only kicks in for multi-selects.
Search filtering is per-panel. Each panel has its own search box. The Properties panel’s search doesn’t filter the Inventory grid, and vice versa.
Range strings persist as numeric ranges. Even if you typed 1..2, the stored attribute is NumberRange.new(1, 2). The plugin formats it back as 1, 2 next time the field renders.
Position and Rotation labels refresh on undo. When you Ctrl+Z a change to a Position or Rotation field, the on-screen label catches up to the new value the same frame — earlier versions could leave the label showing the old number after an undo until the next selection change.
Instance pickers play nice with Studio’s Selection. Opening any instance picker (EmitParent, AccelTarget, Link Dir., Layer/picker fields in tools, etc.) clears Studio’s current Selection on open and restores it when you Set, Clear, or Cancel. While a picker is open the Properties panel is frozen so a stray click in the Explorer doesn’t switch you to a different emitter mid-pick.
Toggle Enable is a single click on mixed selections. Selecting a mix of Enabled and Disabled items, then clicking Toggle Enable, flips them all to a consistent state in one click — no more “click once to enable the disabled ones, click again to disable everything”.
The Emit Code tool labels its primary button “Select All”. It used to say “Copy”, but copying happens on selection-then-Ctrl+C anyway; the button now selects the generated snippet so you can copy it with the regular keystroke.
What’s next
Section titled “What’s next”You’ve now seen every authoring surface the plugin exposes front-and-centre. The next section, Hidden Depths, covers the power features the plugin doesn’t put on the main panel: nesting (composite emitters), native editing of stock ParticleEmitter / Trail, texture pinning, and the GraphBlender math behind Beam’s per-state interpolation.