Twitch QR code — the on-stream playbook that scans
A Twitch QR code only earns its keep if viewers can scan it before the moment passes. Sizing, placement, and on-air timing for any twitch qr code.
A twitch qr code lives or dies on the clock. Print a QR on a poster and a viewer has all afternoon to fish out a phone. Drop the same QR on a stream overlay for five seconds during a raid and you've handed a chunk of your audience a target that's too small, too brief, or too far away to actually scan. The image isn't the problem. The frame around it is — pixel size in the source canvas, distance from the viewer's couch, on-screen duration, the codec compression squeezing what your render engine drew. Everything about a Twitch QR code is downstream of those four numbers.
This is the post we wish we had when we first started shipping stream-overlay QR codes for streamers and esports producers. The shape of "what scans" on Twitch is genuinely different from print — different from Instagram, different from YouTube end-screens, different from a poster on a coffee shop wall. The decoder maths is the same. The viewing conditions aren't. Read this once and you'll never put a 200-pixel QR in the corner of a 1080p stream again.
Twitch is a latency-sensitive scan surface
The fundamental constraint on every twitch qr code is dwell time — how long the QR sits in the same visible spot, at the same size, in the same readable contrast. A typical viewer is on a couch with a TV three to four metres from their face, or on a laptop with their phone in another room, or on mobile where the QR is sharing screen real estate with chat. None of those scanning postures are friendly to a code that flashes on for three seconds at the end of a clip.
There are roughly four on-stream QR scenarios, and each one has a different sizing target:
The persistent overlay corner. A small QR baked into the channel's scene template — bottom-right, top-left, somewhere out of the action. Sits there for the whole stream. Low effort to scan because the viewer can grab their phone any time. The tradeoff: it has to be small enough not to cover gameplay, which means the viewer needs to be on a screen close enough to read it.
The transition card. A "starting soon", "be right back", or "stream ending" full-screen card. Lots of real estate, plenty of dwell time (often a minute or more), and viewer attention is already idle. This is the easiest place on a Twitch broadcast to put a code that converts.
The mid-stream call-out. A subscribe button promo, a merch drop, a raid going out — five to fifteen seconds of attention on a banner that pops up, then fades. The window is short but the audience is hot. The QR has to be large, central, and accompanied by a verbal "scan this for the merch drop, link's in chat too" because half your audience isn't watching the centre of the frame.
The esports event placement. Big-screen IRL broadcasts at events like TwitchCon, ESL One, or in-venue tournaments. The QR is on a stadium screen behind the casters or in a static lower-third graphic. Viewing distance is large — sometimes ten metres in a venue, plus the camera-to-broadcast pipeline. Sizing has to compensate for both.
The pixel numbers aren't arbitrary. They come from the module-size maths every QR decoder runs against the image after the broadcast pipeline has compressed and re-encoded it.
The scan-window equation
Every QR has a minimum on-screen time that depends on the viewer's task: notice the code, lift the phone, wake it, open the camera, point, focus, scan. The fastest version of that loop in lab conditions is about three seconds. In real living-room conditions — phone face-down across the room, viewer halfway through a snack, attention split between chat and the broadcast — it's closer to eight to twelve seconds.
The implication: a QR that's on screen for less than the time it takes a viewer to physically pick up a phone is decoration, not a scan target. The five-second mid-stream pop-up is the most common version of this mistake. Eight seconds is the floor; twelve seconds is the working minimum if you want both casual viewers and active scanners to convert.
The other variable is encoding latency. A viewer on Twitch is watching a broadcast that's already 2-15 seconds behind real time — your "low latency" stream is still 2-5 seconds, normal latency is 8-15. If you flash a QR for the same five seconds you tested in a preview window, half your audience is reacting to a frame that no longer exists by the time their camera focuses. Pad the on-screen time by at least three seconds beyond what feels right in OBS preview.
The URL inside a Twitch QR — what actually goes in it
The single biggest mistake we see streamers make is encoding the long canonical Twitch URL into the QR. https://www.twitch.tv/yourchannel/about?ref=streamoverlay&utm_source=... becomes a dense, high-version QR with tiny modules. On a 200-pixel overlay it stops scanning. On a venue screen at twenty metres it's hopeless.
The fix is the same as every other channel: shorten the URL on a domain you control, encode the short link. A QR around lnks.work/twitch or your own links.yourchannel.com/sub is a version 2 or version 3 code with chunky, far-readable modules. The same canvas size now scans from across a room. And the redirect layer underneath gives you everything you'd otherwise be missing — per-channel scan counts, per-stream timing, the ability to repoint the destination without re-rendering the overlay. The primer on how to track QR code scans walks through what the redirect actually captures and why static QRs encoded with the raw destination are functionally invisible to your own analytics.
The other dimension is the destination URL itself. Twitch URLs have a few well-known shapes you'll point at:
- The channel page —
twitch.tv/yourchannel. Lands viewers on your stream or your offline banner. - The subscribe page —
twitch.tv/products/yourchannel/ticket?promo=.... Pre-fills the sub flow. - A specific clip or VOD —
twitch.tv/yourchannel/clip/...ortwitch.tv/videos/.... Useful for "scan to rewatch the play" promos. - A sub-emote rewards page —
twitch.tv/yourchannel/about, sometimes a third-party emote-overview site. - An off-Twitch destination — your Discord, your merch shop, your newsletter, your alt platform. Most cross-promotion QRs land here.
The shorter the URL, the lower the QR version, the larger each module gets at any fixed image size. That's the entire reason short links and stream-overlay QRs go together — see the broader case in static vs dynamic QR codes for why dynamic should be the default on any code you'd ever want to repoint.
Stream-overlay QR sizing — the readability planner
Pixel count, viewer distance, on-air time. Three inputs, one verdict.
On-screen QR readability planner
Sizing verdict
Minimum QR width: —
Duration: —
Placement: —
The planner won't replace a real test on the actual stream, but it gets you close enough to pick a sensible default before you push the scene to live. The two failure modes it catches: a QR that's mathematically too small for the viewer's distance, and a banner that's on screen for less time than the human reaction loop needs.
The five places a Twitch QR earns its keep
Order matters here — what works on a starting-soon card doesn't necessarily work mid-game.
The starting-soon screen. Highest-yield placement on most channels. You have a full minute of idle viewer attention; the audience is already half-watching while they grab a drink. A large QR (35-40% of frame width) with a one-line text explanation outperforms every other on-stream placement we've measured. Send the QR to your subscribe page, your Discord, or your newsletter — wherever you want the dwell-time viewer to go.
The persistent corner QR. Always on, low pressure, low attention. The viewer ignores it for the first hour and scans it the moment something on the stream makes them want to dig deeper. Keep it small (18-22% of frame width), keep the URL stable, never animate it in or out during gameplay because the encoder's motion compensation will compress the modules into mush.
The sub-emote rewards page. Sub goal hits 50? Show the QR that points at the new emote page so viewers can see what they're getting. This is one of the few times a mid-stream QR has built-in dwell time — viewers naturally pause to look at emote previews.
The raid out. Going out to another streamer? A QR to that streamer's channel makes the handoff smoother for viewers who'd prefer to follow before raiding. Eight to twelve seconds, large, central, paired with the standard "raid in 10" countdown.
The IRL/event placement. TwitchCon booths, in-venue tournaments, casting desk signage. This is where the planner's "venue screen" mode earns its place. Camera capture eats contrast; broadcast pipeline eats sharpness; large viewing distance eats module count. The QR has to be much larger than feels reasonable in the design tool — typically 40-50% of the broadcast frame for any code shot off a venue screen.
A printed QR has to survive lighting, distance, and a smudge. A broadcast QR has to survive all three plus codec compression, viewer-side scaling, and the eight seconds you forgot to pad the banner with.
The streamer kit — panels, sub pages, and the off-Twitch stack
Twitch's channel page has a few QR-friendly placements outside the live broadcast itself. The panels section under your stream — those custom info blocks viewers scroll through when you're offline — accepts images, which means a QR panel pointing at your Discord/merch/newsletter is a permanent passive scan target. Recommended size: 320 pixels square. Keep the URL short.
Sub-emote pages, the per-streamer Twitch about pages, and any community-overview link you bake into your panels follow the same playbook as off-Twitch promos. Use a short link on a domain you control. Track it. The cross-channel data is the entire point. The deeper case for owning the redirect layer is in the link infrastructure post, but the short version for streamers: bit.ly QRs are fine until bit.ly changes a tier or the analytics page you wanted is paywalled.
The off-Twitch stack that most streamers build up over time:
- A Discord QR. The fastest cross-channel conversion most streamers see, because viewers who care enough to scan have already decided they want more of you. The QR codes for Discord post covers the invite-link specifics and the join-rate trade-offs.
- A YouTube QR. Cross-promote VOD highlights to a separate audience. The QR codes for YouTube write-up has the channel-vs-video URL split.
- A merch QR. Your shop, your branded store, or a Streamlabs-backed page.
- A donation/tip QR. StreamElements, Streamlabs, or a custom page.
- A newsletter QR. The most-overlooked one. Email is the only channel a streamer fully owns; everything else is rented from a platform that can change its rules.
The newsletter angle ties back to the same "own your audience" instinct that drives the rest of this — a streamer's email list is theirs in a way that a Twitch follower count isn't. The url shortener for newsletters breakdown covers the per-link tracking side of that decision.
Building the QR — encoder settings that matter for broadcast
The QR-generator settings that make or break a broadcast code:
Error correction at level Q (25%) minimum. The broadcast pipeline compresses dark blocks unpredictably. Level L (7%) starts breaking the moment Twitch's transcoder hits it. Level Q is the floor for any code that will be re-encoded; level H (30%) for venue screens.
No transparency. Save the QR as PNG with a solid white background. Transparent backgrounds become whatever's behind them in OBS, which usually means partial transparency, which means the encoder gets confused, which means the dark modules lose contrast in compression. Always a solid white plate.
Quiet zone of at least four modules. The blank margin around the QR is what lets the decoder find the code. Stream overlays that crop tight to the QR edge fail at venue distance.
No animation, no fade-in, no zoom-in. Motion compensation in the H.264/H.265 encoder treats moving high-contrast regions as suspicious and re-encodes them with extra compression. A static QR that holds for ten seconds compresses cleanly; the same QR that fades in over half a second turns into a smudge for the first frame the viewer's brain registers.
Logo overlay capped at 20%. Centred-logo QRs look great on a brand-heavy overlay, but the broadcast pipeline doesn't care how clever your renderer is. Stay under 20% with error correction at Q or H, or skip the logo entirely. The print-side maths in minimum QR code size for print explains the underlying module-area trade-off; the same logic applies on a broadcast frame, just with codec compression as the wear-and-tear analogue.
Try a couple of versions in the free QR code generator before committing — render at level Q with no logo first, eyeball it at viewer distance on the actual broadcast canvas, then dress it up only if the bare version scans reliably. The scanability score heuristic catches most of the common mistakes before they reach OBS.
What to put in your Twitch QR's URL beyond the destination
Tagging. UTMs, slug conventions, the metadata that turns "scans" into "scans from the Saturday subathon overlay panel at 8pm" — that's where the QR earns its keep beyond click count. The docs on QR codes walk through the designer settings; for the streaming case the conventions worth adopting:
- One slug per scene, not one slug for the whole channel. The starting-soon QR and the persistent corner QR should be different short links pointing at the same destination, because you need to know which scene drove the scan.
- UTM source =
twitch, medium =stream-overlay, campaign = the stream name or theme. - A discrete slug for venue/event placements. A TwitchCon QR is not the same campaign as a Tuesday-night sub-pop-up; the data is more useful when the slugs are separate.
- If you stream daily, version the slug per week (
/sub-w23) so you can track scan velocity across recurring placements.
The crawler asterisk for streamers
Twitch's chat tools and the various clip-aggregator sites will spider any URL you paste into chat as part of preview generation. If you paste your QR's destination URL into chat alongside the on-screen QR, expect the first few "scans" to be preview crawlers from Discord, Twitter (when clip-aggregator accounts repost your stream), or various Twitch-adjacent preview services.
The fix is the same as for any short-link platform: filter on user agent. The real-time link analytics post covers the live-broadcast version of this in detail — what the crawler signature looks like, why preview clusters fire within seconds of a paste, and how to bucket them separately so your subathon scan totals reflect humans not Slackbot.
Want to render the QR with broadcast defaults baked in? Level Q error correction, solid white plate, quiet zone preserved, logo capped at 20%. Pull one in 30 seconds.
Open the QR code generator →Testing before you go live
The five-minute pre-flight before any stream that depends on a QR:
- Render the QR at the size you'll actually use on the overlay canvas, not in a preview pane.
- Load OBS with the actual scene and the actual encoder settings you'll broadcast with.
- Open Twitch Inspector or your own preview client to see the QR through the real broadcast pipeline.
- Scan it from a phone at the distance you expect viewers to scan from — across the room, not nose-to-screen.
- Check the redirect log within ten seconds. Click row should be there, country/region should match, user agent should be your phone's browser.
If steps four and five pass cleanly, the QR is broadcast-ready. If either fails, fix it before the stream — fixing it during is going to cost you the dwell-time window you spent the rest of the overlay design earning.
Sourcesshow citations
- Twitch Developers — IRC and Channel API reference
- Twitch Help — Stream overlays, panels, and channel customisation
- OBS Project — encoder settings and bitrate guidance for live streaming
- Wikipedia — QR code error correction levels and module sizing
- Streamlabs — 2024 State of the Stream report
- Apple — About Camera app QR scanning behaviour (iOS)
What size should a QR code be on a 1080p Twitch overlay?
For a persistent corner QR aimed at viewers on laptops, around 200 pixels square (roughly 18% of frame width) is the working minimum. For a mid-stream pop-up aimed at TV viewers across a room, push to 300-400 pixels. For a starting-soon transition card, anywhere from 400-600 pixels works because the dwell time is forgiving.
How long does a Twitch QR need to be on screen to scan?
Eight seconds is the floor for a banner-style placement; twelve seconds catches the slower half of the audience. Five seconds is a marker — it'll be scanned by the people already holding a phone and missed by everyone else. Account for Twitch's 2-15 second stream latency on top of that; what feels right in OBS preview is shorter than what the viewer actually sees.
Should the QR encode a short link or the full Twitch URL?
Always a short link on a domain you control. The shorter URL produces a lower-version QR with larger modules at the same pixel size, which means it scans from further away. The redirect layer also gives you scan analytics the raw Twitch URL doesn't.
Why does my QR look fine in OBS preview but fail in the live broadcast?
Codec compression. Twitch transcodes your stream multiple times to serve different bitrates, and high-contrast pattern data like a QR is exactly what motion-compensated encoders mishandle. Increase the error correction to level Q or H, use a solid white background, avoid any fade-in animation, and make the QR larger than you'd guess from the preview.
Does a QR on a venue screen at TwitchCon need different settings?
Yes. Venue screens add a second compression and capture step — the camera shooting the screen, then the broadcast pipeline. Use error correction H, render the QR at 40-50% of the broadcast frame, and add a chunky quiet zone. A QR that scans fine on a laptop at home will be unreadable on a venue screen ten metres away.
Can I track scans of the QR on my offline channel banner?
Same answer as any other QR — only if it points at a short link on a domain you control. The Twitch banner image itself is just an image; whether the encoded URL goes through a redirect layer is the only thing that determines tracking. The image format doesn't change the answer.
What if my logo overlay makes the QR fail under broadcast compression?
Drop the logo coverage to 15% or remove it entirely. Broadcast encoders eat into the error-correction budget you'd normally use for the logo, so the safe logo size on print is too aggressive for stream. If brand-heavy QRs matter, use error correction H, accept a slightly larger image, and test on the actual stream before committing.
Try it on your own domain
Branded short links and dynamic QR codes, on your subdomain or your own domain. One-time purchase, no per-click fees.