Open viewer

Free online DICOM viewer · Free API

View and share DICOM images in any browser

Open CT, MRI, X-ray and ultrasound images straight from your computer, phone or scan CD, or from your hospital system with the free API. MPR, 3D, multi layout and measurements included. A sharing and secondary viewing tool: free for everyone, and your images are never uploaded.

  • Local files · computer, phone, CD
  • 100% free · no sign-up
  • No upload · runs in your browser
  • Free API · no key
  • Phone ready

For sharing and secondary viewing only. Not for primary diagnosis or reporting.

₹0Viewer and API, always free
0 uploadsImages stay in your browser
2 waysYour own files, or the free API
1–9Viewports side by side

No API needed

Open DICOM files from your computer or phone

You do not need a server or the API to use SmartViewer. Pick a folder, a few files or a scan CD right here. The files open in your browser and are never uploaded.

Drag and drop a DICOM folder or files here

or choose them:

1

Computer

Choose the study folder, or drag it here. Sub folders are searched too.

2

Scan CD / DVD / pen drive

Insert the CD, press Choose folder and pick the CD drive. DICOMDIR and viewer programs on the CD are skipped.

3

Phone or tablet

Press Choose files and select the images (phones cannot pick a whole folder). Files shared on WhatsApp or e-mail can be opened the same way.

You can also open the full viewer at smartjoans.space/dicom and use its Open folder button.

Features

Everything you need to look at a study and share it

Open a folder, a few files or a link. SmartViewer reads the DICOM headers, groups the series, sorts the slices and shows patient details on top.

📁

Open from your device

Pick a DICOM folder, files or a scan CD from your computer or phone, or drag and drop. Or open a link. Nothing is uploaded.

⇕

Smooth scrolling

Mouse wheel, finger drag or arrow keys. At the end of a series, keep scrolling to go straight to the next series.

◐

Window / level

Drag to change brightness and contrast, or use presets: brain, lung, bone, abdomen, liver, subdural and more.

⟷

Measure

Length, angle, elliptical ROI and pixel probe, plus zoom, pan, magnifier, rotate, flip and invert.

⊞

Multi layout

Compare series in 1×1 up to 3×3. Drag a series onto any viewport. Double-click a viewport to enlarge it.

⧉

MPR + MIP

Axial, coronal and sagittal views with a shared crosshair, orientation letters and MIP slabs from 5 to 40 mm.

◭

3D volume view

Rotate and zoom a 3D view of CT or MR with bone, skin, soft tissue, vessel, lung and MIP presets, and a cut tool.

▶

Cine and tags

Play a series from 5 to 30 frames per second and read every DICOM tag with a search box.

◌

Hide patient details

One click hides name, ID and birth date before you share your screen. Save any view as a PNG picture.

📱

Made for phones

Touch scrolling, pinch zoom, a phone friendly layout and the Back button. Works on Android and iPhone.

🗜

Many formats

Uncompressed, JPEG baseline and lossless, JPEG-LS, JPEG 2000 and RLE. Single-frame and multi-frame images.

⌁

Free API

Open studies from your own system with a link, a JSON study list or one script. No key, no sign-up, no permission.

Who it is for

A sharing and secondary viewing tool

SmartViewer is made to show images to people who need to see them, quickly and from anywhere.

1

Referring doctors

Look at the images next to the official report, on a laptop or a phone, without installing software.

2

Patients and families

Open the CD or the folder from the scan centre and see your own scan in the browser.

3

Diagnostic centres and clinics

Add a "View images" button to your website, RIS or patient portal with the free API.

4

Teaching and case discussion

Show a case on a projector with patient details hidden, compare series side by side, and use MPR or 3D.

Not for primary diagnosis. SmartViewer is not a certified medical device. Use it for sharing and secondary viewing. Primary reading and reporting must be done on a certified PACS workstation with a calibrated display.

How it works

Your images stay with you

You open a studyfrom your own computer, phone or scan CD, or from a link sent by your hospital system.
Your browser reads itstraight from your device or from your own server. Nothing goes to smartjoans.space.
SmartViewer shows itgrouped by series, sorted, with patient details, tools, MPR and 3D.
Privacy by design. Images are kept only in the browser memory while the tab is open and are gone when you close it. smartjoans.space does not receive, store or log images.

