Suey is a system for enhancing live presentations by enabling real-time interaction between an Emcee, the presentation software (Microsoft PowerPoint), and physical elements like smart lighting. It utilizes a web-based control interface and can control smart home devices, such as LED lights, to create a dynamic and engaging experience.
This project was developed between July and August 2023 for a personal awards show event, demonstrating the integration of desktop automation, web services, WebSocket communication, and hardware control. Suey was open-sourced and further documented in May 2025.
Suey consists of three main interconnected components:
-
PowerPoint Extension (C# VSTO Add-in):
- Operates within Microsoft PowerPoint on the presentation machine.
- Parses "Suey Script" commands embedded in PowerPoint slide object names.
- Communicates with the Suey Server via WebSockets to send slide events and receive control commands.
- Triggers local actions (playing sounds) and external commands (lighting changes) based on the parsed Suey Script.
-
Suey Server (Node.js & Express.js):
- Functions as the central communication hub using
express-ws
for WebSocket connections. - Manages connections from the Emcee web interface, the PowerPoint Extension, and Log viewers.
- Relays commands from the Emcee to the PowerPoint Extension.
- Receives state updates from PowerPoint and forwards them.
- Interfaces with smart LED lights via the
colors.js
module (usingtuyapi
) to execute lighting commands based on Suey Script events. - Serves static HTML/JS/CSS for the Emcee and Log viewer web interfaces.
- Functions as the central communication hub using
-
Emcee Web Interface (HTML, CSS, JavaScript):
- A tablet-friendly web application for remote control of the PowerPoint presentation.
- Displays current slide information and presentation status.
- Sends control commands (Start, Stop, Next, Previous) to the Suey Server.
- Supports swipe gestures for navigation.
A key feature of Suey is its custom scripting language embedded into the names of PowerPoint shapes. This allows control over presentation events from within the PowerPoint interface.
- Syntax: Commands are placed within a shape named
Suey[...]
. Multiple commands are separated by semicolons (;
). Each command is akey=value
pair. Multiple key-value pairs for a single trigger are structured astrigger:key=value,key2=value2
.- Example:
Suey[Base:PlaySound=Success,SetColor=#FF0000;1:SetScene=Intro]
- Example:
- Triggers:
Base
: Commands execute when the slide loads (timeline index 0).[index]
: Commands execute when the PowerPoint animation timeline reaches the specified numericalindex
.
- Supported Commands:
PlaySound
,SetScene
,SetColor
,SetBrightness
,SetLeftColor
,SetRightColor
. These are parsed by the Extension and often relayed to the Server for action. More commands are listed in theExtension/ThisAddIn.cs
file.
- Remote PowerPoint presentation control via a web interface.
- Synchronized smart lighting effects based on Suey Script events.
- Custom in-slide scripting using "Suey Script" within PowerPoint shape names.
- Real-time WebSocket communication between system components.
- Live event logging viewable through a dedicated web interface.
- PowerPoint Extension: C#, Visual Studio Tools for Office (VSTO)
- Server: Node.js, Express.js, express-ws
- Emcee Web Interface: HTML, CSS, JavaScript
- Lighting Control:
tuyapi
(Node.js library for Tuya smart devices) - Data Exchange: JSON (for WebSocket messages)
- Node.js and npm
- Microsoft PowerPoint (with VSTO runtime installed)
- Visual Studio (with Office/SharePoint development workload for the Extension)
- Tuya-compatible smart lights.
- Local keys and IDs for Tuya devices (obtainable with tools like tuya-local-key-extractor). Configure these in
Server/keys.json
.
- Navigate to the
Server
directory. - Run
npm install
. - Create
Server/keys.json
and include Tuya device credentials. - Run
node suey.js
.
- Open the
Extension
project in Visual Studio. - Build the project to install the PowerPoint Add-in.
- Name PowerPoint slide objects intended for Suey Script commands appropriately (example:
ShapeNameStartingWithSuey[Base:PlaySound=IntroSound]
).
- Emcee Control Panel:
http://localhost:1337/mc?key=awards
- Log Viewer:
http://localhost:1337/logs
(Note: The key=awards
query parameter is a basic access security measure. You can change it to any string you prefer in the Server/suey.js
file.)
- Enhanced audience interaction features (polling, Q&A).
- Support for a wider range of controllable hardware.
- A visual editor or helper tool for generating Suey Script commands.