Skip to content

Changelog

The plugin auto-updates from the public release repo, so you don’t have to track these by hand — but they’re here for the record. Listed newest first.

A focused bug-and-polish pass across Animate mode, input handling, the Beam Blender, native ParticleEmitter, the inventory, the graph editor, and the theme system.

Animate mode.

  • Nested staggered emitters keep their authored EmitDelay across Animate loops (was silently zeroing on loop 2+).
  • Beam Blender plays the correct colours on every loop cycle (cycles 2+ used to be wrong).
  • Animated Models with nested Beams stay smooth at small scales.

Inputs.

  • Position / Rotation labels refresh on undo and on selection change.
  • Garbage typing in number fields (e.g. abc, 66, 66ab) flashes red and restores the previous value, instead of silently overwriting with zeros across ~30 inputs.
  • Beam / Trail Texture fields reject non-numeric input (was silently clearing the field).
  • A single Ctrl+Z reverts a Color Pick.

Beam Blender.

  • Add State spreads existing states’ Time values evenly across [0, 1][0, 1][0, 0.5, 1][0, 0.33, 0.66, 1], and so on. Already-retimed states are preserved (neighbour-midpoint fallback).
  • Deleting a state renumbers the remaining state names sequentially.
  • The Time field validates: out-of-range or duplicate values flash red and revert.

Native ParticleEmitter.

  • NEW Grid input for FlipbookLayout — 4 for 4×4, 5, 4 for 5×4, 0 to disable.
  • The Mode dropdown now matches Roblox’s Enum.ParticleFlipbookMode exactly: Loop / OneShot / PingPong / Random (PingPong was missing before).

Inventory.

  • Models can opt into PreloadTexture (the toggle previously only existed for the texture-bearing types).
  • Bulk JSON import is dramatically faster — a 500-item import that took several seconds now completes sub-second.
  • Comma-bearing names persist correctly in favourites and recents.

Graph editor.

  • Adding a keypoint in linear-mode segments preserves the authored bezier handles on neighbouring keypoints.
  • The Simplify panel reverts on close-without-Minimize.
  • Click-without-drag on a keypoint no longer pollutes the undo stack.

Theme.

  • Body fonts (inventory, tooltips) survive theme font changes.
  • Strokes follow accent-colour changes.
  • The font-size slider preserves sub-50% values.

Misc.

  • OptCalc registers idle items (count = 0, disabled, no duration) as zero cost — no more false-red warnings.
  • Motion Preview variant count is now adaptive: 1 emitter selected = ~20 lines drawn; 5+ emitters share ~20 total.
  • Corrupted attribute values fall back safely instead of crashing emit.

v32 — Orientation modes, ZOffset, LinkTrack, WeldWithoutRotation, Linger

Section titled “v32 — Orientation modes, ZOffset, LinkTrack, WeldWithoutRotation, Linger”

Per-emitter polish across the lighter types.

  • Orientation added on Part / Attachment / Model — Roblox’s ParticleEmitter.Orientation enum (None, FacingCamera, FacingCameraWorldUp, VelocityParallel, VelocityPerpendicular) now applies to transformed types too.
  • ZOffset added on Part / Attachment / Model — per-particle offset along the camera’s forward axis. Layered effects no longer z-fight. (Beam already exposed ZOffset; v32 brings the workspace 3D types up to parity.)
  • LinkTrack — per-frame link-CFrame reapply for Part and Model emits, runs every Heartbeat outside the keyframe-step gate so a linked particle stays glued to its target between step advances.
  • WeldWithoutRotation added to the LinkMode set — position plus link’s rotated-axis offset, but the particle’s mesh orientation stays independent. See Linking → WeldWithoutRotation.
  • Linger extended to screen / light / image types — same PartLife post-lifetime extension Part / Beam / Model already had.
  • v32.05. Inventory texture-load deferred by 2 seconds so the plugin UI mounts before the heavy JSON parse.
  • Texture library merge. VFXData + Zonito remainder folded into the inventory; total now 12,852 unique IDs across the original 22 categories.

