switching from obs to meld studio
a working streamer’s migration guide — scene rebuild, audio, encoder, srt to kick, gotchas
why switch
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
- obs profile folder (
%appdata%\obs-studioon windows,~/Library/Application Support/obs-studioon 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.
install & first run
- download from meldstudio.co
- run the installer with default paths
- on first launch, skip the sign-in for now — you can pair a service account later
- let meld auto-detect your capture devices; it will populate a default scene
- 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
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
| obs | meld | note |
|---|---|---|
| scene collection | project | meld projects can hold multiple layouts and are portable across machines via export |
| scene | scene | same concept |
| source | layer | meld calls them layers; ordering behaves the same |
| filter | effect | meld has fewer built-in effects but they’re gpu-accelerated by default |
| audio mixer | audio bus | meld gives you named buses (game, mic, alerts) instead of anonymous rows |
| global audio device | bus input | set once per project, not per scene |
| studio mode | preview + program | always on in meld; there’s no separate toggle |
| stinger transition | video transition | drop in a webm or mov with alpha; timing point is auto-detected but adjustable |
| plugin | extension | much smaller ecosystem today; expect only first-party effects and integrations |
| scripting (lua/python) | — | no scripting today. hotkeys + websocket-style automation only |
audio routing
- create three buses:
mic,game,alerts - route your interface / mic to
mic, all app audio togame, and browser-source widgets toalerts - 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.
video & encoder settings
- 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.
srt to kick
- email kick support and request srt ingest access for your channel (they enable per-account, not per-stream)
- they respond with an srt endpoint (
srt://ingest.kick.com:port) and instructions on the streamid format - in meld: settings → stream → custom srt; paste the full url including
?streamid=… - set latency to 2000 ms as a starting point; drop to 1000 only if you know your uplink is rock-solid
- 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.
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
- no scripting language today — obs lua/python scripts don’t port. most workflows can be rebuilt with hotkeys + the automation panel; complex ones need to wait or run externally
- plugin ecosystem is small — expect first-party only for now
- replay buffer exists but writes larger files than obs’ equivalent at the same quality; leave more disk headroom
- vertical scene layouts (9:16) work but multi-canvas output is a paid feature; obs multi-rtmp plugin has no direct equivalent
- hotkey capture works only when meld is focused unless you enable global hotkeys explicitly (settings → hotkeys → global)
- if you use vdo.ninja, ndi, or obs-websocket-driven bots, expect to rewrite the integration — meld’s websocket api is different
- the built-in noise suppressor is more aggressive than obs’ rnnoise at default settings — back it off if your voice sounds gated
- meld saves project files to a different folder than obs; back up documents/meld studio/projects before major upgrades
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.
- all four core scenes rebuilt and hotkey-mapped
- audio buses named, levels tuned during a test stream, LUFS metering on
- encoder set to hardware, cbr, keyframe interval 2 s
- bitrate matched to your upload — measured, not guessed
- ingest url saved (rtmp fallback profile too, if using srt)
- replay buffer path on a fast drive with 20+ GB free
- global hotkeys enabled if you use a stream deck
- discord push-to-talk key doesn’t collide with a meld hotkey
- test stream to unlisted channel — check for dropped frames, audio sync, chat delay
- obs still installed as a fallback until the first live meld stream lands cleanly