Overview

Bring Your Character to Life.

A wrist flick, raised arm or punch can trigger a sound and an animated effect on the watch. CosNFX is made for costumes, live-action roleplay and stage characters. The watch runs the effects itself; it was built and tested on a Galaxy Watch 7.

Each character is an identity with its own colour, sound kit, energy field, and cinematic backdrop: 30 built-ins (heroes, monsters, and mages: Superhero, Cyborg, Pyromancer, Vampire, Reaper, Werewolf, Robot, and more) plus your own. In a phone or laptop browser, Mission Control lets you assign gestures, chain them into combos, and route audio. Pro adds uploads of your own audio and artwork through that browser. The native phone companion app handles configuration, calibration and playback over the Wear Data Layer, using the paired watch connection without requiring local Wi-Fi. Media uploads remain a browser task.

On Google Play   Kotlin + Jetpack Compose (Wear Material 3) on the watch, with a native Android phone companion · com.jdcap.cosnfx · watch v2.15.1 and phone v1.2.0 live. Free to install, with an optional one-time Pro in-app purchase.

A minute of the app in use: identities arming, the effects they fire, gestures being recorded, and the screen where each gesture is wired to a rig over HTTP, OSC or Art-Net DMX.
Mission Control in a browser: the Superhero face at the top with seven numbered pads, and below it a Slot 1 panel for the Underhand gesture with an on switch, a sound file, and sensitivity and volume sliders. The Mission Control sound library: a drop area reading drop or tap to add, 384 files, a filter box, and a scrolling list of categories including Alien, Anime, Beast, Blackcat, Cat, Clown, Creature and Cryomancer with counts beside each. The phone companion showing the Superhero identity linked at 87 percent battery, a tap to arm control, the seven-pad ring, and a status line reading ready, perform a gesture and it shows here.
Mission Control in a browser, the sound library behind it, and the phone companion. Setup work that a round screen is bad at happens here, on whatever device is to hand.
At A Glance

Watch Core, Phone Mission Control

The watch does the sensing and the sound; the phone is the configuration surface and an optional second speaker. A single Android foreground service (HeroService) owns the audio engine, the sensors, and an embedded web server, so they survive the screen sleeping or the app backgrounding.

Watch

One Always-On Service

A single background service (HeroService) hosts the self-healing AudioTrack engine, reads the watch's motion sensors, and detects your gestures. The watch UI is one page, a Clean HUD: the identity name is the arm toggle, ringed by numbered 1–7 gesture pads over a cinematic per-identity backdrop. Each pad is drawn in the silhouette of its identity, so the button shapes themselves tell you who you are wearing.

Phone

Mission Control in Your Browser

The watch runs an embedded Ktor server on :8080; any phone browser on the same Wi-Fi opens it over REST + a WebSocket event stream, gated by a 6-digit pairing PIN shown on the watch. The browser is the whole client. The panel is built around the Stage: your seven buttons drawn as a live ring, each pad shaped by the identity it belongs to. Tap a pad to set its gesture, sound, and effect; pads flash as you perform; tap the centre to arm. Four zones (Stage, Show, Library, System) hold the rest, and a searchable sound browser with on-watch preview replaces the long dropdowns. The companion app mirrors the same four zones natively over Bluetooth, and can only reach an approved set of commands.

Visuals

Per-Identity Energy Fields

Each identity renders a transparent particle energy field over its cinematic backdrop: a native Kotlin port of the web visualization engine (dozens of built-in effects) running on a render-thread SurfaceView with additive bloom, frame-throttled so it pauses when the screen's off. (The old AGSL GPU shader and the earlier Compose-Canvas effects are retired.)

Four watch faces side by side. Mech-Pilot in yellow with cog-shaped pads, Netrunner in green with bracketed square pads, Cyborg in cyan with hexagons, and Pirate in gold with banner-shaped pads. Each carries the same seven numbered positions, the armed state, and the controller address and pairing code.
Four identities. The seven positions, the armed state and the pairing details hold still while the palette, the artwork and the shape of the pads all change, so the button silhouette itself tells you which character you are wearing.
The CosNFX phone companion: a connected Galaxy Watch7 header reading Superhero, seven sounds, then Playback with a volume slider and Sound and Live mode switches, an Effects group with Torch flash and VFX Stage, and an Integration group.
An earlier phone companion layout, showing playback, torch and visual-effect controls with room for labels the round watch screen cannot hold.
The Cue-out screen: a switch to send cues when a gesture fires, an HTTP webhook URL field, OSC host and port fields, a Save button and a Send test cue button, with a note explaining that the test fires the values on screen and not the saved configuration.
Cue-out, where a gesture is wired to a lighting rig. The test button fires the values currently on screen and not the saved ones, so you can confirm the rig reacts before committing the change.
Audio Engineering

Low-Latency by Design.