The big new emitter family.

  • Blur / Bloom / ColorCorrection / Atmosphere / ImageLabel added as transformable types. Screen-space and UI emitters with their own per-type properties (e.g. Bloom’s Threshold graph, Atmosphere’s dual Color + Decay graph, ImageLabel’s polar emission model).
  • LinkSource dropdown (None / Camera / Object) replaces the previous “Camera as a LinkMode” approach. The Camera link is now resolved at emit time via workspace.CurrentCamera so swapping cameras at runtime works correctly. See Linking → Camera linking.
  • Graph Editor polish — bezier self-intersection clamp, handle grabbability + min-length guards, keypoint drag clamping, envelope overflow + handle sync fixes.
  • Edit-time spritesheet sizing. Spritesheet dimensions are stamped onto the source instance at edit time (via _SheetSize / _SheetAsset attributes) so the runtime emit path reads the stamped value directly without an HTTP call.
  • TexturePin owner-tracked refcounting lets two roots pin the same asset id without trampling each other’s claim — releasing one root keeps the texture pinned via the other.
  • Auth + bezier fixes.
  • v31.01. 1-frame pop on Beam + PointLight emits resolved.
  • v31.02. Runtime Part_Icles module auto-refreshes on plugin load so the script-side API stays current with the plugin without manual reinsertion.
  • PosX / PosY / PosZ — per-axis random spawn offsets in studs. Replaced earlier “RadiusXYZ”-style inputs with proper ranges.
  • DirMode — frame-of-reference picker (RigidLocal / Local / Global) for how the launch direction is interpreted relative to the source’s rotation. See Motion → Dir. Mode.
  • Pivot link mode fix — initial rotation now bakes correctly at spawn.
  • UX polish across the property panel.
  • v30.05. Global DirMode strips the emitter’s rotation but preserves authored RotX/Y/Z initial rotation — the two are now orthogonal.
  • v30.06. Insert Module button uses Part_Icles as the inserted module’s name.
  • v30.31. MotionPreview corrected for purely-vertical emission directions (degenerate cross-product case).

The biggest single feature drop since the inventory system.

  • Motion Preview tool. Pick an emitter, watch its trajectory variants drawn live in the viewport via LineHandleAdornments. Reuses the engine’s actual motion routine so what you see is what will emit. Several variants per emitter, debounced, hard cap on items per refresh for large selections. Camera-facing chevrons.
  • Local inventory Grid. A second tier inside the Inventory panel showing your own Studio assets alongside the cloud library. Scrolls and filters the same way.
  • Dissect From Selection. A button in the Dissect dialog that auto-fills the asset-id box with the .Texture field of every selected Decal / Texture / Beam in your Studio workspace.
  • Asset bridge. New plugin-side infrastructure powers full-resolution dissect of public Roblox assets.
  • Full-resolution dissect. No more thumbnail-resolution cap when slicing assets you don’t own.
  • Parallel sheet dissection. Multiple dissects run concurrently without backlogging.
  • Link mode fixes. InvertMotion now respects Follow and Pivot link modes correctly.
  • Default Speed = 0 across all types (was a per-type mix). Less surprise on first transform.
  • Beam Transform + Fix force LightInfluence = 0 — beams emit visibly under any lighting now without manual adjustment.
  • Slider overhaul. Log-scale resize/retime sliders (0.5× to 2×), unclamped text input, throttle fix, 5px padding to clear the panel-resize edge handles.
  • Double-emit dedup. validParents ancestor filtering plus a DescendantAdded guard on emitted clones — same particle no longer counts twice when nested emitters are involved.