Keyboard

Shortcuts

W Window / level
D Drag to scroll
Z Zoom
P Pan
M Magnifier
L Length
A Angle
E Elliptical ROI
B Pixel probe
↑ ↓ Previous / next image
← → Previous / next series
PgUp PgDn 10 images
Space Play / pause
1–6 Layouts
X MPR on / off
R Reset view
I Invert
O Rotate 90°
H V Flip
T Text overlay
G DICOM tags
S Save PNG
F Full screen
Esc Leave MPR / 3D

Quick start

Pick the way that fits your system. The viewer address is always https://smartjoans.space/dicom/.

WayHow it looksUse it when
1. Image links …/dicom/?url=IMAGE1&url=IMAGE2 A few images (X-ray, a short series). No programming needed.
2. Study list (manifest) …/dicom/?manifest=LIST_URL Any study size from a public https server. Good for links in e-mail, SMS or WhatsApp.
3. From your page (smartviewer.js) SmartViewer.open({ files }) A button in your web app. Works with http, LAN and local servers, no CORS or https setup. Best for clinics and PACS.
Two rules for Way 1 and Way 2. The image server must use https, and it must allow SmartViewer to read the files by sending this header (called CORS): Access-Control-Allow-Origin: https://smartjoans.space. The server setup section shows how for IIS, Apache, Nginx and PHP. Way 3 has no such rules.

Way 1: image links

Add one url for every image file. Each address must be URL-encoded (encodeURIComponent in JavaScript, rawurlencode in PHP).

Link
https://smartjoans.space/dicom/?title=Chest%20X-ray&url=https%3A%2F%2Fpacs.example.com%2Fimages%2Fchest-pa.dcm&url=https%3A%2F%2Fpacs.example.com%2Fimages%2Fchest-lat.dcm

Keep this way for about 20 images or fewer (the viewer accepts up to 500), because very long links can break in some phones and messaging apps. For more images use the study list.

Way 2: study list (manifest)

Your server gives one small JSON file that lists the images. The link only carries the address of that list.

1. The link

Link
https://smartjoans.space/dicom/?manifest=https%3A%2F%2Fpacs.example.com%2Fmanifest.php%3Fstudy%3D1234

2. The list your server returns

JSON · Content-Type: application/json
{
  "title": "CT Brain - 12 Oct 2026",
  "files": [
    { "name": "IM0001.dcm", "url": "https://pacs.example.com/file.php?study=1234&f=IM0001.dcm", "size": 525312 },
    { "name": "IM0002.dcm", "url": "file.php?study=1234&f=IM0002.dcm", "size": 525312 }
  ]
}
FieldNeededMeaning
filesYesList of images. Order does not matter; SmartViewer sorts by series and instance number.
files[].urlYesAddress of one DICOM file. Full, or relative to the list address (like the second line above).
files[].nameNoFile name shown in the DICOM tags panel.
files[].sizeNoSize in bytes. Makes the progress bar exact.
titleNoText shown while downloading, e.g. the exam name.
status + messageNoSend {"status":"error","message":"Link expired"} and SmartViewer shows your message.

Way 3: from your page (smartviewer.js)

Add one script to your web page and call SmartViewer.open() from a button. Your page reads the images from your own server and hands them to SmartViewer inside the browser. Because your page does the reading, your images can be on http, on a LAN address like http://192.168.1.10, or on the user's computer.

1. Add the script once

HTML
<script src="https://smartjoans.space/dicom/smartviewer.js"></script>

2. Open images from your server

HTML + JavaScript
<button id="view">View images</button>

<script>
document.getElementById('view').addEventListener('click', () => {
  SmartViewer.open({
    title: 'CT Brain - Ravi Kumar',
    files: [
      '/studies/1234/IM0001.dcm',          // addresses your page can read
      '/studies/1234/IM0002.dcm',
      '/studies/1234/IM0003.dcm'
    ]
  });
});
</script>

3. Or open files the user picks on the computer / phone

HTML
<input type="file" multiple
       onchange="SmartViewer.open({ title: 'My study', files: [...this.files] })">

Get the file list from your server

