Emitter not emitting
You’ve set up an emitter. You toggled Enabled on. Nothing visible happens. Or you call :Emit() from a script and no particles appear.
This chapter is the checklist. Causes ordered by how often each one is the actual problem — start at the top, work down.
1. Is Enabled actually on?
Section titled “1. Is Enabled actually on?”The first and most common cause. The Enabled toggle in the property panel must be true for continuous emission. After Transform, the plugin sets it to false by default; you have to flip it on.
For script-driven emission, behaviour depends on which method:
:Emit(item)— one shot. Doesn’t readEnabled.:EnableEmit(item)— runs the item’sEmitCountinstant bursts, then ifEmitDuration > 0it sets the Configuration’sEnabled = true, runs the continuous loop for that many seconds, and flipsEnabledback tofalsewhen the window closes. WithEmitDuration = 0, no continuous loop runs andEnabledis never touched.:Enable(item)— runs a continuous loop that checksEnabledeach frame. If it’sfalse(the freshly-transformed default), the loop exits on its first iteration. Set the Configuration’sEnabled = truebefore calling, or call:EnableEmitinstead.
For the plugin’s previewing in Studio (the live emit while you build the effect), Enabled is the master switch.
2. Did you call :Activate() in your script?
Section titled “2. Did you call :Activate() in your script?”For runtime games using the From Script API, calling :Emit or :EnableEmit without first calling :Activate() produces no visible particles. The methods don’t error — they just don’t run, because the engine’s Heartbeat loop isn’t connected.
local Part_Icles = require(game.ReplicatedStorage:WaitForChild("Part_Icles"))Part_Icles:Activate() -- ← required before any emit callsPart_Icles:Emit(item)In Studio, the plugin runs by default on every Studio launch — no manual activation needed for the live preview. In a published game, your script must call :Activate() manually. See Install and Require.
3. For Model emitters: does the Model have a PrimaryPart?
Section titled “3. For Model emitters: does the Model have a PrimaryPart?”Transform refuses to apply if a Model has no PrimaryPart set. The plugin’s emit pipeline uses Model:PivotTo() and Model:ScaleTo(), both of which need the PrimaryPart as the pivot anchor.
If you Transform-clicked a Model and nothing changed, check Studio’s Output console for a warning. Set the PrimaryPart on the Model in Studio’s Explorer (right-click the relevant child Part → “Set as Primary Part”), then click Transform again.
4. For Beam emitters: are Attachment0 and Attachment1 set?
Section titled “4. For Beam emitters: are Attachment0 and Attachment1 set?”Roblox’s Beam class needs both attachment endpoints to render anything. If either is nil or pointing at a destroyed instance, the Beam draws nothing. The plugin doesn’t validate this for you — it inherits whatever the source Beam has.
Check the source Beam’s Attachment0 and Attachment1 properties in Studio. They should both reference valid Attachment instances. If either is empty, drag the relevant Attachment into the property field.
This is the usual cause of “I emitted a Beam and got an invisible burst — the engine emitted but nothing rendered.”
5. For top-level Part / Attachment / Model / PointLight emitters fired from a script: are the timing attributes set?
Section titled “5. For top-level Part / Attachment / Model / PointLight emitters fired from a script: are the timing attributes set?”Part, Attachment, Model, and PointLight emitters all default to EmitCount = 0 and EmitDuration = 0 at Transform — they expect the user to either set timing explicitly or rely on the auto-bump for one-shot triggers.
Calling :EnableEmit on a default-zero item still produces emission via the auto-bump: when both EmitCount and EmitDuration read zero, :EnableEmit treats the call as “burst once” and runs a single burst. The same auto-bump runs for nested emitters inside any parent type’s emit cycle, so nested rigs work without per-emitter timing setup.
If you want continuous emission, set EmitCount (initial bursts) and/or EmitDuration (seconds of continuous loop after) to non-zero values via the Attributes panel, then call :EnableEmit. Alternatively, call :Enable(item, link, duration) directly — that method ignores EmitCount and EmitDuration entirely and loops :Emit at the item’s Rate until duration elapses or Enabled flips off. (:Enable requires the Configuration’s Enabled attribute to be true; freshly-transformed items have Enabled = false. Item 1 above covers the fix.)
Beam doesn’t have this issue: Transform sets EmitCount = 1 on Beams specifically. Trail doesn’t either, but for a different reason — it uses a string EmitDuration that defaults to "2" and gets parsed at fire time.
6. For Attachment emitters: is the Render Template populated?
Section titled “6. For Attachment emitters: is the Render Template populated?”When you Transform an Attachment, the plugin creates a RenderTemplate child as a clone of the Attachment itself. By itself, that clone draws nothing — Attachments don’t render natively in Roblox. You have to add a child instance (a Decal, a Beam, a Trail, a PointLight, a BillboardGui — anything visible) inside the RenderTemplate for emitted Attachment-particles to have a visual.
Open the Attachment in Studio’s Explorer, find the RenderTemplate child, and add a Decal (or whatever visual fits the effect). Each emitted particle will then carry that child as its visible component.
Covered in detail in the Attachment chapter.
7. For Trail emitters: are the attachments moving?
Section titled “7. For Trail emitters: are the attachments moving?”A Trail draws a streak between two attachments. If the attachments aren’t moving (the source Trail and its parent are stationary), the Trail doesn’t draw any visible streak — there’s no path to draw.
Move the attachments — either by parenting them to a moving object (a sword, a vehicle), or by tweening their positions in a script. The Trail will then leave its visible wake along the path the attachments travel.
If you want a Trail-like effect on a non-moving emitter, that’s the wrong type — reach for a Beam or a Part emitter instead.
8. For Atmosphere: is EmissionMode = "Animate"?
Section titled “8. For Atmosphere: is EmissionMode = "Animate"?”The Atmosphere type defaults to Animate mode at Transform — the plugin sets it that way specifically because Roblox renders only one Atmosphere at a time, and Animate mode keeps that constraint satisfied. The plugin doesn’t force the dropdown to stay on Animate; the user can change it. If you’ve changed the dropdown to "Emit" after Transform, the plugin will produce multiple Atmosphere clones — and Roblox renders only one at a time, so the visual flickers between clones or just doesn’t show.
Switch the EmissionMode back to "Animate" for Atmosphere. See the Atmosphere chapter for the full reasoning.
9. Is the texture asset id valid?
Section titled “9. Is the texture asset id valid?”For Part, Beam, Trail, and ImageLabel emitters with a Texture (or Image) asset id, an invalid id renders the particle without a texture (a flat solid colour, depending on the type’s default). The emitter is still emitting — there’s just no image showing.
Common causes:
- Typo in the asset id (
rbxassetid://1234instead ofrbxassetid://123456789). - Asset moderated or deleted by Roblox.
- Asset uploaded to a different account that isn’t yours.
Open the asset id in a browser (https://www.roblox.com/library/<id>) to verify it loads. If it’s missing or moderated, replace it.
10. For ImageLabel: is Image set?
Section titled “10. For ImageLabel: is Image set?”ImageLabel defaults to Image = "" (empty). An empty Image renders the particle as a solid BackgroundColor3 rectangle — usually the default-transparent background, so you see nothing at all.
Set the Image property in the panel to a valid asset id. Particles will then show the configured texture.
11. For PointLight: is the source’s Enabled = false?
Section titled “11. For PointLight: is the source’s Enabled = false?”The plugin sets the source PointLight’s Enabled = false after Transform, so it doesn’t render while you’re authoring. Each emitted duplicate PointLight is a fresh instance with its own state, and the plugin handles enabling those.
If your source PointLight unexpectedly disappeared, that’s why — it’s not gone, just disabled. You can re-enable it manually for testing, but the plugin will toggle it off again on the next save/load.
12. Did you point Emit Into at the wrong place?
Section titled “12. Did you point Emit Into at the wrong place?”The Emit Into property (data attribute: EmitParent) controls where emitted particles parent in the hierarchy. By default (empty), they go to a sensible default per type:
- For workspace types (Part, Attachment, Model, PointLight): the source’s parent.
- For screen-space types (Blur, Bloom, ColorCorrection, Atmosphere):
Lighting. - For ImageLabel: a managed
ScreenGuiinCoreGui.
If you’ve set Emit Into to point somewhere unusual — a Folder that’s been destroyed, a parent that doesn’t accept the emitted type — the particles spawn into nothing useful.
For Atmosphere, ColorCorrection, Bloom, and Blur, the parent must be Lighting (or a child of Lighting) for the post-process to render. Setting Emit Into elsewhere effectively disables those types.
13. Is the property panel showing the right values?
Section titled “13. Is the property panel showing the right values?”A subtle one. The panel shows values for the current selection, snapshotted when you selected. If a script (or another tool) wrote to the same item’s attributes after you selected, the panel might show stale numbers while the engine reads the new ones.
Click off and re-select the item to refresh the panel. The next emit cycle uses whatever values are actually stored on the item.
14. Is your script actually running?
Section titled “14. Is your script actually running?”Worth ruling out. Your :Emit call may not be running at all because of an error somewhere upstream:
local Part_Icles = require(game.ReplicatedStorage:WaitForChild("Part_Icles"))Part_Icles:Activate()print("Activated.") -- check Output for this line
someEvent:Connect(function() print("Event triggered.") -- check Output here too Part_Icles:Emit(item)end)If the prints aren’t appearing in Output, your script has an error before reaching the emit call. If they appear and emit still doesn’t work, you’ve reached this checklist’s actual list.
15. Plugin still in beta — is the feature implemented?
Section titled “15. Plugin still in beta — is the feature implemented?”A few features are in the property panel but enumerated as “not yet implemented” in the source. If you’ve configured a feature that doesn’t visibly do anything, check the per-type chapter for any “implemented but stub” notes. (Older builds had FlipbookMode = "Random" on ImageLabel falling through to Loop; current builds pick a fresh random frame each 1 / FlipbookFramerate interval per particle, so this caveat no longer applies.)
Still stuck?
Section titled “Still stuck?”If you’ve gone through the checklist and your emitter still isn’t producing particles, the issue is likely a specific edge case worth raising in the plugin’s GitHub issues or Discord. Capture:
- The emitter type and its full property panel state.
- Studio’s Output console (any warnings or errors after Transform / Emit).
- Whether the emitter works with default values when you re-Transform a fresh instance.
Most issues are diagnosed by walking through the checklist above. The remaining cases tend to be specific bugs worth filing.