A long sequence of small fixes for issues beta testers caught:

  • Focus pause with a 10-minute grace window — the plugin pauses emission when Studio loses focus, resumes on regain. Prevents simulation drift while you’re in another window.
  • Snapshot + color preview fixes (some properties weren’t restoring on Cancel).
  • ParticleEmitter graph range — stock PE selections now show a graph row where the plugin would (with appropriate Range fallback for native PE behaviour).
  • Toggle stability — toggles no longer get out of sync with their backing attribute on rapid clicks.
  • Disable API — scripter-side method to programmatically halt an emitter without writing the Enabled attribute directly.
  • Anti-double-emission guards for the burst-emit path.
  • Comprehensive undo/redo coverage across every Properties panel write. Ctrl+Z always works.
  • Emitted-clone history exclusion — emitted duplicates no longer pollute the undo stack.
  • Auto-update install timeout fix — the install path no longer hangs on slow downloads.
  • Emit code tool — Toolbench addition for generating ready-to-paste Particle:Emit() snippets for the current selection.
  • Beam/PointLight nil safety for selection edge cases.

v26 – v27 — Auto-update bundle + engine fixes

Section titled “v26 – v27 — Auto-update bundle + engine fixes”

The shift to a stable update channel and core engine work, before the v28 stability run.

  • Modern auto-update channel. New plugin versions deliver through plugin-side infrastructure rather than going through Roblox asset moderation. The legacy delivery path stays as fallback for older installs. Existing copies in ServerStorage are kept as backup, not destroyed.
  • Frame-independent beams + emission. Engine math now scales by dt so emission rates and beam-property animations stay proportional regardless of frame rate.
  • Nested Model emission. Models containing transformed children emit recursively — descendant emitters fire from each emitted Model clone.
  • Memory-leak fix in teardown. :Deactivate now releases every per-particle state path on shutdown.
  • Internal refactor of inventory-side wiring for maintainability.
  • Auto-update install hardening — large module writes occasionally hit a Roblox length limit; now caught and retried.
  • Banner cleanup for the post-update install message.
  • v26.5 — Shirt auth, retime/resize fixes, inventory backup, preload batching. Whitelist channel via Roblox shirt purchase added alongside the existing gamepass route. Retime tool’s interaction with axis-grouped properties tightened. Inventory now backs up to a hidden ServerStorage ModuleScript so a wiped plugin-settings store still recovers your library. Texture decode queue limited to two concurrent loads.
  • v27 — Internal refactor of the panel-refresh dispatcher for maintainability.
  • v27.5 — Bundle compression (~50% smaller), PE Brightness, search fixes, resize beams/trails. Plugin-bundle size halved for faster auto-update over slow connections. Native ParticleEmitter selections now expose a graph-animated Brightness row. Multi-word panel-search reliability tightened. Resize tool extended to Beam and Trail width/length properties.
  • v27.75 — Minor bug fixes (silent update — no functional changes user-facing).

The shift from “many small bugs” to “engineered stability.”

  • FPS-independent beams/emission. Engine math now scales by dt so emission rates and beam scrolls don’t drift on framerate.
  • Bezier persistence — graph editor bezier handles round-trip through save/load without rounding error.
  • Flipbook reverse — added Reverse toggle to all flipbook sections.
  • Layout overhaul — Properties panel section ordering and spacing tightened.
  • Retime fixes — Retime tool’s interaction with axis-grouped properties was off by a factor in some cases.
  • Selection-aware Clipboard/Shifter — copy from a multi-selection of mixed types, paste to another mixed selection, only shared properties land.
  • Search expand/collapse — Properties panel search auto-expands collapsed sections to show matches; clearing returns sections to their previous state.
  • BeamLightInfluence — graph-animated LightInfluence for beams.
  • Range input support — fields accept 1, 1, 2, or 1..2; auto-sort min ≤ max.
  • Inventory optimisations — smooth scrolling, debounced search, decode batching.
  • Auto-update system — plugin checks GitHub release for newer version on every load; downloads + stages in ServerStorage with one-click install.

A planned bug-hunt session.

  • Model scaling for nested-emitter children.
  • Flipbook timing math (frame indexing was off-by-one in some configs).
  • 13 small bug fixes across various systems.
  • Theme fixes — several panels were not registered with the _themed array and didn’t retint.

Pre-v24 history is in the plugin’s source-side git log. Versions are continuous — every commit increments. Auto-update tracks the latest tagged version on the release repo, not the per-commit version.

M8 (Launch). Beta feedback addressed, final polish, listing finalised.