For streamers

Know why the stream dropped frames.

OBS goes red, chat says you’re buffering, and the speed test swears you have plenty of upload. Kilobat reads OBS’s own frame counters while you stream, lines them up with what your network did, and afterwards says which minutes dropped frames and why, including when it wasn’t the network at all.

Download for Mac ↓
brew install seifip/kilobat/kilobat
  • Free forever
  • Pro $29 once
  • 14-day refunds
  • macOS 14+
  • Open-source CLI

Sound familiar?

Why OBS drops frames. Kilobat names which one.

OBS counts three kinds of lost frames, and only one of them is the network. Kilobat reads all three once a second over OBS’s own WebSocket, and checks the line the way its call reports do.

  1. Dropped frames climb while a folder syncs

    Another app on your Mac filling the upload: Dropbox, Google Drive, iCloud, a backup.

    Names the app and the minutes it cost you. Call mode for streams can hold it until you end the stream. Pro

  2. Drops with nothing else running on the Mac

    Another device on your network uploading or streaming.

    When your router shares its traffic counters (UPnP), Kilobat sees the line busy with traffic your Mac didn’t send. A paired Mac running Kilobat is named, with its app. Pro

  3. Drops in bursts on Wi-Fi

    The Wi-Fi or the router stalling: weak signal, a busy channel, AirDrop scanning.

    Your router stalled too, which points to the local connection. Try Ethernet for streams, or move closer. Pro

  4. A steady trickle of drops, all stream long

    A bitrate set above what your upload carries.

    Says what your upload sustained and the bitrate that fits: “lower the bitrate to 4,400 kbps”. Pro

  5. Drops while your router and the internet answered fine

    Your provider, or the path to the ingest server.

    Says the drops were beyond your router, with a closer ingest server to try in OBS › Settings › Stream. Pro

  6. “Skipped frames due to encoding lag”

    The encoder couldn’t keep up. That’s the Mac, not the network.

    Says so plainly, with a faster preset, the hardware encoder (Apple VT H264), or a lower resolution or frame rate. Pro

  7. “Frames missed due to rendering lag”

    The GPU was busy, usually with the game itself.

    “Your GPU was the bottleneck, not your connection”: cap the game’s frame rate or drop heavy sources. Pro

Before, during and after the stream.

Kilobat works with OBS Studio 28 or later, through the WebSocket server built into it. It connects only to 127.0.0.1 and reads OBS’s counters; it never sees the video, the chat or your stream key.

  1. Before

    The go-live check.

    About eight seconds of upload to Cloudflare and 20 pings for jitter and loss, against OBS’s bitrate plus 30% headroom. It says ready, tight, or not enough with a bitrate that fits, and which apps are uploading right now. On a metered network it never measures without asking.

    Free
  2. While you stream

    Every second, side by side.

    OBS’s dropped, skipped and missed frames, its congestion and bytes sent, next to pings to the internet and your router, the busiest other app, the Wi-Fi and the Mac’s load. With Call mode for streams, sync apps are held until you stop.

  3. After

    The report.

    A card in Health › Streams with each window where frames dropped and why, and a notification only when the stream dropped enough to notice. Kilobat counts the drops for free; Pro names each cause and what to change.

    Free

Go live check

Can your upload carry tonight’s stream?

Upload speed changes through the day, and a speed test with four connections flatters it. Before you go live, Kilobat runs one connection for about eight seconds, the way OBS sends, and compares it with the bitrate set in OBS plus 30% to spare. That’s the usual rule: OBS suggests a bitrate around 75% of your upload, so 6,000 kbps at 1080p60 wants about 8 Mbps up.

Terminal
# Before going live
$ kilobat stream check
✓ Ready to go live
  Your upload is 12.4 Mbps and OBS needs 8 (6,160 kbps plus 30% headroom).
  ping 21 ms · jitter 3 ms · loss 0.0%
# On a busy evening
$ kilobat stream check
! Not enough upload
  Not enough upload: 5.8 Mbps, and OBS needs 8. Lower the bitrate to 4,400 kbps.
  Dropbox is uploading: pause it before you go live, or turn on Call mode for streams.
  ping 24 ms · jitter 11 ms · loss 0.0%

Free, from Health › Streams, the Shortcut Check before going live, or the terminal. On a metered network it uses your last speed test there instead, and says so.

Free
228Mbps down↑ 44 Mbps · 24 ms
Stutter test3 spikes
Median5 msp9996 msWorst182 ms
  • Voice calls
  • Video · 1080p
  • Streaming · 4K

