Skip to content

Mini Launcher

Michael Sprick edited this page Sep 26, 2025 · 25 revisions

πŸŽ›οΈ Mini Launcher for AV Systems

A compact, always-on-top Windows panel for quick access to streaming and recording controlsβ€”ideal for live events, church services, or theater productions. This launcher lets you trigger OBS actions without showing the full OBS interface, keeping your workflow clean and distraction-free.


πŸͺŸ What It Does

  • βœ… Always-on-top control panel
  • πŸŽ₯ One-click buttons for OBS streaming and recording
  • 🧭 Positioned neatly in the corner of your screen
  • πŸ–±οΈ Built with AutoHotkey v2 for lightweight automation

πŸ–₯️ Setup Instructions (Windows)

1. Install AutoHotkey

  • Go to the AutoHotkey website
  • Click Download
  • Install both versions (v1 and v2) if you're unsureβ€”this launcher uses v2

2. Create Your Script

  • Open Notepad or VS Code
  • Paste the launcher code (see below)
  • Save the file with a .ahk extension (e.g., AVLauncher.ahk)
  • Double-click the file to run it

Websocket Setup

const OBSWebSocket = require('obs-websocket-js');
const obs = new OBSWebSocket();

obs.connect('ws://localhost:4455', 'your_password').then(() => {
  console.log('Connected to OBS');
});

🧩 Launcher Code Breakdown

πŸͺŸ GUI Setup

myGui := Gui("+AlwaysOnTop +ToolWindow -Caption +Owner")
myGui.BlackColor := "Black"
myGui.SetFont("s10", "Segoe UI")
WinSetTransparent(100, myGui.Hwnd)
  • Always-on-top: stays visible over all windows
  • ToolWindow: removes taskbar icon
  • No caption: hides title bar for a sleek look
  • Transparent: adds subtle overlay effect

πŸ“ Positioning (Top-Right Corner)

monitorWidth := SysGet(78)
guiWidth := 50
guiHeight := 240
guiX := monitorWidth - guiWidth - 10
guiY := 10

🎬 Streaming & Recording Buttons

; Streaming
myGui.Add("Button", "x10 y20 w30 h30", "β–Ά").OnEvent("Click", StartStreaming)
myGui.Add("Button", "x10 y60 w30 h30", "X").OnEvent("Click", StopStreaming)

; Recording
myGui.Add("Button", "x10 y110 w30 h30", "β–·").OnEvent("Click", StartRecording)
myGui.Add("Button", "x10 y150 w30 h30", "||").OnEvent("Click", PauseRecording)
myGui.Add("Button", "x10 y190 w30 h30", "X").OnEvent("Click", StopRecording)

myGui.Show("x" guiX " y" guiY " w" guiWidth " h" guiHeight")

βš™οΈ Function Stubs

StartStreaming(*) {
    ; Add your streaming logic here
}

StopStreaming(*) {
    ; Add your stop streaming logic here
}

StartRecording(*) {
    ; Add your recording logic here
}

PauseRecording(*) {
    ; Add your pause logic here
}

StopRecording(*) {
    ; Add your stop recording logic here
}

πŸ’‘ You can connect these functions to OBS via command-line, WebSocket, or other automation tools.


πŸ§ͺ Tips & Customization

  • Change button icons or labels to match your workflow
  • Adjust guiWidth, guiHeight, and positions for different screen setups
  • Add more buttons for scene switching, muting, or overlays
  • Integrate with OBS WebSocket for full remote control

πŸ“š Resources


Full Code

myGui := Gui("+AlwaysOnTop +ToolWindow -Caption +Owner")
myGui.BlackColor := "Black"
myGui.SetFont("s10", "Segoe UI")
WinSetTransparent(100, myGui.Hwnd)

monitorWidth := SysGet(78)
guiWidth := 50
guiHeight := 240
guiX := monitorWidth - guiWidth - 10
guiY := 10

; Streaming buttons
myGui.Add("Button", "x10 y20 w30 h30", "β–Ά").OnEvent("Click", StartStreaming)
myGui.Add("Button", "x10 y60 w30 h30", "X").OnEvent("Click", StopStreaming)

; Recording buttons
myGui.Add("Button", "x10 y110 w30 h30", "β–·").OnEvent("Click", StartRecording)
myGui.Add("Button", "x10 y150 w30 h30", "||").OnEvent("Click", PauseRecording)
myGui.Add("Button", "x10 y190 w30 h30", "X").OnEvent("Click", StopRecording)

myGui.Show("x" . guiX . " y" . guiY . " w" . guiWidth . " h" . guiHeight)

StartStreaming(*) {
    ; Start streaming logic
}

StopStreaming(*) {
    ; Stop streaming logic
}

StartRecording(*) {
    ; Start recording logic
}

PauseRecording(*) {
    ; Pause recording logic
}

StopRecording(*) {
    ; Stop recording logic
}