Streamlabs & Twitch chat integration for La Curieuse Soirée

Javascript Express Streamlabs APIs tmi.js

La Curieuse Soirée is a charity stream hosted on Twitch featuring the Curieux Orchestra alongside French streamers and content creators LittleBigWhale, ZeratoR, and PV Nova.

The event took place in February 2025 and offered 6 hours of musical entertainment including blind tests, quizzes and karaoke... and raised 50,000€ for Canopée, a French non-profit organization, dedicated to forest advocacy and protection both in France and worldwide.

Curieuse soiree Banner
Stream screenshot
Stream donations display
Stream top players display

Making the event interractive

To engage viewers as much as possible, Curieux wanted to display live donation information and create "donation events"—limited-time challenges where the audience could collectively donate a target amount to influence the show (e.g., if the goal is reached, the orchestra plays blindfolded for the next song).
Viewers were also invited to participate in games such as quizzes and blind tests by answering directly in the Twitch chat.

My role in this ambitious project was to handle the integration with Streamlabs Charity to recover donation data in real-time, and to listen to viewers' chat messages during the interactive games.

Architecture

My part of the project was focused on the backend part and has been hosted on a machine that acted as an internal API server. That server listens to a Unity app that collects information from the API and creates dynamic integrations on the live video feed.

For donations:

  • The backend continuously listens to donation events through the Streamlabs Charity websocket and stores the information in a database.
  • The latest donations information, total amount raised, and current "donation event" amount are available through the private API

For the quizzes and other games:

  • New quiz questions or blind tests can be started through the API
  • While a quiz is running, the backend connects to the twitch chat and records correct answers in real time
  • The quiz can be stopped at any time, and the fastest players to answer can be retrieved

We used Javascript mainly because of the tmi.js library that simplifies Twitch chat integration.

High availibility was not an major concern as the server only handled requests from the Unity app, which represents a maximum load of around 2 request per seconds maximum.

Acknowledgement

I want to thank Robin Deriaud and Victor Ronfaut for their trust. Victor worked alongside me on the backend, while Robin brought it all to life with his amazing control app that overlays the live video feed.

A special thanks to the Streamlabs team for giving us access to their beta environment and taking the time to make custom adjustments to their API—it made a big difference.