A graphical pipeline editor for CosmoSIS. Built with Electron (frontend shell) and Python (backend logic via stdin/stdout IPC).
The GUI uses a clean Electron-native architecture — no HTTP server required:
Electron main process
├─ loads templates/index.html via loadFile() (file:// — no port)
├─ spawns worker.py as a child process
└─ bridges IPC calls: renderer ↔ ipcMain ↔ worker.py stdin/stdout
All Python I/O (scanning module libraries, parsing pipeline INI files) is
handled by worker.py — a simple JSON-RPC worker that reads requests from
stdin and writes responses to stdout. This replaces the previous
Flask/Socket.IO HTTP server approach, which had several drawbacks:
| Old (Flask) | New (IPC) | |
|---|---|---|
| Port conflicts | Yes (macOS blocked 5000) | None |
| Startup delay | 200 ms polling loop | Instant |
| Extra Python deps | Flask, flask-socketio, flask-cors, simple-websocket | None |
| Security surface | localhost HTTP socket | Subprocess pipe only |
| Tool | Version |
|---|---|
| Python | ≥ 3.9 |
| Node.js | ≥ 18 |
| CosmoSIS | ≥ 3.22 |
pip install -r requirements.txtnpm installnpm startElectron will spawn worker.py as a subprocess and open the window immediately.
-
Open Library — click the button in the left sidebar and choose the root of a CosmoSIS standard library directory. The Python worker recursively scans for
module.yamlfiles and populates the module library panel. -
Open Pipeline — click the button and choose a CosmoSIS
.inipipeline file. The worker parses it withInifile, resolves each module against the scanned library, and populates the pipeline canvas. -
Drag modules from the library panel onto the canvas to build a custom pipeline.