LempoLempo Particle FX Docs

Roadmap & FAQ

Viewport migration roadmap

The viewport migration is tracked in phases. Phases 0, 1 and 2 are implemented; the 100-cycle Phase 2 Chromium/WebGL acceptance passed with live StatsHUD, active trails, and no browser, canvas, HUD, or continuing renderer-resource leaks. The production editor still uses its Dear PyGui viewport.

See the full Viewport Migration Plan and the migration notes.

PhaseStatusScope and current result
0 · Recon, spikes & baselinesComplete Viewport/runtime inventory and renderer-version findings documented; Spike A JSON-lines round trip and Spike B frozen-host launch succeeded; baseline measurements are recorded in bench/baseline-viewport.json; preview tests pass on Three.js 0.185.1. The Spike B host is a demonstration, not production viewport integration.
1 · Single browser-preview engineComplete lempo-runtime now owns the renderer-agnostic browser simulation and trail math. Preview adapters consume reusable typed-array frames. Seeded 120-frame 2D/3D baselines preserve the pre-refactor preview behavior, and the extension artifact stayed unchanged. GDevelop still has a separate simulation; game-runtime parity is not complete.
2 · Viewport interface & renderersImplemented Implemented the viewport contract/controller, persisted adaptive quality, visible StatsHUD, and JSON-lines/WebSocket/polling transports. ThreeViewport uses lazy InstancedMesh buckets with per-particle alpha, a verified pooled classic fallback, model/trail pools, OrbitControls, move-only TransformControls, ViewHelper and guides. PixiViewport uses shape-batched ParticleContainers, pan/zoom, emitter drag, quality caps and pooled dynamic trail meshes. Chromium/WebGL passed 100 controller mode changes (50 per viewport), including HUD lifecycle, active trails, disposal/resource checks, and one warning per unsupported blend fallback. Production editor integration is Phase 3.
3 · Python bridgePlanned Connect the editor to a child viewport host over JSON-lines, coalesce incremental edits, handle gizmo events and window lifecycle, and retain the legacy preview path.
4 · Editor UX parityPlanned Match the legacy viewport's guides, gizmo, 2D zoom, trails, state colors, shape morph, transport controls and keyboard behavior; document any gaps.
5 · Parity & performance gatesPlanned Add golden-image and particle-record comparisons plus benchmark gates, then verify the new viewport against the Phase 0 baseline in CI.
6 · Deprecate legacy pathsGated: Phase 5 + owner approval Only after parity is proven and the owner approves: make the web viewport default, remove superseded drawlist/OpenGL viewport paths where safe, update packaging/docs, and rebuild.
7 · Move editor panels to webOptional / out of scope Move inspector and other panels to a web UI only if the owner requests this separate follow-on.
Current architecture. Phase 1 made the browser preview renderers share one TypeScript engine; it did not make the GDevelop extension use that engine. Equal seeds therefore do not guarantee identical particle records across those runtimes. The Dear PyGui viewport remains the production editor viewport until the later bridge and parity phases are implemented.

FAQ

Do I need Python to use the editor?

No — download LempoParticleEditor.exe from Releases or itch.io and run it. Python is only needed to run from source.

Which GDevelop version do I need?

≥ 5.6.284. Older versions render 3D particles at the wrong scale (the world-scale fix and sRGB colors landed there).

Will my old effect files still load?

Yes. The export format is append-only: migrate_effect() upgrades v1.0 and v1.1 files to v1.2, missing blend mode/seed and camelCase easings, and new fields always ship with their defaults (all OFF).

Why does my effect look different in the browser?

Some differences are expected because the Dear PyGui viewport, browser preview and GDevelop extension use different rendering or simulation paths. The browser preview's renderers do share one simulation engine; Python/C++ parity is separately tested. Report reproducible differences that contradict a documented contract.

Is the browser preview embedded in the main editor viewport?

No. The production viewport uses Dear PyGui drawlist/OpenGL rendering. Spike B's --viewport-host demonstrates a migration option but is not an integrated production viewport.

Can I use effects in a non-GDevelop game?

The export JSON + documented record layout are renderer-agnostic; the supported runtimes today are the browser preview (Three.js/PixiJS) and the GDevelop extension.

Links

📥 Releases 🎮 itch.io 💻 Source 🎬 YouTube

Credits

Mostafa Fathy (EG dev) — independent developer (@Boy1developer).

LibraryLicenseUsed for
Dear PyGuiMITDesktop editor UI
Three.jsMIT3D rendering (browser preview + GDevelop extension; version 0.185.1)
PixiJSMIT2D rendering (browser preview 8.21.x; GDevelop 7.4.2)

Released under the MIT License.