← back

switching from obs to meld studio

a working streamer’s migration guide — scene rebuild, audio, encoder, srt to kick, gotchas

meld studio obs srt kick

why switch

tl;dr

meld studio trades obs’ sprawling plugin ecosystem for a tighter, faster pipeline. it’s built on modern graphics APIs, ships with the sources most streamers actually use, and treats audio as a first-class citizen instead of an afterthought. if you already spend more time fighting obs than streaming, meld is the swap.

obs is a swiss army knife maintained by volunteers. that’s a strength and a weakness — every feature is possible, but the defaults are decades old and the render pipeline still fights modern GPUs on windows. meld was built by former twitch engineers with the assumption that you’re already streaming, already have a webcam, already want a nice looking overlay, and don’t want to install nine plugins to get there. the tradeoff: some obs power features (advanced scripting, the deepest plugin oddities, certain browser-source hacks) don’t exist yet. for the 90% of streamers who never touched those, meld feels lighter and more polished.

pre-flight

tl;dr — back these up before you touch anything
  • obs profile folder (%appdata%\obs-studio on windows, ~/Library/Application Support/obs-studio on mac)
  • your scene collection JSON — export via scene collection → export even if meld can’t import it, so you can reference it while rebuilding
  • stream keys, RTMP/SRT URLs, and any custom ingest endpoints
  • screenshots of every scene in preview mode (you’ll thank yourself)

meld doesn’t import obs scenes. that sounds worse than it is — most streamers have three or four scenes and can rebuild them in an evening. the migration is a good excuse to prune sources you stopped using and to consolidate hotkeys.

gotcha keep obs installed and configured until your first live meld stream succeeds. if something breaks 90 seconds before you go live, you want the safety net.

install & first run

tl;dr
  1. download from meldstudio.co
  2. run the installer with default paths
  3. on first launch, skip the sign-in for now — you can pair a service account later
  4. let meld auto-detect your capture devices; it will populate a default scene
  5. set your canvas resolution before you rebuild scenes (settings → video → canvas). 1920×1080 for most, 2560×1440 only if you’re actually streaming at that resolution

the first-run wizard is fine, but skip its suggested overlays — they’re fine for testing and awful for a real channel identity. the moment meld opens, the first thing worth changing is settings → general → hardware acceleration. confirm your gpu is the one meld is using; on laptops with hybrid graphics, windows will sometimes hand meld the integrated gpu and you’ll wonder why encoding looks soft.

migrating scenes

tl;dr

rebuild, don’t import. use your obs screenshots as reference. hit the four scenes 95% of streams live on first: starting soon, main, brb, ending. add specialty scenes only after you’ve streamed once on the rebuilt set.

meld’s source model is close enough to obs that muscle memory transfers. right-click the scene canvas to add sources; drag from the library panel to place. the differences worth internalizing: sources in meld are grouped per-scene by default (no cross-scene references unless you explicitly link them), and the transform gizmo respects aspect-ratio locks more aggressively — hold shift to free-transform, not the other way around.

01webcam

add via + → camera. meld exposes the same v4l2 / directshow devices as obs, but it applies a mild denoise + auto white balance by default. if your camera already has these on-device (elgato facecam, most mirrorless via hdmi), disable meld’s versions to avoid double-processing.

02game / display capture

meld uses windows graphics capture (WGC) by default. it’s faster than obs’ game capture hook for most modern games but doesn’t work with a small set of anti-cheat wrappers. if a specific game shows a black screen, switch that source to display capture and crop to the game window.

03browser source (alerts, chat, widgets)

meld ships with a chromium runtime like obs. streamlabs, streamelements, and most third-party widgets work by pasting the browser-source URL. transparency works out of the box for URLs that use CSS rgba(0,0,0,0) backgrounds; a handful of older streamelements themes assume obs’ specific compositor and render with a black background — the fix is to add ?transparent=1 or edit the widget’s theme CSS.

obs ↔ meld terminology map

obsmeldnote
scene collectionprojectmeld projects can hold multiple layouts and are portable across machines via export
scenescenesame concept
sourcelayermeld calls them layers; ordering behaves the same
filtereffectmeld has fewer built-in effects but they’re gpu-accelerated by default
audio mixeraudio busmeld gives you named buses (game, mic, alerts) instead of anonymous rows
global audio devicebus inputset once per project, not per scene
studio modepreview + programalways on in meld; there’s no separate toggle
stinger transitionvideo transitiondrop in a webm or mov with alpha; timing point is auto-detected but adjustable
pluginextensionmuch smaller ecosystem today; expect only first-party effects and integrations
scripting (lua/python)no scripting today. hotkeys + websocket-style automation only

audio routing

tl;dr — buses, not per-source knobs
  • create three buses: mic, game, alerts
  • route your interface / mic to mic, all app audio to game, and browser-source widgets to alerts
  • set stream mix defaults: mic 0 dB, game -6 dB, alerts -3 dB — then tune during a test stream, not on live
  • enable per-bus loudness metering (LUFS) instead of squinting at peak dB

