Skip to main content

gds_viewer

A command-line GDSII layout viewer built on gdspy, with IHP SG13G2 layer colors and fill patterns applied automatically. No KLayout installation is required to view a layout with correct-looking colors.

pip install gds_viewer

gds_viewer layout.gds
gds_viewer layout.gds --cellname MY_CELL
gds_viewer layout.gds --screenshot layout.png --width 1200

Without installing, python gds_viewer.py ... works the same way.

From Python:

import gdspy, gds_viewer

cell = gdspy.GdsLibrary(infile="layout.gds").top_level()[0]
gds_viewer.render_screenshot(cell, "layout.png", width_px=1200, labels=[(10.0, 0.0, "P1")])

labels draws a marker and a text at layout coordinates, for example to show port locations.

Options

  • gds_file (positional) - input GDSII file
  • --cellname - cell to display (default: first top-level cell in the file)
  • --screenshot FILE.png - render the layout to a PNG and exit, instead of opening the interactive GUI
  • --width PIXELS - width of the --screenshot PNG (default 2400)
  • --version - print the version

Interactive viewer

With no --screenshot, gdspy's built-in Tkinter GUI opens (pan/zoom, ruler, per-layer color/pattern/visibility toggles, ref-level depth control). Colors and fill patterns are hardcoded from sg13g2.lyp, so the layout looks close to its KLayout appearance without reading that file at runtime.

Purpose (datatype) layers noqrc, filler, nofill, and block are hidden by default, across every layer - toggle any of them back on from the layer list if needed.

gdspy's viewer only supports 10 built-in fill patterns, so sg13g2.lyp's ~54 distinct dither patterns are mapped to the closest of those 10 by pixel density and hatch/grid orientation - a reasonable approximation, not pixel-exact.

--screenshot export

Renders headlessly via matplotlib (no GUI/display needed, works over SSH or in CI) and saves a PNG. Unlike the interactive viewer, fill patterns here are pixel-accurate reproductions of sg13g2.lyp's actual dither patterns, not an approximation - reverse-engineered by rendering the real IHP SG13G2 technology through KLayout itself and sampling the resulting pixels.

Requirements

  • gdspy
  • matplotlib and numpy (only needed for --screenshot; pip install gds_viewer installs all three)

How the layer styling was derived

sg13g2.lyp (bundled here for reference) is not read at runtime - gds_viewer.py has no dependency on it or on KLayout once written. Its <fill-color> values were copied straight into the LAYER_STYLES table.

Its <dither-pattern> values (e.g. "C23", "I1") don't have documented bitmap definitions anywhere accessible from code - KLayout resolves them internally with no public API to query. They were recovered empirically: a synthetic GDS with one swatch per distinct pattern name was rendered through a real, installed KLayout in batch mode (klayout_app.exe -z -nc -rx -r script.rb, using RBA::LayoutView to load the layout + sg13g2.lyp and save a PNG), then each swatch's minimal repeating tile was recovered from the rendered pixels (2D period detection, then majority-vote over all repeats to denoise anti-aliasing). The resulting bitmaps are hardcoded in PATTERN_TILES.

If sg13g2.lyp ever changes, LAYER_STYLES and PATTERN_TILES need to be regenerated using that same approach.

License

This project is licensed under the Apache License, Version 2.0 - see LICENSE for the full text.

Metadata

Release files for gds-viewer 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gds-viewer 0.1.0
File Size Uploaded Provenance
gds_viewer-0.1.0.tar.gz 16.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for gds-viewer 0.1.0
File Interpreter ABI Platform
gds_viewer-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.6 kB

Release files / gds_viewer-0.1.0.tar.gz

Download URL gds_viewer-0.1.0.tar.gz
Size 16.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e0c0b22fb2b3d0e870cbd9bbb31d344e126eb9ec7d5ea4462597333ff426a7b4
BLAKE2b-256 checksum
How to use checksums
e807fcd020c91e9ffbc8c4ccc95d3345b754edbfc628e8c24222385d173e0844
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / gds_viewer-0.1.0-py3-none-any.whl

Download URL gds_viewer-0.1.0-py3-none-any.whl
Size 17.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5df66cd02649a981084bbd3b82ce9d9f1e4320c112c673e2a55cb614b2f186f5
BLAKE2b-256 checksum
How to use checksums
9e6656e228f409fdb60d5af8496b578c38df8f234fcd95d8f2770fb88bb8ae5d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for gds-viewer 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page