Skip to content

Viewer reference

Every part of the viewer in detail. New to it? The Quickstart walks through it step by step.

  • Layout. The sample (the world view) is on the left; dragging it moves the stage, the wheel zooms (a drag in the live image moves the stage too: the sample follows the pointer). Ctrl + wheel over the live image zooms into it (up to 32x, about the pointer; a touchpad pinch too): an inset at its top left shows the factor and the part shown, a drag then pans within the image instead of moving the stage, and a click on the inset shows the whole image again. Its display options (layers, look, tilt and rotation, z clip) are under View ▾ in the info box at its top left, which lists one item per line where the view is (seed, centre, scale, tilt) and what is still loading; View ▾ opens the options in the same box. The microscope is on the right: its bar (level with the title bar) holds ▶ Live / Snap / ● Record / ↺ and one line with the frame rate, the time per frame, the image size and the pixel size (nm, one decimal); under it the live camera image, always square, with every sample and microscope setting below it at the same width (a search box filters the rows); beside them, down to the bottom of the window, a column of the microscope's controls that scrolls: the focus, the configuration, the illumination and light path, the objective and PSF (from the Advanced level: it has no Basic setting), the display range and, at the Expert level, the performance. The search box highlights every line that matches (at the current level), opens their groups and hides the rest of the settings. The divider between the two halves drags (the microscope takes half the window at first, a third to 62 % by dragging; remembered in your browser).
  • On a phone (a window up to 700 px wide; a landscape phone or a tablet keeps the side-by-side layout) the live image comes first, square across the screen, with the world view as a small inset in its top-right corner: a tap on the inset swaps the two (remembered in your browser). ▶ Live / Snap / ● Record sit under the image and stay on screen while the controls and settings below scroll with the page. One finger on the live image moves the stage; two fingers moving up or down together move the focus (up = focus up), spread or pinched they zoom into the image. In the Focus box a ruler replaces the focus field: swipe it like a focus knob (left = up, one step per notch, a fast swipe goes further) or press − / + (held, they repeat). On the world view one finger pans; two fingers pinch to zoom, twist to turn the view, and moved up or down together they tilt it. A long press on a setting's name shows its help. The page starts at most two cell workers on a touch screen, to stay within a phone's memory.
  • Live starts by itself once the engine is up (the empty image shows "Starting..." until the first frame; it does not count as a press in the usage counts; ?live=0 in the address keeps it off) and renders one camera frame after the other at the view centre, at most one per exposure time (the line beside the buttons shows the frame rate, the render time per frame, the image size and the pixel size, led by "Working..." while a slow frame, snap or recording is being rendered; the button turns red while live runs). It runs the adapter's live mode itself (LiveScope, in WebAssembly): the light a frame takes is added to the sample's illumination history, so dSTORM dyes leave their initial ON state, PALM dyes convert and bleach and widefield labels fade where you look, at the beam's own shape and depth, while a place you have not lit yet is fresh; moving away and back finds the dimmed place again. Brightfield frames take no fluorescence light. The drift walks on from frame to frame. A change of settings acts from the next frame on; a change that makes another world (seed, cell parameters, specimen) starts a fresh sample, and ↺ does so by hand. Snap takes one frame, ● Record many (below). Focus: the arrows of the Z field (the only number field with arrows; the others take typing and the arrow keys), Page Up / Page Down or the mouse wheel over the image step it by the step size (beside it on the same line). Display: auto contrast (0.1-99.9 % of the pixels) or a fixed range, over a live histogram of the frame (log counts; its axes span the darkest to the brightest pixel and the tallest bar of the last 10 s of frames, so they move slowly; drag in it to move the nearer end of the display range). Live pauses while the page is hidden. The world view always outlines the camera's field (dashed white, "camera"), and the x-z view draws the focal plane across it, at the focus height in the sample's frame (a live drift moves both).
  • Performance (its own box under Display, at the Expert level): how each label was drawn (SMLM splat: every blink placed with the PSF; binned SMLM: the same blinks on a finer grid, one FFT convolution, many blinks at once; mean-field widefield: no single blinks; or BrightField), the sample's time, how long this place has been lit and the drift; then where each frame's time goes, in milliseconds with one decimal: the engine's phases (setup, the core's blink events, splatting, camera noise, ...), the trip to and from the worker, the display, and the wait that paces frames to the exposure. Every row that can take time is always listed, in the same order; one the frame did not have shows "—". Under the times, the memory: the live worker's heap (it never shrinks, so this is the most it has held) and what the engine's caches hold, the largest first (the PSF kernel per label colour is usually most of it; a finer pixel size or a longer PSF z range makes it bigger). If a movie needs more memory than the browser gives it, the movie stops with an "out of memory" message and its worker starts afresh; the viewer goes on.
  • ● Record opens a small box for the number of frames; its Start (or Enter) records N frames at the stage position with the current settings, rendered as fast as the engine goes, not paced to the exposure. The recording then plays in the live view in real time at the exposure it was taken with (100 frames of 1 ms play in 0.1 s; the screen shows the frame current at each refresh), with play/pause, a frame slider and ✕ to close it (Live, Snap or a new recording close it too), and Save .tif there saves it as one 16-bit TIFF stack, insiliscope_live_<w>x<h>x<N>.tif; nothing is saved by itself. A recording is a fresh sample: a movie starting at the Start time, the same one insiliscope_cli --spec renders from the spec in the file's header; the live sample is left as it was. The file opens in ImageJ/Fiji as a time series with the pixel size and frame interval set, and its header holds every setting (the engine spec). Clicking ● Record again cancels it. Live, Snap and ↺ wait while it records; a recording holds at most 1 GB of frames. With continue the live sample (in the box, Advanced level) the frames go on from the live sample instead: its illumination history, drift and camera noise run on through them, as in a Micro-Manager sequence acquisition. They are rendered in batches, each one movie on the sample's clock, so the slow parts of a frame (above all the blink-event query) are done once per batch (about 2 to 5 times faster per frame than live at 128-256 px); the last frame of each batch is shown, and clicking ● Record again stops early and keeps the frames so far.
  • Illumination & light path (in the controls column, under Configuration): the light preset, each laser line as a slider with its power (kW/cm², three decimals; at the Basic level only the lines the labelled dyes use in their modes, with 405, 488 and 561 nm for PALM, and any line that is on), the background, geometry, filters and dichroic, and the spectra plot (dye excitation and emission, laser lines, filters, camera QE). Each laser line has the colour of its wavelength, and each dye's excitation (dashed) and emission (solid) the colour of its weighted emission wavelength; on the dark looks the lines are brighter and thicker. Click the plot for a larger copy with a legend of every line and what reaches the camera per label (detected fraction and wavelength, photons per second, activation, free-imager background; Esc or a click beside it closes it).
  • Configuration (in the controls column): the config groups of the adapter's Micro-Manager configurations (inSiliScope_Basic.cfg at the Basic level, _Advanced.cfg at Advanced, _Expert.cfg at Expert): Specimen, Mode (the configurations' Channel group, its presets named by the mode alone, without the dye they also pick: dSTORM, DNA-PAINT, PALM, WideField, BrightField, and in Advanced WideField + BrightField), Objective, Camera, then the others (Aberrations, Drift, Illumination, Quality; the configurations' laser-power groups are not shown here: the lasers are in Illumination & light path). A preset sets what the adapter sets for it (made by tools/gen_mm_configs.py with the configurations, from the adapter itself, so the two stay the same). The select shows the preset the settings are at, or "—" once a setting differs.
  • Camera (in the controls column, under Objective & PSF): the camera, the field of view (px) and the Magnification between the objective and the camera (EmissionPath.EmissionMagnification; a camera preset sets its own: 0.667 with the Kinetix22, 1.6 with the iXon), with the total magnification under it. The pixel size follows as in Micro-Manager, sensor pixel / (objective x magnification), 97.45 nm at 100x with the Kinetix22; typing a pixel size sets the magnification that gives it. Advanced adds the camera's noise values.
  • The options are grouped the way a microscope is set up: sample (the specimen; for the cell field its cell shape, nucleus, cytoplasm, packing, microtubules; for the nanorulers their design, density and bending), sample preparation (labelling and fluorophore, refractive index), microscope (image formation; illumination, the objective and the camera are in the controls column) and acquisition. Every group, here and in the controls column, is a box laid out like the Configuration (names in a column, the controls beside them, a number's unit right after it), open in full when the page loads; a click on its title folds it. Every option has a unit and a help text that shows when the pointer rests on its name. A setting that differs from its default carries a thin bar at its left.
  • Basic / Advanced / Expert at the right end of the top bar (with the ☰ menu) choose which settings show, the same tiers as the Micro-Manager adapter's properties (each setting at the tier of the property that sets it, taken from the adapter when the configurations are made; a setting Micro-Manager does not have keeps the viewer's own level; Basic at first). A note says how many hidden settings differ from their defaults. The ☰ menu switches between three looks (Compact, Focus, the default, and Light); Expand all / Collapse all open or fold every box (the controls column's too), and Reset all to defaults puts every setting back, those beside the image too. Every setting, the level and the look are remembered in your browser across reloads, and so are the position in the sample and the zoom of the world view (Reset all forgets them, and puts the panel and x-z view sizes back).
  • Save and load settings. The first section of the ☰ menu (and the two small icons beside Basic / Advanced / Expert, a disk to save and a folder to load; not on a phone) keeps a setup as a file, <name>.isc.json, in parts that can be mixed: the Instrument (objective, PSF and aberrations, camera and its noise, pixel size, the beam's shape, custom laser lines and filter edges), the Settings (laser powers, the filters in place, the BFP position, the light paths, camera size, render quality), the Sample (specimen, seed, cells or nanorulers, every target's label and dye, custom dyes, beads, the medium), the Measurement (stage position, focus, exposure, drift, and the sample's light history: every live frame that lit it) and, unticked by default, the View (the world view's camera, layers and colours, the settings level and look). Each row shows where the part came from, a short id of its values (the same values, the same id; "edited" once they moved) and a one-line summary. Save… asks for a name and the parts; Load… (or a .isc.json dropped on the page) lists the file's parts and replaces only the ticked ones: another lab's instrument with your sample, or your instrument with someone's sample. Loading a sample leaves the lasers as they are; a loaded measurement replays its light history, so the next live frame is the one the saved session would have taken (bleached and blinking as it was). A file from another release loads with a note that the image may differ, and what the viewer could not take is listed. Every value is stored (defaults too) by name, and insiliscope_cli --settings <file> renders the same frames on the command line. The viewer counts anonymous usage (which specimen, mode and Look are picked, Live, Record, saved TIFFs), without cookies: Privacy lists what is counted and how to turn it off. A typed value takes effect 0.5 s after the last key, or at once on Enter. Sliders and number boxes also follow the mouse wheel, one step per notch.
  • Specimen (Sample): Cell field, Nanorulers, Bead sample or Fluorescent Slide (Samples; the bead sample is a bare coverslip with only the fiducial beads: switching to it with no beads set puts 0.3 per µm² down in clumps (40 % aggregation), turns the 561 nm laser to 0.1 kW/cm² and the others off, draws the beads and opens the Fiducial beads group, where the diameter and the gel layer's thickness are Basic; the fluorescent slide is a uniform dye layer, its group Fluorescent slide holds its thickness, dye (default a mix of TetraSpeck's four colours), concentration and bleach half-time; switching to it, or picking its dye, sets the dye's channel at 0.02 kW/cm², 561 nm for the mix; the world view shows its layer as a translucent slab, in the x-z view from the glass up to its thickness, and zooms to the camera's field). Switching shows that sample's groups and its label, and zooms to a scale that suits it (the nanorulers: 150 px/µm and closer, with their dyes on; zoomed further out, the dyes inside the camera's field are still all drawn, the others not). Seed (default 42, Random draws a new one) is the one seed of the simulation, as in Micro-Manager (inSiliScope.RandomSeed) and the cli (seed): the world comes from seed ^ 0x43454C4C, the blinking, drift and camera noise from the seed itself. The nanorulers are drawn from above as their bent rods (the Nanorulers checkbox, View) with the docking strands' dyes; the Nanorulers group sets the design, the density, the docking strands per spot (1-5 of the ring's 5) and, in Advanced, the bending (persistence length, default 1500 nm), the minimum spacing, the landing (attach height, roll) and the linker. A movie of the nanorulers wants the focus on the coverslip (Focus 0-0.02 µm, in the live panel; it stays at 0.5 µm when you switch).
  • Microtubule label and Nuclear pore label (the cell field's two targets, imaged together; the nanorulers' is the Docking strands label, the same rows): the labelled share of the sites, then the mode, then the dye (the Dye select lists the dyes with data for that mode, and None: the target unlabelled), then the attachment (the probe: antibodies, nanobody, SNAP/Halo, ...; Advanced: its length, flexibility and linker) and the dipole orientation. Defaults: microtubules ATTO 655 DNA-PAINT through primary + secondary antibodies, pores Cy3B DNA-PAINT on SNAP-tagged Nup96. Nuclear pores sets their density on the nuclear envelope (default 8 per µm², at least 180 nm apart) and, in Advanced, the minimum spacing and the ring geometry. A third target, the Nuclear lamina label, is unlabelled by default (Dye None): pick a dye to show random lamina points on the nuclear envelope; Nuclear lamina (Advanced) sets their density (default 2000 per µm², 100 to 10 000) and the lamina-free disc around each pore (40 nm). A mode or dye pick loads the dye's fields, the mode's labelling and the light preset of every labelled target combined (Illumination & light path: the preset, lasers and the spectra plot; dichroic and filter; the BFP position slider, 0 = epi, 1 = the critical angle, between HILO and above TIRF, with the regime and how deep the light reaches shown under it; the DNA-PAINT presets set HILO, the nanorulers TIRF; in Advanced the beam profile, its width and the DNA-PAINT chamber height; Dyes and light path). The Pattern select makes the light several coherent beams in the back focal plane whose fringes step with the frame (structured illumination: SIM2D, SIM3D, LatticeSIM2D, LatticeSIM3D or Custom; a pick sets the BFP position to the type's radius and the polarization to S; the readout under it gives the fringe period and the frames per cycle; in Advanced the polarization, the plane the beams are in phase at (the focus, so the fringes move with the focus and the sample moves through them, or the coverslip), the phases and orientations per cycle, their order, the first orientation, a phase offset and the centre beam's amplitude; in Expert the phase drift and the Beams matrix: every beam of the illumination in every mode, one row per beam, ux uy spot tiltX tiltY amp phase pol ellip phaseStep nm, pre-filled with the type's beams, which typed rows replace; the column table and worked examples are on the physics page under Structured illumination). The live sample counts its frames (the info line shows the frame's place in the cycle, the performance box its angle and phase), a recording of a fresh sample starts at frame 0. Preview illumination sketches the light entering the objective's back focal plane (from above: the pupil, the critical circle, each beam's spot with its size and polarization) and the pattern it makes in the sample (from below: a section over 1.5x the field, at the focus until its height slider moves it; from the side: an x-z section through the axis, the section's height dashed) for the current settings, with a slider through the frame program; the sketch follows every settings change while it is open. The preset is also the modality: "BrightField (lasers off)" images transmitted light, every other preset fluorescence. The label stays available in BrightField. In Advanced, Custom dyes starts empty: + Add a dye makes one (up to three) with its own name, a library dye to start from, a default mode and every dye value editable; it then appears in the Dye select. Dipole orientations other than Free are not implemented yet.
  • Fiducial beads (Sample, any specimen; off by default, density 0): beads per µm² of coverslip placed at random, then the bead Type (gold by default, TetraSpeck, FluoSpheres orange / red / dark red / infrared, red nanodiamonds; spectra and brightness after Balinovic et al. 2019), the Height (on top of the sample by default, on the coverslip, or in a gel layer of a given thickness; on the bead sample no "on top"), the Aggregation slider (the chance a bead is stuck to the next: clumps of touching beads, 0 % by default), in Advanced the Diameter (a type's pick sets its product size, 100 or 200 nm; any other, such as 20 nm, after it: the dyes scale with the volume) and its spread (12 %), the beads' PSF z range (14 µm), in Expert the bleach half-time (288 s at 1 kW/cm² at the dye's peak), the brightness as equivalent dyes, the filters' blocking OD for gold's scattered laser light and Beyond the PSF stack (Blur: a bead further off focus is a blur growing with the defocus; Not drawn: left out, faster) (Fiducial beads). The world view and its x-z side view draw them as discs of their diameter over the scene (the Fiducial beads checkbox, View); in the live image they are bright and do not blink, a defocused bead's light spreads over the whole frame (its PSF window is twice the field of view), and under the light they fade (a half-time of about 5 minutes at 1 kW/cm² at their peak), much more slowly off it.
  • Presets set several advanced options at once: Cell shape (footprint and outline), Cell look (cytoplasm height profile; the default is "Rounded") and BF quality. The options a preset drives are indented under it; editing one shows "Custom".
  • The live image uses the same PSF as the Micro-Manager adapter: a scalar Gibson-Lanni model with Zernike aberration modes by default (the "PSF model" and "Aberrations" selects under Objective & PSF; Gaussian is the fast option). From Advanced the box also has the objective's NA (the Objective preset in the Configuration sets it; a value typed there makes the preset show "—", as Micro-Manager's turret goes to Custom), and in Expert the Zernike modes: the Aberrations preset's 28 coefficients in waves (OSA order 0-27), which you can type over (28 values, or 15 with the rest 0); picking a preset replaces them again, as Objective.ZernikeCoefficients does in Micro-Manager. The kernel of the current PSF settings is computed in the background as soon as the page is ready and whenever those settings change. Preview PSF shows that kernel in a player over the view: the oversampled kernel beside the camera-pixel image of one emitter at a pixel centre, with a slider for the emitter's distance from the focal plane (its title bar drags it). The viewer uses a 3 um kernel half width (the adapter: 7 um) to save browser memory; --psf-kernel-half-width-nm 3000 reproduces a viewer recording with the CLI. Blinks also take the default halo cut (pixels below 3e-6 of the emitter's photons are left out) and skip a frame they give fewer than 50 photons (Optics).
  • Drift (Configuration) makes the sample drift: Off, Low, Medium, High or Extreme set the xy and z speeds (0-250 nm/s) and a random-walk jitter (0-50 nm/√s), the directions drawn per seed. Advanced shows those four values, the directions, how far direction and z speed swing (and how slowly) (see Camera and background).
  • Brightfield frames run on the CPU; the BF quality slider trades speed for precision (1: thin object, 6 condenser points ... 4: 0.25 um slices, 48 points).
  • Tilt (0 = straight down, 90 = from the side) and Rotation (about the vertical through the view centre) turn the view; Shift-drag on the map does both (sideways turns, up and down tilts). The advanced Perspective (0-90°, the field of view, default 35°; 0 = orthographic) makes near things larger and far ones smaller, so a tilted floor recedes; the scale bar holds at the depth of the view centre. With perspective, Distance haze (75 %) fades cells and floor further away into a mist, and Fade out far cells (on) lets them fade out completely and draws nothing beyond about the eye's distance behind the view centre (fewer cells to load in a steeply tilted view). Z clip draws only what lies between two heights above the coverslip (a vertical slider, 0-6 µm; its full range is off); drag both knobs together for a slab moving through the cells. Soft Z clip (on) fades what lies just outside it over 0.2 µm, lines widening as if out of focus; Follow live focus keeps the clip on the live focal plane ± 0.3 µm. Surfaces are drawn as shells: a clip through the nucleus shows its rim. The advanced Turn height sets the height of the point the view turns about.
  • Detailed cells (Advanced, default 5): only the cells nearest the view centre get their microtubules, nuclear pores and dyes; the others show their cytoplasm and nucleus, so a zoomed-out, turned view stays fast. 0 draws every cell in full. Advanced: Scope draws all cells, the centre cell with faint neighbours, or the centre cell alone; Look switches between the depth colours, bright colours on black (Dark fluorescence) and Dark fluorescence (depth, the default): on black, the microtubules and nuclear pores coloured by their height in the cell, the nucleus by its own height (drawn on the GPU, the 2D fallback keeps one colour for the microtubules). Microtubule / Nuclear pore / Nucleus / Lamina colours pick each one's colour scale (previewed in the list; defaults ice, warm, greys and greens), each shown only while its structure is drawn; the legend shows only what is drawn.
  • Nuclear pores (View, on by default): each pore of a detailed cell as its two 8-fold rings on the nuclear envelope (cytoplasmic and nucleoplasmic, 50 nm apart, radius 53.5 nm), seen through their own tilt on the flanks of the nucleus; a pore is a dot when zoomed out, and from 400 px/µm each corner shows its four Nup96 sites.
  • Nuclear lamina (View, off by default): the lamina of each detailed cell as a surface, labelled or not (also in the x-z view, filled): the nuclear envelope its points lie on, coloured by height (Lamina colours; the Look's = one colour). The points themselves are not drawn: at the default 2000 per µm² they are 22 nm apart, a few hundred thousand per nucleus. The surface's opacity follows their local density instead (the points within 0.3 µm of each vertex, relative to the set density, at most fully opaque): today's lamina is uniform, so the surface is evenly opaque; where a lamina is sparser it shows through. The density arrives a moment after the surface (the cell workers generate the points, about half a second per nucleus).
  • The x-z checkbox (View, on by default) adds a side view along the bottom of the map: the cytoplasm, nuclei, microtubules and dyes of the view's depth range seen from the front (along y when the view is not turned), at equal horizontal and z scale; the Z clip shows as a band and an image slice's height as a dotted line. Its height follows the tallest cell in view (+ 0.5 µm), so a flat field leaves more room for the map; drag its top edge to set it (down to hide it), double-click it to fit again. Outside the Z clip it is drawn in grey.
  • Tilted views are drawn in depth order: each cell's cytoplasm surface, nucleus and contour lines back to front, the cells far to near, and the microtubules and dyes depth-tested on the GPU, so a nucleus shows through the cytoplasm above it and a nearer cell covers a farther one.
  • The Animation tab (beta: turn on "Show animation pane (beta)" in the ☰ menu for the Settings / Animation tabs) builds short animations of one cell for talks: the view orbits the cell while its structures appear. An animation is a list of cycles, each bound to a structure (microtubules, nucleus, cytoplasm) and made of steps. A step lasts some seconds, moves the camera (turning by the cycle's orbit, tilting, zooming) and can sweep a plane through the cell (up, down, side to side, or along the screen's axes) with a slab of some thickness; every layer of the step is shown ahead of the plane, in the slab and/or behind it (its wake), with its own colour and opacity. A step without a sweep makes its layers pop in (fading). Typical: the simulated microtubules building up bottom to top while the view turns, then a slab moving back down. Duplicate a cycle and switch its structure to repeat it for the nucleus; "keep shown after" leaves a layer on for later cycles. Ready-made cycles (27): orbits, fly-arounds, turntable, zoom dive, top-view reveal, peel away, x-ray, optical sections, depth scan, wipes, outside-in, dye sites, WideField / SMLM / BrightField slices, ground truth vs thresholded or localized, SMLM build-up; ready-made sequences under "New from…" (grand tour, ground truth vs data, an SMLM experiment, every modality, SMLM slab up / localizations down, turntable). The timeline under the view plays and scrubs it (Space, arrows, [ and ]; once, loop or ping-pong); the dimmed border shows the export frame. Export renders every frame off screen (not a screen recording) as MP4 (H.264; WebM where the browser cannot encode it), WebM or GIF, at 720p to 4K, with an optional scale bar, per-step captions, the plane's position and a legend. Animations are kept in the browser, with undo/redo, and saved or opened as .json files. Layers can also be simulated image data: a WideField slice, SMLM camera frames or a BrightField slice riding on the sweeping plane, the thresholded WideField surface or the SMLM localizations in its wake (e.g. "Simulated up, WideField down, thresholded wake", or the ready-made "Simulated, WideField, thresholded" sequence); the export makes their data first (a sweep along the screen's depth shows an x-z slice). The data an animation needs is made by itself as soon as it is previewed or edited.
  • Cells are packed on fixed blocks exactly as in the Micro-Manager adapter, so the view shows what the adapter images at the same position. The packed cell positions are remembered in your browser (a few hundred KB of local storage, one entry per seed and cell settings), so a reload shows the same field without packing it again.
  • URL flags for testing: ?nw (core on the main thread), ?2d (force Canvas 2D), ?wfgpu=any (allow software WebGPU).