---
title: 'Scareflow: a node-based show controller for Halloween'
canonical: https://0110.be/posts/Scareflow%3A_a_node-based_show_controller_for_Halloween
markdown_url: https://0110.be/posts/Scareflow%3A_a_node-based_show_controller_for_Halloween.md
id: 588
published_at: '2026-10-29T00:00:00Z'
updated_at: '2026-11-10T20:16:04Z'
author: Joren
tags:
- name: Code
  markdown_url: https://0110.be/tags/Code.md
- name: Projecten
  markdown_url: https://0110.be/tags/Projecten.md
- name: UGent
  markdown_url: https://0110.be/tags/UGent.md
---

# Scareflow: a node-based show controller for Halloween

Every Halloween I build an interactive installation for trick-or-treaters, like last year's [speaking pumpkin](https://0110.be/posts/Pompernikkel_-_the_Interactive_speaking_pumpkin_%F0%9F%8E%83). The lesson from last year: keep thing simple. So this year I tried and failed again. But, I learned a few thing and built some reusable software. 

Now that LLMs are more capable, it also changed what you can do in a couple of evenings. Before, I did web-based environments since it allowed quickly prototyping by hand, now native applications are feasible which brings a couple of advantages: lower latency, network integration, driving multiple audio devices,... Additionally, there are now AI-systems which are very good at 3D modeling and rigging 3D models: before I was limited to assets I could find.

### Scareflow

[Scareflow](https://github.com/JorenSix/scareflow) is a node-based **show controller**. You wire events (key presses, OSC messages) through delay, random and cooldown blocks to sounds, [WLED](https://kno.wled.ge) lights, [Tasmota](https://tasmota.github.io) smart plugs or OSC output. Sounds start within milliseconds, so thunder, lightning and visuals can be synchronized.

<center>
<img style="max-width:90%" src="https://0110.be/files/attachments/588/scareflow.png">
<br>
<small>Fig: The Scareflow node editor with the example show.</small>
</center>
<br>

The glue is [Open Sound Control](https://ccrma.stanford.edu/groups/osc/index.html) (OSC): small UDP messages with an address like `/pierke/scare`. It works as low-latency inter-process communication on one machine or across the network. Any environment that speaks OSC can be integrated. If you want to build your own event-based show, Scareflow is a good place to start: the editor needs no code, shows are plain TOML-files. Prompt your LLM for extensions and integrations with other event types.

Check out [Scareflow on GitHub](https://github.com/JorenSix/scareflow) to build your own show and extend it with your own events.

### A Flipper Zero as remote


This Halloween I rediscovered my [Flipper Zero](https://flipperzero.one) as a programming platform: it has Bluetooth and a Sub-GHz software defined radio built in. [Pimpkin Remote](https://github.com/JorenSix/pimpkin-remote) is a small Flipper app with two roles. 

It acts as a Bluetooth keyboard whose key presses trigger events in Scareflow, and serves as a remote for a smoke machine. The smoke machine responds to 315MHz messages sent from the Flipper Zero directly. Again thanks to LLMs programming the Flipper Zero became much more accessible.


### Hallowierke

Hallowierke is a skeleton marionette in the costume of [Pierke](https://nl.wikipedia.org/wiki/Pierke_Pierlala), the Ghent puppet, projected on a window. It dances, looks around and waves until an OSC message from Scareflow arrives. Then, it is electrocuted by a bolt of lightning. Mwoehahaha.

The player is written in Rust with [Bevy](https://bevyengine.org). The rigged puppet, 17 bones and nine animations, is generated by a Python script for [Blender](https://www.blender.org). Astra by ChatGPT is great at this: it produced a rigged, dressed and animated model, something I would never have attempted by hand. As with [Dewey](https://0110.be/posts/Dewey%3A_a_connectome-driven_fruit_fly_living_in_your_macOS_menu_bar), I now have a moving puppet but learned little about rigging. For a Halloween porch, that is a trade I am willing to make.

<div style="display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-end;gap:2em;margin:1em 0">
<div style="text-align:center"><img style="max-height:320px;max-width:100%;image-rendering:pixelated" src="https://0110.be/files/attachments/588/pimpkin-remote.png"><br><small>Fig: Pimpkin Remote.</small></div>
<div style="text-align:center"><img style="max-height:320px;max-width:100%" src="https://0110.be/files/attachments/588/hallowierke.webp" alt="Hallowierke dancing, then struck by lightning"><br><small>Fig: Hallowierke dances until the lightning strikes.</small></div>
</div>

For next year, I will keep it simple.

