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”A small set of plugin-specific 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 | Close the Detail panel or close the Graph Editor |
The plugin doesn’t bind any other shortcuts. There’s no F-to-favourite, no Enter-to-commit; favouriting is a click on the Detail panel’s Favourite button, and inventory actions are toolbar buttons. Studio’s own shortcuts (Ctrl+Shift+S to save, F1 for help, etc.) still work normally.
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.
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.