QR Code Reader
Scan a QR code with your camera, or decode one from an uploaded image — entirely in your browser.
Drag and drop an image here, or choose a file
The decoded text will appear here
Related tools
About this tool
This tool reads QR codes two ways: live, through your device's camera, or from an image file you already have. Both paths run the same decoder — jsQR, a JavaScript QR decoding library — entirely on your device, on video frames or an uploaded image, so nothing you scan or upload ever reaches a server.
When you start the camera, the tool asks the browser for the most compatible video stream it can get: it prefers the rear-facing camera on phones, requests a resolution only if your browser reports support for that, and falls back gracefully on desktops and browsers with a single camera. If your device has more than one camera, a switcher lets you cycle between them, and a flashlight toggle appears automatically when your camera and browser support it (mainly Android phones over an HTTPS connection).
Roughly five times a second while scanning, the tool grabs the current video frame, shrinks it for speed, and runs it through the decoder. As soon as a code is found, scanning pauses, a short beep confirms the read, and the result appears — press "Scan again" to keep going without re-requesting camera access.
No camera, or don't want to grant access? Drag an image onto the upload area, or pick a file — a screenshot, a photo, an exported QR code — and it decodes the same way.
Once you have a result, copy it, open it directly if it's a link, or use "Send to" to pass it straight into another tool in this toolbox, such as the QR generator to quickly rebuild a styled version of the same code.
For the most reliable reads, hold the code steady, let it fill a good part of the frame, and avoid strong glare on glossy screens or laminated labels. Each frame is also checked in inverted form, so light-on-dark codes decode just as well as the classic dark-on-light kind. Large photos are scaled down before decoding, which means a sharp, well-cropped screenshot usually works better than a huge but blurry picture. If the camera won't start, check that the browser has camera permission and that no other app is using it — the image upload stays available as a fallback either way, and the camera you picked is remembered for the rest of your browsing session.
Frequently asked questions
Does my camera feed or uploaded image get sent anywhere? expand_more
No. Both the camera stream and any uploaded image are decoded entirely on your device using JavaScript — nothing is uploaded to a server.
Why isn't the flashlight button showing up? expand_more
Flashlight (torch) control is a non-standard browser feature currently only available on some Android browsers, over HTTPS, and only while the camera is active. It's hidden automatically when your device or browser doesn't support it.
The camera won't start — what can I do? expand_more
Check that you allowed camera access when your browser prompted for it, and that no other app or browser tab is currently using the camera. You can also decode a QR code by uploading an image instead.
Can it read a QR code from a screenshot or photo? expand_more
Yes. Drag and drop the image file onto the upload area, or select it with the file picker, and it's decoded the same way as a live camera scan.
Does it work with more than one camera on my device? expand_more
Yes. If your browser reports more than one camera, a switch button appears so you can cycle between them, such as front and back cameras on a phone.