CosNFX streams raw 16-bit PCM audio into AudioTrack on a MAX_PRIORITY thread, requesting PERFORMANCE_MODE_LOW_LATENCY with a fallback for devices that reject it. This gives the app direct control over its audio buffer. The design aims to shorten the delay between a gesture and its sound; end-to-end latency has not been measured across supported watches.

The engine is self-healing: build, play, and render are wrapped in a retry loop that releases and rebuilds a failed track. Writes use 256-sample chunks, about 5.8 ms of audio at 44.1 kHz; that chunk duration is not a measurement of gesture-to-sound latency. In the released watch build, the track pauses and flushes after roughly 350 ms without an active sound while armed, or 250 ms while disarmed. The next sound resumes into the drained buffer, avoiding a queue of silence.

Sensor Fusion

Measured-Axis Gesture Detection

The detector needs to recognize a deliberate gesture without reacting to every ordinary arm movement. I used a live sensor display on the Galaxy Watch 7 to see which axis each gesture affected, then built the detection around those measurements.

Measured axes

One Axis Per Gesture

On the Galaxy Watch 7 used for development, gravity X tracks the arm's up/down pose and gates the overhead Raise. The two wrist rotations (Underhand / Overhand) read gyro X; a forward Strike, a superhero-landing down-punch, a Fist pump, and a Fist clench use acceleration and impulse patterns. Dominant-axis checks and a shared cooldown reduce the chance of one motion firing several gestures. The fist clench replaced a finger-snap detector after on-watch measurements showed the snap was difficult to distinguish from ordinary arm movement.

Anti-cross-talk

Reorientation Suppression

A fast vertical sweep of the arm (Δgravity X > 1.0, i.e. you're raising it) suppresses acceleration-based detection for 400 ms to reduce false triggers during the swing. All sensor lanes share a 350 ms global cooldown. To arm or disarm, tap the identity name on the watch screen; Mission Control and the phone companion also have an arm control.

Calibration

Teach the Watch Your Motion.

Fixed axes fit how the watch sits on this wrist and how this performer moves; a different pose can change the signal. Built-in calibration is free for Underhand, Overhand, Down-punch and Strike. Choose Calibrate in Mission Control or the phone companion, follow the countdown, and perform the motion. The watch fits that gesture's detector to the dominant channel in your recording.

You can redo each recording or reset to the default detection. Calibration is optional: an uncalibrated gesture keeps its built-in detector, and weak or under-sampled captures are rejected. Fist clench, Raise and Fist pump use their built-in detection. Recording an entirely new gesture is a separate Pro feature.

Props & Output

From the Wrist to the Room

A gesture can reach past sound: it can fire an external action and be routed across devices.

Props

External Lights & Devices

With Pro, an opt-in per-gesture action fires alongside the sound. An HTTP call can address a compatible local web API, such as WLED, Home Assistant or a DIY ESP32 controller. OSC and DMX (Art-Net) provide other routes to lighting and show-control rigs. Each action has a Test button. Plain HTTP is restricted to private network addresses; user-configured public endpoints must use HTTPS.

Audio routing

Multi-Device Audio & Battle Mode

A main/support mix routes independently to the watch, the phone companion app, and a Mission Control browser. Basic routing and one connected Mission Control browser are free; Pro adds multiple simultaneous browser clients. Pro also includes opt-in Battle mode, which links watches over Wi-Fi for versus play: a strike deals damage, a held Raise blocks, and health regenerates while disarmed.

Engineering Reality: Battery vs. Latency

A performance prop has to respond promptly while conserving watch power. Sensors run at a higher rate while armed and downshift when disarmed; the audio track pauses after a short idle period. The watch auto-disarms after about 15 minutes without a gesture, gives a two-pulse vibration, and shows an auto-disarm notice so the performer knows why it stopped responding. Disarming lets the screen sleep and releases the armed wake lock. CosNFX is published on Google Play and still actively developed.

On Google Play

Shipping, Free, Ready to Wear

It is on the Play Store as CosNFX Costume SFX for Wear OS, built and tested on a Galaxy Watch 7. Halloween and convention costumes are the obvious home for it, but it works for anything you wear that ought to make a noise.

Free

All 30 Identities Included

The download is free and so is the whole library: all 30 identities and every built-in sound and visual. Built-in gesture calibration and basic audio routing are included. There is one optional one-time Pro purchase, with no subscription.

No account

Install and Perform

It runs on your own devices, with no CosNFX account, no ads and no app telemetry. Google Play handles the optional Pro purchase.

Local control

Mission Control on Your Own Wi-Fi

Browser Mission Control connects directly to the watch on the same Wi-Fi network, unlocked by a six-digit PIN the watch displays. It needs no cloud account. Optional external cues go to the destinations you configure, which may include public HTTPS endpoints.

What the Pro unlock adds

Pro adds five capabilities: uploading your own audio and artwork through browser Mission Control; recording custom gestures; sending external prop and lighting cues; connecting multiple Mission Control browsers at once; and Battle mode. The built-in library, calibration and basic watch/phone/browser audio routing remain free.