the biggest single upgrade from obs is meld’s audio model. obs treats every source as its own row with a fader and monitors are configured per-source. meld introduces buses: named channels you route sources into. this is how every real broadcast console has worked for forty years, and it means changes to your mic level don’t require touching seven sliders across nine scenes.

gotcha meld’s monitoring routing is per-bus, not per-source. if you were using obs’ “monitor and output” on a discord source to hear game chat, in meld you set that on the bus that contains discord — and every other source on that bus inherits it. put discord on its own bus if you need independent monitoring.

video & encoder settings

tl;dr — 1080p60 recipe
canvas
1920×1080
output
1920×1080
fps
60
encoder
nvenc h.264 (nvidia) / amf hevc or h.264 (amd) / apple silicon hevc (mac)
rate control
cbr
bitrate
6000 kbps (twitch), 8000–9000 kbps (youtube/kick)
keyframe interval
2 s
preset
quality / p5
psycho-visual tuning
on
look-ahead
on (if gpu allows)
b-frames
2

meld exposes almost the same encoder tuning as obs, but it hides the historically-confusing options behind sensible presets. the recipe above is the “quality first” setting for a 1080p60 stream — it’ll saturate a 25 mbps upload comfortably and leave headroom for chat + discord + backup ingest. drop the bitrate to 4500 kbps if your upstream tests below 8 mbps at peak.

01choosing the encoder

always prefer hardware. x264 on cpu is only worth it if you have a threadripper doing nothing else, and even then modern nvenc / amf output is visually indistinguishable at bitrates streamers actually use. on windows with an nvidia gpu, nvenc h.264 is the safe default; hevc looks better but not every ingest supports it. on apple silicon, the built-in hevc encoder is excellent and free.

02bitrate ladder

match bitrate to the game and platform. static talking-head content sits comfortably at 3500 kbps; fast-motion first-person games want 6000+ to avoid mush. platform caps: twitch soft-caps at 6000 kbps h.264 for most partners, kick and youtube accept 8000–9000 kbps h.264 or hevc. going higher without a stable upload just adds jitter and dropped frames.

gotcha cbr, not vbr. every real streaming platform expects constant bitrate; vbr saves bandwidth in your uplink but the ingest treats the variation as network jitter and can trigger fallback logic mid-stream.

srt to kick

tl;dr
  1. email kick support and request srt ingest access for your channel (they enable per-account, not per-stream)
  2. they respond with an srt endpoint (srt://ingest.kick.com:port) and instructions on the streamid format
  3. in meld: settings → stream → custom srt; paste the full url including ?streamid=…
  4. set latency to 2000 ms as a starting point; drop to 1000 only if you know your uplink is rock-solid
  5. test into a private channel before you go live publicly — srt behaves differently than rtmp when your connection hiccups

srt (secure reliable transport) is the protocol that replaced rtmp for professional broadcasts. it uses udp with its own reliability layer, which means it’s more resilient to packet loss than rtmp (which rides on tcp and blocks the whole stream when a segment is late). kick supports it but you have to ask — they gate it behind a support ticket because most viewers still don’t benefit from the difference, and setting the latency parameter wrong is a great way to look worse than you did on rtmp.

01what latency actually does

the srt latency parameter is your buffer for retransmits. set it to 2000 ms and the receiver waits up to two seconds for a dropped packet to be re-sent before giving up; set it to 500 ms and lost packets die faster but arrive-late packets are more likely to be too late. the practical tradeoff is glass-to-glass delay (from your camera to viewer’s screen): 2000 ms latency adds roughly two seconds vs rtmp. viewers on kick already sit 6–12 seconds behind; adding two more is rarely noticeable but makes chat interaction slightly slower. good default: 2000 ms.

02the streamid string

kick’s srt endpoint uses the streamid parameter to route your feed to your channel and authenticate. the format from their support email will look roughly like srt://ingest.kick.com:9999?streamid=publish:CHANNEL:STREAMKEY. paste the entire url into meld’s custom srt field — don’t try to split it into pieces. if you ever see a “stream key: not set” error, it’s because meld is trying to add its own streamid; use the “none / already in url” option in the stream key dropdown.

gotcha srt is udp. if you’re behind a corporate firewall or a hotel network that blocks non-standard udp ports, srt won’t connect at all and rtmp will. keep an rtmp fallback profile saved so you can switch in under thirty seconds.

03testing safely

do not test srt for the first time on a live public stream. kick lets you set channel visibility to unlisted / test mode; use it. start the srt stream, watch your channel on a second device on a different network, verify audio sync + latency + no dropouts for at least ten minutes. only then flip public.

meld-specific gotchas

post-switch checklist

run through this the day before your first public meld stream. it takes twenty minutes and catches nearly every mistake i’ve seen streamers make on the switch.