JavaScript
button.addEventListener('click', async () => {
  // your own script returns ["IM1.dcm","IM2.dcm",...]
  const list = await fetch('/api/study-files.php?uid=' + encodeURIComponent(uid)).then(r => r.json());

  SmartViewer.open({
    title: patientName,
    files: list.map(name => '/api/study-file.php?uid=' + encodeURIComponent(uid) + '&f=' + encodeURIComponent(name))
  });
});

Options

OptionDefaultMeaning
files(needed)List of image addresses, File objects, Blobs, ArrayBuffers, or { name, url } / { name, data }.
titlenoneShown in the top bar and while loading.
mode'overlay''overlay' opens full screen on your page (best on phones). 'tab' opens a new tab.
credentials'same-origin'Cookies for the image addresses. Use 'include' if your images need your login cookie on another address.
onProgress(done, total)noneCalled after each image is read.
onDone(seriesCount)noneCalled when the viewer shows the images.
onError(error)consoleCalled if an image cannot be read or the viewer does not open.
onClose()noneCalled when the viewer is closed.

SmartViewer.open() returns an object with close(). The phone Back button also closes the viewer. ArrayBuffers you pass are handed over and become empty on your page.

Call it from a click. Browsers block new tabs that are not opened by the user, so call SmartViewer.open() inside a click handler, especially with mode: 'tab'.

All link options

OptionExampleWhat it does
manifest?manifest=https%3A%2F%2F…Address of your study list.
url?url=…&url=…Address of one image. Repeat for more (up to 500).
title&title=CT%20BrainText shown while downloading (up to 120 characters). Overrides the list title.

Use either manifest or url. If both are given, manifest is used.

Server setup (Way 1 and Way 2)

SmartViewer runs in the browser on https://smartjoans.space. To read files from your server, your server must say it allows that. Add the header on the folder or script that serves the list and the images.

IIS (web.config in the images folder)

web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="https://smartjoans.space" />
      </customHeaders>
    </httpProtocol>
    <staticContent>
      <remove fileExtension=".dcm" />
      <mimeMap fileExtension=".dcm" mimeType="application/dicom" />
    </staticContent>
  </system.webServer>
</configuration>

IIS does not serve files without an extension (many PACS name files like 1.2.840…). For those, serve the files through a script as in the PHP example below.

Apache (.htaccess)

.htaccess
<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "https://smartjoans.space"
</IfModule>
AddType application/dicom .dcm

Nginx

nginx.conf
location /studies/ {
    add_header Access-Control-Allow-Origin "https://smartjoans.space" always;
    types { application/dicom dcm; }
}

PHP (inside your script)

