Skip to main content
OpenQRS
Tools
Current language: English
100% Private

YouTube QR code generator

100% Private & Local — Your data never leaves your browser. These QR codes are permanent and will never expire.

YouTube settings

Without the @. 3 to 30 characters: letters, numbers, full stops, hyphens and underscores.

Enter the channel handle.

Design

Module shape
Presets
Corner frame
Add a centre logo
Choose an image, or drop one herePNG, JPEG, WebP or GIF, up to 1000 KB

The image is read in this page and embedded in the code as a data: URL. It is not uploaded, and it stays inside the file you download.

More design options

The dark half of the code. Keep it well below the background in lightness.

Covers the quiet zone as well as the gaps between modules. A transparent background leaves it out of the file, so nothing is drawn with it.

Contrast 11.5:1 between the modules and the background.

Presets

PNG and WebP keep an alpha channel; the SVG simply omits the background rectangle. Whatever the code is placed on becomes the light half of the contrast.

Gradient

A gradient fills the dark modules only. Its lighter end sets the contrast a scanner actually gets, so both ends have to stay dark.

The second colour, used only while a gradient is selected. It is measured for contrast alongside the first.

45°

Degrees clockwise from a left-to-right sweep. A radial gradient spreads from the centre outwards, so the angle applies to a linear one only.

Module shape

Rounded shapes cover less of each cell. The centre stays covered, which is where a decoder samples, but a small print of a dense code reads more reliably as squares.

Corner frame

The ring of the three finder patterns.

Corner centre

The eye inside each finder pattern.

4 modules

The blank margin around the code, measured in modules. 4 is the specified minimum.

Higher recovery survives more damage and costs capacity, so the same content produces a denser symbol.

A logo sits at the centre and holds the level at H. Its width limit follows the symbol: 14% on the smallest code, 30% on a dense one.

Live preview & export

Export

Export

Raster, for screens

Complete the form to enable the downloads.

Export size and encoded text
Payload
Nothing encoded yet
Symbol
Not built yet
Recovery
M

Waiting for input

Export size

Between 64 and 4096 pixels. Exporting at 1024 px.

Encoded text

Encode a YouTube channel, a video, or a subscribe link that opens the subscribe prompt on your channel page. The subscribe option uses the channel id form, because that is the form the sub_confirmation parameter works with reliably.

When someone scans it

The camera shows a youtube.com or youtu.be address and opens it on tap. A subscribe link lands on the channel page with the subscribe dialog raised.

Three link shapes, three different results

YouTube addresses the same channel in more than one way, and the differences matter once the address is frozen into print. A handle link opens the channel front page. A video link opens one clip. A subscribe link opens the channel page with the subscribe dialog already raised. They are not interchangeable, and only one of the three survives a rename.

Length differs too, which is visible in the printed symbol. A youtu.be link is roughly 28 characters and fits a version 3 symbol at medium recovery — 29 modules across. The same video as youtube.com/watch?v= is roughly 43 characters and needs version 4, 33 modules across. At a fixed printed width that is a noticeably finer module grid for no benefit, so paste the short form when you have it.

sub_confirmation=1 asks; it does not subscribe

The subscribe option appends ?sub_confirmation=1 to the channel URL. YouTube responds by raising its subscribe confirmation dialog as the channel page loads. Nobody is subscribed by scanning: the viewer still has to press the button in that dialog, and can dismiss it and stay on the channel page. The parameter removes the step of hunting for the subscribe button, and that is the entire effect.

Two honest caveats. The parameter is reliable on the /channel/UC… form and is widely reported not to behave consistently on @handle URLs, which is why this page asks for the channel id rather than the handle for that option. And when a phone hands the link to the installed YouTube app instead of the browser, the dialog may not appear at all — the channel page still opens, so nothing is lost, but do not print a claim that everyone will see a prompt.

Handles change, channel ids do not

A YouTube handle is 3 to 30 characters and its owner can change it. A channel id is 24 characters beginning UC, assigned when the channel is created, and it never changes. Both address the same channel today; only one of them will still address it after a rebrand.

So the choice for print is a trade between a code you can read and a code that lasts. Handle links are shorter and the printed text beside them is legible, which suits an end screen or a flyer with a short life. Channel id links are longer and unreadable to a human, but a poster in a shop window outlives most rebrands. YouTube keeps serving /channel/UC… addresses either way.

  • youtube.com/@handle — short, human-readable, breaks on a handle change
  • youtube.com/channel/UC… — 24 permanent characters, longer symbol, survives a rename
  • youtu.be/videoId — the shortest video form, 11 characters of video id
  • youtube.com/watch?v=videoId&t=90 — the same video with a start time, at the cost of a few more characters

Questions and answers

Does the subscribe link subscribe people automatically?

No, and no link can. The sub_confirmation=1 parameter tells YouTube to raise its subscribe dialog when the channel page loads. The person scanning still presses subscribe themselves, or dismisses the dialog. A subscription cannot be created without the account holder acting.

Why does the subscribe option need my channel id instead of my handle?

Because the parameter works dependably on the /channel/UC… URL form and is widely reported not to on @handle URLs. Your channel id is the 24-character string starting with UC in YouTube Studio, under Settings, Channel, Advanced settings. Use the handle option for a plain channel link.

I scanned my subscribe code and no dialog appeared.

That usually means the phone opened the link in the YouTube app rather than the browser. The app takes the viewer to the channel page but may not show the confirmation dialog. The channel still opens, so the code works; the prompt is a browser-side nicety you cannot rely on.

Can I link to a specific moment in a video?

Yes. A watch URL with a start time in seconds is still an ordinary URL, so paste the whole thing including the time parameter. It adds a handful of characters to the payload, which may push the symbol up a version and make the modules slightly finer at the same printed size.

How a static QR code works

Every code on this site is static: the payload is written into the black and white modules themselves. Nothing is looked up when the code is read, no server of ours takes part, and no subscription holds the printed code up. The same property is the limit — once it is printed, what it contains cannot be changed.

Three things then decide whether a printed code reads: how many bytes the payload came to, which recovery level absorbs the damage, and how wide a single module ends up on paper. These guides work through each of them with the numbers.