A while back I reverse engineered Twang32
And even further back, I made a mobile pong game.
So I made a mobile Twang.
Now I can let passersby play Twang.
Help page
Taking a few minutes every day to get my hydra-fu up to par.
I’m building a library of images and movies to include into hydra effects.
Testing my beamer today. I need a new one!
Not good enough to perform on a stage.
I will add some new effects to the gallery this week.
https://media.henriaanstoot.nl/hydra
Mixed with blender using OBS
Drawing like etch a sketch using Midi pots input and Hydra feedback
At the WHY2025 hackers event, we used bigred’s antenna pole to make a huge sign using leds.
It gave me the idea to make a pole which displays digital “fireworks” using leds.
Fireworks are becoming illegal the next year in the Netherlands, I think.
So why not going digital?
12 Meter pole, 300 Leds.
There is a QR code and a website link mentioned on a page at the gate.
10 presets to select via a website.
Notification on my TV
While waiting for the first visitor I made a magnetic game.
Using a bunch of magnets, and 3D printed hexagon rings.
Two players try to place magnets in a small area without moving the others. If magnets slam together, you have more pieces to place.
(Below, last player has to take those 6 pieces)
CODE for website index.html
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>WLED Mast</title>
<style>
body {
background: #111;
color: #fff;
font-family: Arial;
margin: 0;
padding: 20px;
text-align: center;
}
.grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 18px;
}
button {
padding: 25px;
font-size: 22px;
border-radius: 20px;
border: none;
background: #333;
color: #fff;
font-weight: bold;
}
button:active {
background: #555;
}
</style>
</head>
<body>
<h1>WLED Mast</h1>
<div class="grid">
<button onclick="run('b1')">off</button>
<button onclick="run('b2')">fireworks</button>
<button onclick="run('b3')">sound<BR>reactive</button>
<button onclick="run('b4')">bounch-balls</button>
<button onclick="run('b5')">fire</button>
<button onclick="run('b6')">juggle</button>
<button onclick="run('b7')">swing</button>
<button onclick="run('b8')">sparkle</button>
<button onclick="run('b9')">popcorn</button>
<button onclick="run('b10')">comet</button>
</div>
<script>
const API_KEY = "misuse-prevent";
function run(action) {
fetch(`/action.php?action=${action}&key=${API_KEY}`)
.then(r => r.json())
.then(j => console.log(j))
.catch(err => alert("Error"));
}
</script>
</body>
</html>
CODE for Wled API
<?php
$public_api_key = "misuse-prevent";
if (!isset($_GET['key']) || $_GET['key'] !== $public_api_key) {
http_response_code(401);
die("Unauthorized");
}
$action = $_GET['action'] ?? null;
// Map 10 buttons → WLED preset numbers
$allowed_actions = [
"b1" => 19,
"b2" => 22,
"b3" => 23,
"b4" => 20,
"b5" => 21,
"b6" => 3,
"b7" => 8,
"b8" => 2,
"b9" => 4,
"b10" => 14
];
if (!$action || !isset($allowed_actions[$action])) {
http_response_code(400);
die("Invalid action");
}
$preset = $allowed_actions[$action];
// ---- WLED IP address ----
$wled_ip = "http://WLEDDEVICEIP"; // <-- CHANGE THIS
// API endpoint
$url = $wled_ip . "/win&PL=" . $preset;
// Call WLED directly
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
header("Content-Type: application/json");
if ($error) {
echo json_encode(["ok" => false, "error" => $error]);
} else {
echo json_encode(["ok" => true, "preset" => $preset]);
}
Making a BirdNet node, I got interested in our local Corvids.
Working from my own Lab at home, I have time to feed the birds, and try to befriend them.
Corvids are a family of birds like: Crows, Eurasian jay, Eurasian magpie and Jackdaw birds
Meanwhile, signs of life from our Hedgehog.
One of my old ideas, never made or tested.
I saw a post on Reddit with this question, I decided to post a little drawing using my idea.
Center of below picture shows pages (the lines), with coppertape going front to back and connect to following page
Inductive copper tape

Taking resistors of the same value, you’ll get a logarithmic voltage divider.
If you want the values evenly spaced, to make sure you are not misreading the value you have to make the resistors more like:
10k,6k,3k3,2k5,2k,1k68,1k5
(Live real time using text (code) to make music and visuals)
Last week, I discovered Strudel.
I was playing around with it and thought: “This would be perfect for Tyrone”.
He is/was the main musical artist in our Group.
Strudel REPL is a web-based, live coding environment for creating music, based on the Tidal Cycles pattern language. It allows users to write and edit code in a browser to instantly hear the music it produces, with features like visual feedback and an interactive tutorial to help beginners and experts. The “REPL” stands for Read-Eval-Print Loop, a common term for interactive programming environments where you can type code, and the system immediately evaluates it and prints the result.
Check it out on : https://strudel.cc/
Below a strudel example
I can make some simple patterns, but I discovered that it can be used multiuser with realtime synthesizer named Hydra.
I’m better doing visuals, than creating realtime digital music.
Check out https://www.henriaanstoot.nl/?s=shaders – for my previous shader programming posts.
(I love playing real instruments, let’s keep it that way.)
Hydra video synth is a free, open-source, live-coding environment for creating real-time visuals that runs in a web browser. It uses JavaScript and WebGL to allow users to “patch” together different visual sources and transformations, similar to an analog modular synthesizer, to generate effects like video feedback, generative patterns, and audio-reactive visuals.
It is JavaScript being compiled to WebGL
So using https://flok.cc we can start a multiuser session with realtime live coding.
So the first test session, learning to use Hydra and Strudel together over the internet. Plan is to do a live session for others using a screen projector.
In the last few days, I made some examples using hydra.
These examples use Microphone for sound reactive, and Webcam for embedded effects.
NOTE: These are only in your browser session, nothing is being recorded/stored.
You can check some examples here :
https://media.henriaanstoot.nl/hydra/
UPDATE : Controlling Hydra input using my DIY Midi Controller (see other post) (Music is NOT related, no microphone input)
Strudel midi input with lpf volume and room controls.
let cc = await midin(1)
note("c a f e").lpf(cc(7).range(0, 1000)).room(cc(3).range(0, 10)).sound("sawtooth")
4th time we’ve been

Other concerts we’ve been to, movie music related.
These will be available in my shop.
Probably a webpage with measured examples is usefull.
Handheld device to measure voltages and make screenshots using an application.
Control over serial
I’m currently working on streaming output.
Below, an example of screenshotting.
Below, measuring outputs from a NE555 (dutch comments)
Working on my garden lights
Working 12V relay bottom left, and upper right the Raspberry $ compute module board with NodeRed.
I made a little board to program the ATTiny85.
The RS485 chip I wanted to use (SN65HVD3082) came as SMD, luckily I have some SMD to THT/DIL boards. (breakoff)
Above on the breadboard : The SN65HVD3082EP on a little pcb, the ATTiny85 .
4×4 WS2812 led matrix will be my dimmable RGB garden light.
Several years ago, I used some radar boards to detect movement.
After that I used a MMWave board
These are amazing, I’m using this in my Lab to switch on my big LED panel. You don’t need to move, it will detect human presence.
Another one I’m using in my living room.
It can power off all media at night (like TV, amplifier and lights)
It’s part of my home alarm system when we are away.
Now I got a new MMWave sensor (hlk-ld2450) , it can detect up to 3 persons and their location.
Screenshot from a Bluetooth phone app reading the sensor.