Smartpacs Image Viewer Free May 2026

RadiAnt is a simple, fast, and intuitive DICOM viewer. While there is a paid "PRO" version, the free version is highly capable for general viewing.

Once you have installed SmartPACS Free, use these tips to work faster:

  • Linking Studies: If a patient has a CT from 2023 and an MRI from 2024, open both. Use the "Link" button to synchronize scrolling. When you scroll to slice 50 on the CT, the MRI jumps to the matching anatomical slice.
  • Saving JPEGs: To put an image into a PowerPoint or Email, use File -> Export -> Screenshot. This strips the DICOM metadata but gives you a clean JPEG.

  • <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
      <title>SmartPACS Lite - Free DICOM Viewer</title>
      <style>
        body 
          font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
          margin: 0;
          padding: 20px;
          background: #1e2a2e;
          color: #eee;
    .container 
          max-width: 1400px;
          margin: auto;
    h1 
          margin: 0 0 5px;
          font-weight: 400;
    .sub 
          color: #aaa;
          margin-bottom: 20px;
          border-left: 3px solid #2ecc71;
          padding-left: 15px;
    .toolbar 
          background: #0f1720;
          padding: 12px 20px;
          border-radius: 30px;
          display: flex;
          gap: 15px;
          flex-wrap: wrap;
          margin-bottom: 20px;
          align-items: center;
          box-shadow: 0 4px 10px rgba(0,0,0,0.3);
    button 
          background: #2c3e44;
          border: none;
          color: white;
          padding: 8px 20px;
          border-radius: 40px;
          cursor: pointer;
          font-size: 14px;
          transition: 0.2s;
    button.active 
          background: #2ecc71;
          color: #000;
          font-weight: bold;
    button:hover 
          background: #3e5a62;
    .dropzone 
          border: 2px dashed #5a7c85;
          border-radius: 20px;
          padding: 20px;
          text-align: center;
          background: #0f1a1f;
          margin-bottom: 20px;
          cursor: pointer;
    .dropzone.drag-over 
          border-color: #2ecc71;
          background: #1e3a2f;
    #viewerContainer 
          background: #000;
          border-radius: 16px;
          overflow: hidden;
          box-shadow: 0 10px 25px rgba(0,0,0,0.5);
          position: relative;
          aspect-ratio: 16 / 13;
          min-height: 500px;
    .cornerstone-element 
          width: 100%;
          height: 100%;
          display: block;
    .info 
          margin-top: 15px;
          font-size: 14px;
          background: #0f1720;
          padding: 12px;
          border-radius: 12px;
          font-family: monospace;
    footer 
          text-align: center;
          margin-top: 30px;
          font-size: 12px;
          color: #5f7f8c;
    @media (max-width: 700px) 
          .toolbar button  padding: 6px 12px; font-size: 12px;
    </style>
    </head>
    <body>
    <div class="container">
      <h1>📷 SmartPACS Image Viewer <span style="font-size: 18px; background: #2ecc7122; padding: 2px 8px; border-radius: 20px;">FREE</span></h1>
      <div class="sub">Open-source DICOM viewer | Drag & drop DICOM files | Zoom/Pan/WL</div>
    

    <div class="toolbar"> <span style="font-size:13px; margin-right:5px;">🔧 Tools:</span> <button id="btnZoom" class="active">🔍 Zoom/Pan</button> <button id="btnWwwc">🎚️ Window/Level</button> <button id="btnReset">⟳ Reset View</button> <span style="flex:1"></span> <span id="fileStatus" style="font-size:12px; color:#aaf0d0;">📄 No file loaded</span> </div>

    <div id="dropzone" class="dropzone"> 💾 Drop DICOM file (.dcm) here or click to select<br> <small>Supports single-frame, grayscale DICOM (CT, MR, CR, DX)</small> </div> <input type="file" id="fileInput" accept=".dcm,.dic" style="display:none" />

    <div id="viewerContainer"> <div id="dicomViewer" class="cornerstone-element"></div> </div> <div class="info" id="infoPanel"> <span>⚙️ Ready — Load a DICOM image to start.</span> </div> <footer> Using CornerstoneJS + WADO Image Loader | For educational / research use only. <br> Not a certified medical device. Always verify with original PACS. </footer> </div>

    <!-- Load required libraries --> <script src="https://unpkg.com/cornerstone-core@2.6.1/dist/cornerstone.min.js"></script> <script src="https://unpkg.com/cornerstone-tools@6.0.5/dist/cornerstone-tools.min.js"></script> <script src="https://unpkg.com/cornerstone-wado-image-loader@4.3.1/dist/cornerstoneWADOImageLoader.bundle.min.js"></script> <!-- DICOM parser for file reading --> <script src="https://unpkg.com/dicom-parser@1.8.9/dist/dicomParser.min.js"></script> smartpacs image viewer free

    <script> // ======================== Setup Cornerstone & Tools ======================== const element = document.getElementById('dicomViewer'); cornerstoneTools.init( globalToolSyncEnabled: true ); cornerstoneTools.external.cornerstone = cornerstone; cornerstoneTools.external.cornerstoneMath = null; // not needed for basic cornerstoneTools.external.Hammer = null;

    // Define tools const ZoomTool = cornerstoneTools.ZoomTool; const PanTool = cornerstoneTools.PanTool; const WwwcTool = cornerstoneTools.WwwcTool;

    cornerstoneTools.addTool(ZoomTool); cornerstoneTools.addTool(PanTool); cornerstoneTools.addTool(WwwcTool);

    // Activate Zoom/Pan by default let activeTool = 'Zoom'; cornerstoneTools.setToolActive('Zoom', mouseButtonMask: 1 ); cornerstoneTools.setToolActive('Pan', mouseButtonMask: 1 ); // zooms with left click, pan with middle? Better: disable Pan initially // Actually correct: Let's set pan to not active, but we'll manage. cornerstoneTools.setToolActive('Pan', mouseButtonMask: 4 ); // middle mouse button pan cornerstoneTools.setToolActive('Wwwc', mouseButtonMask: 1 ); // will be activated later if needed. // Deactivate wwwc initially cornerstoneTools.setToolDisabled('Wwwc'); // But keep zoom fully active as left button cornerstoneTools.setToolActive('Zoom', mouseButtonMask: 1 );

    // UI toggle function setActiveTool(toolName) // Disable all tools for left click usage cornerstoneTools.setToolDisabled('Zoom'); cornerstoneTools.setToolDisabled('Pan'); cornerstoneTools.setToolDisabled('Wwwc'); RadiAnt is a simple, fast, and intuitive DICOM viewer

    if (toolName === 'Zoom') 
      cornerstoneTools.setToolActive('Zoom',  mouseButtonMask: 1 );
      activeTool = 'Zoom';
     else if (toolName === 'Pan') 
      cornerstoneTools.setToolActive('Pan',  mouseButtonMask: 1 );
      activeTool = 'Pan';
     else if (toolName === 'Wwwc') 
      cornerstoneTools.setToolActive('Wwwc',  mouseButtonMask: 1 );
      activeTool = 'Wwwc';
    // update button styles
    document.getElementById('btnZoom').classList.toggle('active', toolName === 'Zoom');
    document.getElementById('btnWwwc').classList.toggle('active', toolName === 'Wwwc');
    // Pan stays without active look but we keep.
    document.getElementById('btnZoom').classList.toggle('active', toolName === 'Zoom');
    document.getElementById('btnWwwc').classList.toggle('active', toolName === 'Wwwc');
    

    document.getElementById('btnZoom').addEventListener('click', () => setActiveTool('Zoom')); document.getElementById('btnWwwc').addEventListener('click', () => setActiveTool('Wwwc')); document.getElementById('btnReset').addEventListener('click', () => if (cornerstone.getEnabledElements().length > 0) const viewport = cornerstone.getViewport(element); viewport.scale = 1; viewport.translation = x: 0, y: 0 ; cornerstone.setViewport(element, viewport); document.getElementById('infoPanel').innerHTML = '<span>🔄 View reset to default.</span>'; );

    // Enable the element cornerstone.enable(element); // Optional: resize handler window.addEventListener('resize', () => cornerstone.resize(element, true); );

    // ======================== Load DICOM from File ======================== const dropZone = document.getElementById('dropzone'); const fileInput = document.getElementById('fileInput');

    function loadDicomFromFile(file) if (!file) return; const fileReader = new FileReader(); fileReader.onload = function(e) const arrayBuffer = e.target.result; // Use cornerstoneWADOImageLoader to create imageId from raw buffer const imageId = cornerstoneWADOImageLoader.wadouri.fileManager.add(arrayBuffer); // Load and display cornerstone.loadImage(imageId).then(image => cornerstone.displayImage(element, image); // Reset viewport const viewport = cornerstone.getViewport(element); viewport.scale = 1; viewport.translation = x: 0, y: 0 ; cornerstone.setViewport(element, viewport); Linking Studies: If a patient has a CT

        // Show basic metadata
        try 
          const dicomData = dicomParser.parseDicom(arrayBuffer);
          let patientName = "Unknown";
          let modality = "Unknown";
          const nameElement = dicomData.string('x00100010');
          if (nameElement) patientName = nameElement;
          const modElement = dicomData.string('x00080060');
          if (modElement) modality = modElement;
          document.getElementById('infoPanel').innerHTML = `<span>✅ Loaded: $file.name  catch(e) 
          document.getElementById('infoPanel').innerHTML = `<span>✅ Loaded: $file.name (metadata parsing limited)</span>`;
    ).catch(err => 
        console.error(err);
        document.getElementById('infoPanel').innerHTML = `<span style="color:#ffaa88">❌ Failed to load DICOM: $ 'Unsupported/Non-DICOM file?'</span>`;
      );
    ;
    fileReader.readAsArrayBuffer(file);
    

    // Drag & Drop handlers dropZone.addEventListener('dragover', (e) => e.preventDefault(); dropZone.classList.add('drag-over'); ); dropZone.addEventListener('dragleave', () => dropZone.classList.remove('drag-over'); ); dropZone.addEventListener('drop', (e) => e.preventDefault(); dropZone.classList.remove('drag-over'); const files = e.dataTransfer.files; if (files.length > 0 && (files[0].name.endsWith('.dcm') ); dropZone.addEventListener('click', () => fileInput.click(); ); fileInput.addEventListener('change', (e) => if (e.target.files.length > 0) loadDicomFromFile(e.target.files[0]); );

    // Demo: Load a public sample DICOM from GitHub (a small CT slice) on page load to showcase viewer const sampleUrl = "https://raw.githubusercontent.com/OHIF/Viewers/master/extensions/dicom-dicomweb-viewer/test/fixtures/DICOM/CR-MONO1-10-chest.dcm"; fetch(sampleUrl).then(res => res.arrayBuffer()).then(buffer => const imageId = cornerstoneWADOImageLoader.wadouri.fileManager.add(buffer); cornerstone.loadImage(imageId).then(image => cornerstone.displayImage(element, image); document.getElementById('infoPanel').innerHTML = '<span>📌 Sample DICOM (chest CR) loaded. Try dropping your own DICOM file.</span>'; document.getElementById('fileStatus').innerHTML = '📄 Sample: CR-MONO1-10-chest.dcm'; ).catch(e => console.warn("Sample load error (CORS may block raw GitHub? Some browsers restrict) ", e)); ).catch(err => console.log("Sample unavailable. Just drop your own DICOM files."));

    // Small resize setTimeout(() => cornerstone.resize(element, true), 100); </script> </body> </html>


    While cloud solutions like SmartPACS are excellent for sharing and storage, having a free desktop viewer installed on your computer offers several advantages: