QR Code Decoder
Upload an image or use your webcam to decode any QR code instantly. Nothing is uploaded to any server.
Drop QR code image here
or click to browse (PNG, JPG, GIF, WebP, BMP)
Your images are processed entirely in your browser using the jsQR library. No image data is ever sent to any server.
About This Tool
This QR Code Decoder reads the data embedded in any QR code image without uploading it to a server. It uses the open-source jsQR library to decode the image entirely in your browser. Common uses include extracting the otpauth:// URI from a 2FA QR code screenshot, reading product or URL QR codes, and debugging malformed QR codes. Simply upload an image file or use your webcam and the decoded text appears instantly.
How to Use
- Click Upload Image and select a PNG, JPG, or GIF containing a QR code, or click Use Webcam to scan live.
- The tool automatically detects and decodes the QR code in the image.
- The decoded text appears below, copy it to your clipboard with one click.
- If the QR code contains an
otpauth://link, you can open it directly in an authenticator app.
Common Use Cases
- Recovering a secret from an old screenshot: extract the
otpauth://secret from a 2FA QR code screenshot you saved before switching phones, so you can re-enroll on a new device. - Checking a QR code before scanning it: decode a poster, sticker, or flyer QR code first to read the destination URL, rather than trusting your phone's camera app to open it blindly.
- Recovering a secret from a printed backup sheet: photograph a paper 2FA recovery sheet and decode the QR code directly instead of retyping a long Base32 string by hand.
- Debugging your own application's QR codes: confirm that the
otpauth://URI your server generates has the correct issuer, account, and secret parameters before shipping it to users. - Reading Wi-Fi or contact card QR codes: decode
WIFI:configuration codes or vCard contact codes shared by a colleague without needing to connect first.
Image Upload vs Live Camera Scan
Uploading an image works from screenshots, saved files, and images of any resolution, and it never requires camera permission, which makes it the more reliable option when the QR code already exists as a file. Live camera scanning is faster for a QR code sitting in front of you physically, but it requires HTTPS and an explicit browser camera permission grant. On mobile, the Capture with Camera button sidesteps the permission prompt entirely by opening your device's native camera app and then decoding the resulting photo, which is the most dependable path on iOS Safari where in-page camera access is frequently blocked by default.
Troubleshooting
QR code not detected in an uploaded image: low resolution, glare, heavy JPEG compression, or a rotated/skewed photo can all prevent detection. The three square finder patterns in the corners need to be clearly visible and not cropped out.
Camera permission blocked: on Android tap the lock icon in the address bar, open Permissions, and set Camera to Allow. On iOS open Settings, Apps, Safari, Camera, and set it to Allow, then reload the page. If you would rather avoid this entirely, use Capture with Camera instead of Start Camera.
Decoding produces garbled or incomplete text: this usually happens with images that were forwarded through a messaging app and heavily recompressed, since that can destroy the quiet zone (blank margin) around the QR code that the decoder relies on.
Live scan will not start at all: the Camera API requires a secure HTTPS connection. If you are testing on plain HTTP locally, the browser will refuse to expose getUserMedia, and only the Upload Image tab will work.
Frequently Asked Questions
Does this upload my QR code image to a server?
No. The image is decoded entirely in your browser using JavaScript. Nothing is uploaded or transmitted. You can even disconnect from the internet after the page loads and it will still work.
Why can't my QR code be detected?
Common causes: the image is too low resolution, the QR code is partially obscured, or the contrast is poor. Try using a higher-quality screenshot. The decoder works best on images where the QR code fills most of the frame.
What types of QR codes can this decode?
Any standard QR code, including URLs, plain text, vCards, Wi-Fi credentials, and otpauth:// URIs. It does not support proprietary formats like Aztec codes or DataMatrix.
Can this decode a QR code inside a PDF file?
Not directly. Take a screenshot of the PDF page showing the QR code, save it as an image, and upload that image here instead.
Does this tool work offline?
Yes, once the page and the jsQR library have finished loading, decoding runs entirely in your browser and continues to work even without an internet connection.