Published July 31, 2026
| Version v7.1.0
Software
Open
ejeschke/ginga: Ginga v7.1.0
Authors/Creators
- ejeschke
- P. L. Lim1
- Rajul
- Rupak
- Erik Tollerud1
- Stuart Mumford2
- Brigitta Sipőcz3
- Christoph Deil4
- Chi-Hung Yan5
- Sourabh Cheedella
- Thomas Robitaille
- Sergio Pascual6
- J. Xavier Prochaska7
- Joe Catera8
- Ray Plante9
- Sandra
- Ole Streicher10
- Jonathan Eisenhamer11
- Nabil Freij12
- Megan Sosey1
- Christine Chang
- Austin Beauchamp
- Henry Ferguson1
- Matt Craig13
- Matthew K Brown14
- Matthew Thompson
- Michael Kelley15
- Peter Teuben16
- Simon Krughoff17
- 1. Space Telescope Science Institute
- 2. Aperio Software
- 3. Caltech/IPAC
- 4. HeidelbergCement
- 5. Academia Sinica
- 6. Universidad Complutense de Madrid
- 7. UCO
- 8. Cisco | Splunk
- 9. National Institute for Standards and Technology
- 10. Leibniz Institute for Astrophysics @aipescience
- 11. STScI
- 12. SETI Institute & LMSAL (@LM-SAL)
- 13. Minnesota State University Moorhead
- 14. W. M. Keck Observatory
- 15. University of Maryland
- 16. U of Maryland
- 17. AURA/Vera C. Rubin Observatory
Description
- Added an experimental Vulkan renderer (
renderer='vulkan'), a GPU-accelerated, toolkit-agnostic renderer built as an alternative to the OpenGL one. It renders GPU-native (images colormapped in-shader with live cut levels/distribution, shapes/wide/dashed lines, native Pillow text, RGBA alpha, and a 3D camera mode) into an offscreen Vulkan image and hands the result back as an array, so every backend (qt, gtk3, gtk4, tk, and the pg web/websocket backend) can use it via the same array path as the pil/agg renderers. Select it withginga -t <toolkit> -r vulkanor the new per-viewerrenderersetting; it falls back automatically when thevulkanbinding or a device is unavailable. Requires the optionalvulkandependency (pip install ginga[vulkan]) and a system Vulkan driver (Mesa lavapipe works for a CPU/headless device). See the developer manual ("The Vulkan renderer") for details. Not available in-situ under Pyodide/PyScript. - The OpenGL renderer now draws text by rasterizing it with Pillow and
blitting a texture (filled, anti-aliased) instead of converting it to
cairo path outlines, and supports wide and dashed lines by expanding them
into filled triangles (OpenGL does not guarantee
lineWidth > 1or stippling). This drops the cairo dependency for OpenGL text. - bump required version of a few dependencies
- Menu items can now show an icon as well as (or instead of) text, like
toolbar actions.
Menu.add_name(),Menu.add_menu()andMenubar.add_name()accepticonpath/iconsizekeyword arguments, andMenuActiongains aset_icon()method. Anicon_onlyflag requests showing just the icon where the backend can render it, always falling back to the text label otherwise, so the same calling code shows the icon, the text, or both depending on the backend. Fully supported on the qt, gtk3, and pg (web) backends; the gtk4 backend accepts the arguments for API parity but renders text only for now - The qt
RadioButtonnow honors thegroupkeyword across different containers. Previously qt only made radio buttons mutually exclusive when they shared a parent widget; grouped buttons now use a sharedQButtonGroup, matching the gtk3/gtk4/pg backends - Added a
TreeView.delete_tree()method (qt/gtk3/gtk4/pg) that removes the nodes named by a subtree of keys -- individual leaves or whole subtrees -- from a loaded tree, optionally pruning branches left empty, preserving the selection on surviving items, and firing theselectedcallback if the selection changed andchangedif anything was deleted - The
ColorDistcolor distribution classes now produce a normalized 0.0-1.0 floating point curve; the RGB mappingDistributestage scales that to the output level (bit depth) and quantizes to the index type. This preserves precision (no longer capped at 256 levels for deeper outputs) and is slightly faster. Thecolorlenargument to theColorDistclasses is now vestigial and deprecated (it has no effect). CustomColorDistsubclasses should now install their curve as a normalized 0.0-1.0 float array via the new publicset_hash()method (formerly_set_hash). For backward compatibility, a subclass whosecalc_hash()still stores a pre-7.1 integer/colorlen-scaled hash is detected at build time and normalized automatically, with aPendingDeprecationWarning; this shim will be removed in a future release (github issue #1148) - Color maps are now resolution-independent:
ginga.cmap.ColorMapgainsget_colors(n), which samples/interpolates the map to any size, and can be built from a discrete list (as before), piecewise-linear control points (ColorMap.from_control_points), or a callable (from_function). matplotlib color maps are captured without retaining a runtime dependency on matplotlib - Added a
color_depthviewer setting that controls the resolution (in bits) at which pseudocolor is distributed, decoupled from the RGB output depth. Raising it (e.g. to 12) yields much smoother gradients -- many more distinct colors and far less banding -- for colorful color maps on a standard 8-bit display, at negligible cost. The default (8) is unchanged. Both the standard and OpenGL renderers honor the setting (the OpenGL renderer sizes its GPU colormap texture up to 4096 entries) - The DS9-derived color maps (
gray,ramp,red,green,blue,heat,ds9_cool,ds9_a,ds9_b,ds9_bb,ds9_he) are now defined by their authoritative SAOImageDS9 piecewise-linear control points instead of baked 256-entry arrays. They are exact, resolution-independent (smooth at any color depth), and small (this also removed ~2600 lines fromginga/cmap.py) - Fixed an issue with matplotlib plots getting their axes labels cut off
Files
ejeschke/ginga-v7.1.0.zip
Files
(35.0 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:6cda8e5c1d61bb7fc286a3f33916979f
|
35.0 MB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/ejeschke/ginga/tree/v7.1.0 (URL)
Software
- Repository URL
- https://github.com/ejeschke/ginga