Skip to main content

Fast desktop tool for navigating N-dimensional hypercubes of plots

Project description

juxt logo

juxt

juxt is a fast desktop tool for visually comparing plots across multiple parameter axes. Define axes (model, date, data source, ...) and flip through the resulting image hypercube with keyboard navigation.

juxt comes from juxtapose — placing things side by side to compare. That's the whole idea: flip through congruent plots fast enough to visually identify differences.

Install

pip install juxt

For SSH remote loading:

pip install juxt[ssh]

Quick start

juxt accepts several forms as its first argument:

juxt /path/to/plots/                        # auto-detect axes from a directory of images
juxt "plots/{sensor}_{date}.png"            # explicit local template
juxt myhost:/path/to/plots/                 # remote directory over SSH
juxt "myhost:/path/{sensor}_{date}.png"     # remote template over SSH
juxt config.yaml                            # explicit config file

For directory and remote-directory modes, filenames are split on separators (_ and / by default) and any position with more than one distinct value becomes an axis. You'll be prompted to name the axes on first run; use -a to skip.

Config

Auto-discover mode

Point juxt at a directory and it figures out the axes from the filenames:

juxt /path/to/plots/

Or with an explicit config:

discover:
  directory: plots/
  separator: "_"

Template mode

For full control, define the template and axes explicitly:

template: "plots/{sensor}_{date}_{overpass}_{source}.png"
axes:
  sensor:   [ASCAT, SMAP, SMOS]
  date:     [2024-03-15, 2024-03-16]
  overpass: [AM, PM]
  source:   [L2, L3]
keys:
  s: sensor
  d: date
  o: overpass
  r: source

Remote mode (SSH)

Images are downloaded over SFTP at startup and cached locally; navigation afterwards is identical to local use. Auth uses your SSH agent or ~/.ssh/config key, with a password fallback.

remote: myhost               # or user@myhost, or user@myhost:port
template: "/data/plots/{sensor}_{date}.png"
axes:
  sensor: [ASCAT, SMAP]
  date:   [2024-03-15, 2024-03-16]

Or pass the remote path directly on the command line — juxt will detect axes from the remote filenames automatically:

juxt myhost:/data/plots/

Requires the SSH extra: pip install juxt[ssh]

Navigation

Default mode is case-sensitive: a lowercase letter navigates forward (+1) on that axis; uppercase navigates backward (−1). Arrow keys navigate the most recently used axis.

Key Action
/ cycle the active axis
/ cycle the secondary axis
lowercase letter navigate +1 on that axis
uppercase letter navigate −1 on that axis
Ctrl+letter open value picker for that axis
Space toggle between current and previous position
Home / End jump to first / last value
19 jump to the Nth value

Use :mode twin|multi|case in the command bar to switch navigation modes.

Command mode

Press : to open the command bar (vim-style). Tab-completion narrows candidates as you type.

Command Action
:q quit
:fit fit image to window
:fit height / :fit width fit to height or width
:zoom N set zoom to N%
:fullscreen toggle fullscreen
:mode twin|multi|case switch navigation mode

Controls

Zoom

Key Action
double-click fit image to window
0 reset zoom to 100%
scroll wheel zoom (anchored under cursor)
drag pan

View

Key Action
Enter toggle fullscreen
Ctrl+H toggle status bar

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

juxt-0.5.0.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

juxt-0.5.0-py3-none-any.whl (230.0 kB view details)

Uploaded Python 3

File details

Details for the file juxt-0.5.0.tar.gz.

File metadata

  • Download URL: juxt-0.5.0.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for juxt-0.5.0.tar.gz
Algorithm Hash digest
SHA256 7c979f01368025302d7eb913d7b3ba08fadf17eae43dc82ecea55ebb0cc886a1
MD5 97fcf4237ccf4122fbaf0f4b3fd75e89
BLAKE2b-256 e08ab03bd28d6ed3dce2b82b37e441b452297cd1ad9053974a96901558f3910a

See more details on using hashes here.

Provenance

The following attestation bundles were made for juxt-0.5.0.tar.gz:

Publisher: publish.yml on ColinMoldenhauer/juxt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file juxt-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: juxt-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 230.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for juxt-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8da74f6671af81e654ef6ef976edd0945b2626bd6eb91c151289f5f52364be7
MD5 f92045211bce42e7b3eef9b3dc312ecb
BLAKE2b-256 53d8fd6eb4472f8c05e4a94ec77513db60e37c1e52e829e79847440abd3c36dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for juxt-0.5.0-py3-none-any.whl:

Publisher: publish.yml on ColinMoldenhauer/juxt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page