PHP
header('Access-Control-Allow-Origin: https://smartjoans.space');
For Way 1 and 2, http does not work. SmartViewer is on https, and browsers block an https page from reading http files. If your images are on http or inside your clinic network (for example http://192.168.1.10), use Way 3 instead: it needs no setup.

Code examples

A button in your web page

HTML
<a href="https://smartjoans.space/dicom/?manifest=https%3A%2F%2Fpacs.example.com%2Fmanifest.php%3Fstudy%3D1234"
   target="_blank" rel="noopener">View images</a>

JavaScript

JavaScript
// Build the link from your list address and open it
const listUrl = 'https://pacs.example.com/manifest.php?study=' + encodeURIComponent(studyId);
const viewer  = 'https://smartjoans.space/dicom/?manifest=' + encodeURIComponent(listUrl);

window.open(viewer, '_blank');          // new tab
// or: window.location.href = viewer;  // same tab

PHP redirect (open.php?study=1234)

Your users open open.php?study=1234, and the page sends them to SmartViewer.

open.php
<?php
// 1. Check your own login / permission here.

$study   = preg_replace('/[^A-Za-z0-9._-]/', '', $_GET['study'] ?? '');
$listUrl = 'https://pacs.example.com/manifest.php?study=' . rawurlencode($study);

// 2. Send the browser to SmartViewer
header('Location: https://smartjoans.space/dicom/?manifest=' . rawurlencode($listUrl));
exit;

PHP study list (manifest.php)

manifest.php
<?php
header('Access-Control-Allow-Origin: https://smartjoans.space');
header('Content-Type: application/json');

$root  = 'D:/studies/';                                         // your images folder
$study = preg_replace('/[^A-Za-z0-9._-]/', '', $_GET['study'] ?? '');
$dir   = $root . $study;

if ($study === '' || !is_dir($dir)) {
    echo json_encode(['status' => 'error', 'message' => 'Study not found']);
    exit;
}

$files = [];
foreach (scandir($dir) as $name) {
    $path = $dir . '/' . $name;
    if ($name[0] === '.' || !is_file($path)) continue;

    $files[] = [
        'name' => $name,
        'url'  => 'file.php?study=' . rawurlencode($study) . '&f=' . rawurlencode($name),
        'size' => filesize($path),
    ];
}

echo json_encode(['title' => 'Study ' . $study, 'files' => $files]);

PHP image file (file.php)

file.php
<?php
header('Access-Control-Allow-Origin: https://smartjoans.space');

$root  = 'D:/studies/';
$study = preg_replace('/[^A-Za-z0-9._-]/', '', $_GET['study'] ?? '');
$name  = basename($_GET['f'] ?? '');                            // basename blocks ../ tricks
$path  = $root . $study . '/' . $name;

if ($study === '' || $name === '' || !is_file($path)) {
    http_response_code(404);
    exit;
}

header('Content-Type: application/dicom');
header('Content-Length: ' . filesize($path));
readfile($path);
Protect your images. The example above lets anyone with the study number download it. In real use add a token that expires: put &exp=…&sig=… on the list link, made with hash_hmac('sha256', $study . '|' . $exp, $secret), and check it in manifest.php and file.php before sending anything.

Link builder

Paste image addresses (one per line) or one study list address to make a ready link and test it.

Problems and fixes

SmartViewer shows a message when something is wrong. Find it here:

Message in SmartViewerReasonFix
Images cannot load on this addressThe list or images are on http.Serve them on https, or use Way 3.
Download stopped … server must allow this viewer (CORS)Your server does not send the CORS header, or the address is wrong.Add Access-Control-Allow-Origin: https://smartjoans.space. Open one image address in the browser to check it downloads.
The image server answered with a web page (often a login page)Your server asked for a login instead of giving the list.Let the list and file addresses work without a login, protected by a token that expires.
Study could not be openedThe list address did not answer, sent an error, or the link expired.Open the list address in the browser. It must show the JSON.
Images could not be sent (Way 3)Your page could not read one of the image addresses.Open that address in the browser. The message shows which one failed.
No images could be readThe files are not DICOM (for example JPEG or a ZIP).Link to the original DICOM files.

FAQ

Common questions

Is SmartViewer really free?

Yes. The viewer and the API are free for everyone, for personal use, clinics and hospitals. No account, no key, no permission.

Are my DICOM images uploaded to your server?

No. Images go from your device or your own server straight into your browser. smartjoans.space does not receive, store or log them, and they are gone when you close the tab.

Can I use SmartViewer for diagnosis or reporting?

No. SmartViewer is a sharing and secondary viewing tool and is not a certified medical device. Use a certified PACS workstation with a calibrated display for primary reading and reports.

Does it work on a mobile phone?

Yes. It works in current browsers on Android and iPhone, with touch scrolling, pinch zoom and the Back button. Very large CT studies need more memory, so MPR and 3D may be reduced on phones.

Can I open DICOM files from my own computer or phone?

Yes, and you do not need the API for it. Use Open files from this device on this page, or the Open folder / Open files buttons in the viewer. The files open in your browser and are never uploaded.

How do I open images from a CD?

Insert the CD, press "Choose folder" on this page (or "Open folder" in the viewer) and pick the CD drive or the copied folder. SmartViewer finds the images in all sub folders and skips other files.

Can I add SmartViewer to my hospital website or PACS?

Yes, with the free API. Use a link with image addresses, a link to a JSON study list, or the smartviewer.js script. Way 3 works even when your images are on http or on a LAN address.

Which images and compressions are supported?

CT, MR, CR, DX, US, MG, XA and other DICOM images, single-frame and multi-frame, uncompressed, JPEG baseline and lossless, JPEG-LS, JPEG 2000 and RLE.

What do I need for MPR and 3D?

A grayscale CT or MR series with at least 10 slices of the same size and one image per position. 3D also needs WebGL 2, which all current browsers have.