JS9: astronomical image display everywhere
JS9 brings astronomical image display to your browser and desktop:
  • display FITS images, tables, data cubes, multi-extension files
  • drag and drop FITS files and urls, PNG and JPEG images
  • retrieve and display data from astronomical archives
  • adjust the colormap and data scaling
  • pan, zoom, and blink images
  • perform image arithmetic, Gaussian smoothing
  • blend images and apply RGB image filters
  • configure mouse buttons and movements, touch events
  • create and manipulate geometric regions of interest
  • extend JS9 using plugins and the public API
  • perform data analysis (local and server-side)
  • configure and control JS9 via HTML elements in a web page
  • control JS9 externally, from a command shell or Python
  • print images, save images and sessions, multiple displays, ...

Drag and drop a FITS astronomical data file onto the display and JS9 functionality immediately becomes available: zoom, pan, colormaps, scaling, regions, WCS, image filters, smoothing ...

By extending JS9 with the plugin facility and the public API, you can perform local analysis on the displayed image: click the Plugins tab, create a region, move it around ...

Images loaded on the server, loaded via proxy (File menu), or uploaded (Analysis menu) all support server-side analysis. Results are displayed in your browser: click the Analysis tab, choose a task, create a region, move it around ...

Want a pristine JS9 display?

Energy Spectrum Counts in Regions Radial Profile Light Curve
JS9 can be connected to a server-side (back-end) analysis system to run complex analysis tasks. Text and plot results can be displayed on the JS9 web page, or new images loaded into JS9. Virtually any analysis program can be added to the back-end.

Here is a quick introduction to server-side analysis using regions:

  • Create one or more regions using the JS9 Region menu.
  • Press the mouse inside a region and drag it to a desired location. (Use an annulus for radial profiles.)
  • Resize or rotate the region by clicking to select it, and then moving one of the handles.
  • Group regions by pressing the meta key and using mouse selection. You then can move/resize/rotate them together.
  • Choose an analysis to run on the server:
    • Energy Spectrum plots a histogram of the energy values of photons in the region(s).
    • Counts in Regions presents a text display of the number of photons found in the region(s).
    • Radial Profile plots the number of photons in each region of an annulus.
    • Light Curve plots a histogram of the time values of photons in the region(s).
  • Every time a region changes, the chosen task will run on the server, and results will be displayed here.
  • These tasks also can be run from the JS9 Analysis menu.
See the Plugins tab for a demo of local analysis.
Extend JS9 with Plugins, using the JS9 Public API to perform event-driven, local analysis. Create a region, move it around ...

Recent Public Releases:

Release 3.9 (12/13/24) Security/Archive release

Release 3.8 (06/21/22) Eric's final release

Release 3.7 (05/16/22) Eric's penultimate release

Patch Release 3.6.2 (01/03/22) add experimental support for converting event tables to 3D cubes

Patch Release 3.6.1 (08/16/21) two bug fixes

Release 3.6 (07/30/21) improvements to regions, including graphical editing of annuli

Release 3.5 (06/01/21) remove long-deprecated fits2png support and improve display of png/jpeg files

Release 3.4 (05/05/21) lots of work on regions, including non-transient groups and boolean selections

Release 3.3 (12/14/20) update three important modules (emscripten, socket.io, fabric.js), along with a few bug fixes

Release 3.2 (11/06/20) mainly changes to support the upcoming desktop Voyager app, but also a few bug fixes

For more details, see the ChangeLog.

JS9 is distributed under the terms of The MIT License.

Get JS9 from GitHub: Clone the repo, install dependencies, and build/serve the site:
    git clone https://github.com/sarhatabaot/js9
    cd js9
    npm install
    npm run serve
      
See Installing JS9 and Deployment Modes (static/client-side vs. the Node helper) for details.

The pyjs9 Python interface is available on GitHub:

It supports communication with JS9 using the public API.
We gratefully acknowledge the technologies that power JS9:
  • HTML5 for image display and most everything
  • jquery for programming ease (jquery.com)
  • emscripten for C-to-JavaScript (emscripten.org)
  • fabric.js for 2D graphics (fabricjs.com)
  • dynamic drive for light windows (www.dynamicdrive.com)
  • flot for plotting (www.flotcharts.org/)
  • swis for jquery.contextMenu (swisnl.github.io/)
  • arrive.js for MutationObserver (github.com/uzairfarooq/arrive)
  • spin.js for spinner support (spin.js.org/)
  • Marc J Schmidt for CSS element queries (github.com/marcj/css-element-queries)
  • HEASARC for CFITSIO (heasarc.gsfc.nasa.gov/fitsio/)
  • IPAC for Montage (montage.ipac.caltech.edu/)
  • SAO/TDC for WCS lib (tdc-www.harvard.edu/wcstools/)
  • Mark Calabretta for HEALPix (www.atnf.csiro.au/people/mcalabre)

With important suggestions (and sometimes code) from:

  • Doug Burke, CfA (research-level testing)
  • Brian Cherinka, JHU (multi-extension FITS, data cubes)
  • Joseph DePasquale, STScI (image blending techniques)
  • Karl Glazebrook, Swinburne (iPad support)
  • Kenny Glotfelty, CfA (toolbar and toolbar icons)
  • Matias Carrasco Kind, NCSA (Jupyter support)
  • Kathy Lestition, CfA (EPO)
  • Briehan Lombaard SAAO (telescope control)
  • John Roll, Facebook (design philosophy, analysis plugins)
  • Maria Henar Sarmiento, ESA (research-level testing)
  • Pat Slane, CfA (needs of research vs. education)
  • Oleg Smirnov, Rhodes University (Jupyter, large file support)
  • The Science Education Department, CfA (EPO)
  • Marwan Ali albahar, Umm Alqura University (security issues)

Funded by Smithsonian Institution, the Chandra X-ray Science Center (NAS8-03060), and NASA's Universe of Learning (STScI-509913).

Source code @GitHub
GitHub |  Docs |  MIT License
Created and maintained through v3.9 by Eric Mandel & Alexey Vikhlinin (Center for Astrophysics | Harvard & Smithsonian); maintained from v3.10.0 by Omer Oreg (Weizmann Institute of Science, Particles & Astrophysics Department).