Will this call hold up? A speed test for capacity, and a stutter test for the short spikes that speed tests average away.

Connect OBS

One setting in OBS, one in Kilobat.

  • In OBS, open Tools › WebSocket Server Settings and tick Enable WebSocket server. Note the port (4455) and the password if you keep one.
  • In Kilobat, turn on Settings › Streaming › Stream reports from OBS, and enter the password. It’s kept in your Mac’s Keychain.
  • Click Test connection. Kilobat says plainly if OBS isn’t running, its WebSocket server is off, or the password is wrong.

OBS only, for now: Streamlabs Desktop has its own remote control with a single dropped-frames figure that doesn’t split the network from the encoder, so it isn’t read. The streaming overlay works with any streaming app.

The report

Every dropped frame, on a timeline.

Health › Streams shows each stream beside your calls and remote sessions: OBS’s dropped frames second by second, each bad window in rose, encoder and rendering lag kept apart, and one sentence for what happened. “Dropped 2.1% of frames 21:14–21:16: Dropbox was uploading. Your upload is 12 Mbps and OBS needs 8.” Earlier streams sit underneath, one line each.

Terminal
# Is OBS connected, and is it live?
$ kilobat stream status
# Recent streams, each drop window and its cause
$ kilobat stream reports
# For scripts
$ kilobat stream reports --limit 5 --json

Coding agents read the reports through the MCP tools get_stream_reports and check_stream_readiness. Read the docs.

Free
Safari3.2 MB/s824 MB
Cloud backup2.1 MB/s240 MB
Night Drive186 KB/s312 MB
Kilobat12 KB/s14 MB

What is eating your bandwidth? Live traffic for every app, right in your menu bar. Catch the backup choking your call.

What’s free, and what Pro adds

Free, for good

  • A report after each OBS stream, with how many frames dropped
  • The go-live check, before every stream
  • The streaming overlay with live ping, jitter and loss
  • kilobat stream and the MCP tools for agents

Pro, $29 once

  • The cause of every drop window, and what to change
  • The bitrate your upload can actually carry
  • Call mode for streams, holding sync apps while you’re live
  • Call reports and Call mode for your meetings

Pro is $29 once for two Macs, with a 7-day free trial and 14-day refunds. Free for students.

Questions

What does “dropped frames (network)” mean in OBS?

OBS encoded the frame but couldn’t send it in time, so it threw it away to catch up. That’s the connection between your Mac and the ingest server, or a bitrate above what your upload carries. “Skipped frames due to encoding lag” and “frames missed due to rendering lag” are different counters, and neither is the network. Kilobat keeps all three apart.

How much upload speed do I need to stream?

Your bitrate plus about 30%. 6,000 kbps for 1080p60 wants about 8 Mbps of steady upload; 4,500 kbps for 720p60 wants about 6. OBS’s own advice is a bitrate around 75% of your upload. The go-live check measures what your upload carries now, over one connection, and compares.

Why does OBS drop frames on Wi-Fi when the speed test is fine?

A speed test averages ten seconds. A stream needs every second on time, and Wi-Fi stalls for a moment when the signal dips, a neighbour’s network is busy or AirDrop scans. Kilobat pings your router once a second during the stream, so it can tell the room from the internet. Ethernet fixes most of it.

Does it work with Streamlabs or other streaming apps?

The stream reports and the go-live bitrate need OBS Studio 28 or later, which has the WebSocket server built in. Streamlabs Desktop has its own remote control with one dropped-frames figure that doesn’t say whether the network or the encoder dropped them, so Kilobat doesn’t read it yet. The go-live check without a bitrate, and the streaming overlay, work with any app.

Can Kilobat see my stream or my stream key?

No. It connects to OBS on 127.0.0.1 and asks for its counters and the bitrate, nothing else. It never sees the video, the audio, the chat or the stream key, and everything stays on your Mac. The password is kept in your Keychain.

Will it slow down my stream?

No. During the stream it asks OBS for its numbers once a second and sends one small ping a second to the internet and your router, a few kilobytes a minute. The go-live check’s upload test runs only before you go live, when you ask for it.

Is it free?

The reports, the drop count, the go-live check and the overlay are free. Kilobat Pro, $29 once with a 7-day free trial, suggests likely causes for drops and a bitrate that fits, and holds sync apps while you stream.

Go live with a line you trust.

Download for Mac ↓
brew install seifip/kilobat/kilobat