| # | Source | Status | Type | Content | Bytes | Format | Charset | EC | ZX | Bits | Raw | Angle° | Scale | Inv | WxH | Copy |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.idx }} | {{ row.sourceLabel }} | {{ row.valid ? 'OK' : (row.error || 'Error') }} | {{ row.derivedType || '—' }} | {{ row.text || '—' }} | {{ row.bytes || '—' }} | {{ row.format || '—' }} | {{ row.charset || '—' }} | {{ row.ec || '—' }} | {{ row.zx || '—' }} | {{ row.bits !== '' ? row.bits : '—' }} | {{ row.raw !== '' ? row.raw : '—' }} | {{ row.angle !== '' ? row.angle : '—' }} | {{ row.scale !== '' ? row.scale : '—' }} | {{ row.inv || '—' }} | {{ row.wh || '—' }} |
| Field | Value | Copy |
|---|---|---|
| {{ row.label }} | {{ row.value }} |
| Trace Field | Value | Copy |
|---|---|---|
| {{ row.label }} | {{ row.value }} |
QR codes are built to move quickly from a printed or on-screen square into an action such as opening a site, joining a Wi-Fi network, importing a contact card, or provisioning an authenticator app. That speed is useful, but it also hides the payload until you trust your camera app enough to follow it. This decoder slows that moment down just enough to let you inspect what is really inside the symbol before you copy it, open it, or hand it to someone else.
The page is for situations where the code already exists as an image. You can paste or drop one screenshot or image file, enter one direct image URL, paste one data:image/... string, or provide one long raw base64 image string. The tool then tries to recover the embedded text and shows the result in four views: a decoded table, a payload breakdown, a decode trace, and a JSON export.
That makes it useful for routine checks that should happen before a scan turns into a click. A conference badge might hide a vCard, a router sticker might contain Wi-Fi setup text, and a support page might show a QR image for an OTP seed or a download link. Seeing the payload as ordinary text first gives you a chance to spot the wrong host, the wrong network name, or a setup string you did not expect.
The page is intentionally narrow in scope. It works on one item at a time, ignores extra pasted lines or extra dropped files, and focuses on recovering readable content rather than proving that the content is safe. A result labeled OK means the image was readable under the current search settings. It does not mean the destination is legitimate, the payload is benign, or the image was captured from a trustworthy source.
Privacy depends on how you feed the tool. Local files and pasted screenshots stay inside the browser while the page rasterizes and inspects them. A remote image URL is different: your browser has to request that image from its host before decoding can begin, so the network exposure comes from the source you entered rather than from a site-side upload service.
QR Code is standardized under ISO/IEC 18004, and DENSO WAVE's public material describes the familiar square symbol as a grid of modules whose version grows from 21 by 21 to 177 by 177 modules in steps of four modules per side. More stored data means more modules, and more modules usually mean a denser image to recover from a screenshot or photograph. The same family also includes Micro QR, which uses a smaller symbol for tighter spaces.
This page does not generate a code or validate a business workflow around the code. It starts with one image, turns that image into pixel data, and searches for a readable payload. The first successful read ends the search and becomes the row you see in the results. If the richer decode path returns extra metadata, you also get supporting fields such as character set, reported error-correction level, bit count, raw-byte length, and which frame settings produced the hit.
The advanced controls widen that search in predictable ways. Downscale cap limits the longest image edge before testing begins. Angles chooses which rotations to try. Try harder adds two smaller scale passes after the base raster size. Also try inverted adds a second polarity pass for light-on-dark or otherwise reversed symbols. The trace tab shows the exact combination that finally worked.
The first raster size depends on the original image dimensions and the optional downscale cap. With no cap, the browser keeps the original size. With a cap, the longest edge is reduced to the cap and the shorter edge is scaled to match.
After that, the tool builds an attempt budget from three variables: the number of angles you selected, the number of scale levels in play, and whether the inverted pass is enabled.
Default settings produce a small search space: angle 0 only, one scale level, and normal polarity only. Turning on Try harder expands the scale list to 1, 0.85, and 0.7. Turning on Also try inverted doubles the polarity modes. The trace tab reports this exact attempt budget so you can see whether the successful read came from the first pass or from a wider search.
| Input route | Accepted form | What the page does | Common limit |
|---|---|---|---|
| Local image | One dropped or pasted image/* item |
Reads the file locally, loads it into an image element, then samples pixels in the browser | Only the first image is processed |
| Direct image URL | One http or https link ending in .png, .jpg, .jpeg, .gif, .webp, .bmp, or .svg |
Lets the browser fetch the image, then tries to decode the loaded pixels | A page URL or API URL without a real image extension is rejected as Unsupported line |
| Data URI | One full data:image/... string |
Loads the embedded image data directly | Very large pasted strings can be awkward to handle even before decoding starts |
| Raw base64 | One long base64 string with image bytes | Wraps the string as a PNG data URI before loading it | Non-PNG raw data may fail to render as an image |
| Observed prefix | Displayed type | What that means |
|---|---|---|
http://, https://, ftp://, or www. |
URL | The payload looks like a link and should be checked for host and path before opening. |
mailto:, tel:, smsto:, geo: |
Email, Phone, SMS, or Geo | The payload appears to be an action URI rather than plain text. |
otpauth: or wifi: |
OTP or WiFi | The payload likely carries setup data for an authenticator app or a network profile. |
MECARD: or BEGIN:VCARD |
MeCard or vCard | The payload looks like a contact record. |
| Any other URI-style scheme | URI | The text begins like a structured URI, but the page does not validate the full scheme semantics. |
| No recognized prefix | Text | The page treats the recovered value as ordinary text. |
That label map is intentionally simple. It helps you triage the payload quickly, but it is not a full parser for every QR application profile. A Wi-Fi or OTP label tells you what kind of text was found, not that every field inside that text is valid or safe to use.
Start with the cleanest source you can get. A direct screenshot or dropped image file is usually the most predictable option because the browser already has the pixels locally. If you paste text instead, make sure it is the actual image source rather than a landing page that happens to display a QR code somewhere inside it.
Leave the defaults alone for the first attempt unless the image obviously needs more help. Upright, normal-polarity decoding is faster and easier to reason about. If that fails, widen the search in a deliberate order: add the missing rotation angles, then enable the harder scale passes, then turn on inversion for white-on-black or otherwise reversed symbols.
Also try inverted when the code looks reversed or sits on a dark background.Downscale cap when a very large photo is slowing the search without adding useful detail.When the result is a link, the first thing to read is not the status badge but the destination itself. Check the host, then the path, then the query string if one exists. A QR code can decode perfectly and still lead to the wrong site, a phishing page, or a stale route that no longer belongs to the organization printed next to the symbol.
When the result is setup data such as Wi-Fi, a vCard, or an OTP URI, compare the decoded text with the context that produced it. The network name on a sticker, the account label on a badge, or the issuer name in an authenticator seed should look familiar before you copy or reuse the payload elsewhere.
data:image string, or one long raw base64 image string.Decode. If the image loads and the symbol is readable, the summary switches to a decoded count and the result tabs become available.Decoded Payloads first. Read Status, then inspect Type and Content. Use the row copy action only after the payload looks sensible.Payload Breakdown next. For links, this separates host, path, and query. For Wi-Fi and OTP payloads, it tells you that the content contains provisioning fields so you know you are looking at setup data rather than ordinary text.Advanced. Add the needed angles, enable Try harder for extra scale levels, or use Also try inverted for reversed symbols. If network loading is the problem, a timeout or image error can appear before the QR search itself has a fair chance.The safest workflow is decode first, inspect second, and act only after the payload matches the source you expected to read.
OK means the page recovered a payload from the current image under the current settings. It does not certify the intent behind the code. A failed row means the page could not produce a readable payload from that image path, which may be caused by the wrong input format, a blocked or broken image load, low image quality, or a symbol that is not a readable QR code at all.
The extra fields matter because they tell you how the decode happened, not just that it happened. That is useful when you are comparing two captures of the same printed code or deciding whether a blurry photo is worth trusting.
| Field | Read it as | Practical use |
|---|---|---|
Status |
Readable payload or error text | Tells you whether the page actually found a QR payload. |
Content |
The recovered text | This is the value you should verify before opening, saving, or sharing anything. |
Bytes |
UTF-8 size of the recovered text | Helpful when you suspect truncation or want to compare payload sizes. |
Charset, EC, Bits, Raw, ZX |
Supporting metadata from the richer decode path when available | Useful for inspection, but blanks do not automatically mean the payload text is wrong. |
Angle°, Scale, Inv, WxH |
The winning frame settings | Shows whether the symbol decoded in the obvious pass or only after a rotated, resized, or inverted retry. |
A good habit is to read the decoded host or provisioning label before you copy anything out of the page. That small pause is often more valuable than any single metadata field because it catches social-engineering problems that a technically successful decode cannot detect.
Drop a phone photo of the poster into the page and run the default pass. If the result returns Type = URL, use the payload view to inspect the host and path before visiting the site anywhere else. This is a quick way to catch a shortened link, a typo-squatted host, or a code that points somewhere unrelated to the event brand printed beside it.
Paste a screenshot of a router label and decode it. A successful read may show Type = WiFi and a payload beginning with WIFI:. That is enough to verify the advertised network name and security string before you hand the sticker to a guest or copy the credentials into documentation.
Start with a failed read from a sideways image or a white-on-black print. Then add 90 and 270 under Angles and enable Also try inverted. If the next run succeeds, the trace can show a non-default angle and an inverted winning pass, which tells you the symbol was readable but the original capture was not in the easiest orientation for the decoder.
No. The page is single-item by design. It keeps only the first usable image or first non-empty text line and reports extra inputs as ignored.
Unsupported line?Because the text box expects an actual image source, not a general web page. A direct image URL with a supported file extension works. A page that merely contains a QR image does not.
The page has a simpler fallback path for payload recovery. That path can still read the text while returning less supporting metadata than the richer path.
Local files and pasted screenshots are decoded in the browser. Remote image URLs are fetched by your browser from their original host so the page can inspect them, but the site does not use a server-side upload step for decoding.
OK mean the QR code is safe to use?No. It only means the symbol was readable. You still need to inspect the decoded destination, account label, network name, or other setup details before taking action.
Its primary search path asks for QR decoding and can also attempt Micro QR when that format is exposed by the browser decoder. In practice, support depends on the image and the decoder path that succeeds.
| Term | Meaning here |
|---|---|
| Module | One dark or light square in the QR symbol grid. |
| Payload | The text or URI content recovered from the symbol. |
| Data URI | An inline resource string such as data:image/png;base64,.... |
| Error-correction level | A redundancy setting embedded in a QR symbol and reported as EC when the richer decode path exposes it. |
| Inverted pass | An extra decode attempt that treats the symbol as light-on-dark instead of dark-on-light. |