Version: 1.0.0 ยท Technology: HSPiPy v1.1.8
Table of Contents
HSP Desktop is a desktop application for computing and visualising Hansen Solubility Parameters (HSP). It lets you build a solvent dataset, score each solvent for compatibility with a material of interest, fit an HSP sphere (or two spheres simultaneously), and instantly see the result in an interactive 3D or 2D plot.
The science is powered by HSPiPy, a Python library that implements the HSP sphere optimisation algorithm. The application wraps that library in a native desktop interface available for Windows, macOS, and Linux. By purchasing HSP Desktop you directly support the continued development of HSPiPy as an open-source project.
Key capabilities:
.csv, .hsd, and .hsdx filesDouble-click the installer (.msi on Windows, .dmg on macOS, .deb on Linux) and follow the on-screen steps. The application installs to your user directory and does not require administrator privileges.
HSP Desktop is currently distributed without a platform code-signing certificate. Your operating system will show a one-time security warning the first time you install or open the app. This is expected โ follow the steps below to proceed.
xattr -cr /Applications/hsp-desktop.appIf you see the "cannot be verified" dialog (not the "damaged" one), you can alternatively go to System Settings โ Privacy & Security, click Open Anyway, and relaunch. The xattr command works for both cases and is always safe to run..deb package.If you run into any trouble during installation, contact support@g-npd.com.
When the application opens, a splash screen is displayed. On first launch, a setup dialog guides you through three steps: language selection, reviewing the License Agreement (EULA), and license activation. A progress indicator at the top of the dialog shows which step you are on, and you can go back to the language step at any time by clicking Back on the EULA step. Once all steps are completed, the backend starts automatically and an animated progress bar with rotating status messages confirms that startup is in progress. On most systems this takes 3โ10 seconds; on macOS the very first launch may take a few extra seconds while the system verifies the backend component. A Cancel button is shown at the bottom โ clicking it quits the application cleanly.
The app polls the backend continuously with no fixed timeout, so a slow machine will still succeed given enough time. If something is genuinely wrong, click Cancel to quit and try the following:
xattr -cr /Applications/hsp-desktop.app in Terminal, then relaunch.
On first launch, a setup dialog appears with a three-step progress indicator at the top. The first step asks you to select your preferred interface language.
Click one of the three options โ the dialog immediately advances to the next step. If you need to change your selection, click Back on the EULA step to return here.
The selected language is remembered for all future launches and can also be changed at any time in Settings.

The second step shows the End User License Agreement. You must:
If you selected the wrong language in the previous step, click Back to return to the language selector.
The acceptance is stored locally; this step does not appear again on subsequent launches.
Links to the full EULA and Privacy Policy are provided at the bottom for reference.

The third step activates your license. If a valid license is already stored on your machine this step is skipped automatically and the backend starts loading.
To activate:
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).Enter).The application contacts the license server to validate the key. Once validated, the dialog closes and the backend starts loading automatically โ the progress bar begins and the main interface loads once the backend is ready.
If the key is rejected, an error message is displayed below the input. Check that the key is complete and unmodified, then try again.

The main window is divided into two resizable panels separated by a drag handle.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ ๐ โ โ โ Solvent Grid โ [ 3D | 2D | 2D/3D ] โ โ โโโโโโโโโโโโโโโโโโโโโ โ โ โ Grid selector toolbar โ 3D / 2D Plot โ โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ Solvent table โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ (scrollable) โ โ Fitting Panel โ โ โโโโโโโโโโโโโโโโโโโโโโโ โ ฮดD ฮดP ฮดH Rโ | Fit HSP | Explore โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Area | Description |
|---|---|
| Left โ Solvent Grid | Toolbar for grid management + scrollable solvent table |
| Right top โ Plot | Interactive 3D or 2D scatter plot of the solvent space |
| Right bottom โ Fitting Panel | HSP fitting controls, results, and Surface Explorer |
| Top right โ Docs icon () | Opens the user documentation in your browser |
| Top right โ Settings icon () | Opens the Settings modal (language, host, port, API key) |
| Top right โ Plot mode selector | Switches between 3D, 2D, and 2D/3D views |
You can drag the vertical divider left or right to resize the two panels.

The toolbar at the top of the left panel contains a dropdown selector and a row of icon buttons.
Click the dropdown to see all grids saved in the local database. Click a grid name to load it. If you have unsaved changes in the current grid, a confirmation dialog will ask whether to discard them.

Inside the dropdown there is also an inline area to create a new grid: type a name in the text field and press New.
The icon buttons are quick-access shortcuts to the most common actions also available inside the dropdown menu.
| Icon | Action |
|---|---|
| Create a new empty grid | |
Open a file (.csv, .hsd, .hsdx) | |
| Export the current grid (hover to choose CSV or Excel) | |
| Save the current grid (and current fit results) to the local database | |
| Rename the current grid | |
| Duplicate the current grid |


The save icon turns amber when the grid has unsaved changes.
When a grid is saved, the current HSP fit results (if any) are stored alongside the solvent data. They are automatically restored when the grid is reloaded.
The dropdown also exposes the same actions as labelled text buttons (Open, Export, Save to DB, Rename, Duplicate, Delete), making it self-explanatory if you are unsure what an icon does.

Click the button on the right side of the toolbar to open the solvent picker.
The picker shows the full built-in solvent database. Two features help you find solvents quickly:
Select one or more rows using the checkboxes. Solvents already present in the current grid are shown greyed out and cannot be selected again. When ready, click Add Selected (n) to add them to the grid.

Click the button to open the gradient picker. This tool generates a series of blend rows between two solvents at evenly spaced mixing ratios.
Steps:
10 generates blends at 0:100, 10:90, 20:80, โฆ 100:0.The generated row names follow the pattern SolventA:SolventB ratio_A:ratio_B, e.g. Ethanol:Water 30:70.
Click the Open button (folder icon) to import data. Supported formats:
| Extension | Description |
|---|---|
.csv | Comma-separated values with columns Solvent, D, P, H, Score |
.hsd | HSPiP native dataset format |
.hsdx | HSPiP extended dataset format |
The file name (without extension) is used as the grid name. The imported data is treated as unsaved until you explicitly save it to the database.

Hover or click the export icon () to choose the format:
.csv file with all columns including computed RED values..xlsx file suitable for further analysis in spreadsheet tools.The file is saved to your Downloads folder with the grid name as the filename.

The Score column is the only editable column in the table. It accepts integer values and represents the experimentally observed compatibility of each solvent with the target material.
Two scoring conventions are supported โ choose the one that matches your experimental data and set the Inside Limit accordingly (see Section 5.2):
The simplest convention: a solvent either dissolves the material or it does not.
| Score | Meaning |
|---|---|
| 1 | Good solvent โ dissolves / interacts with the material |
| 0 | Bad solvent โ no interaction |
Set Inside Limit = 1 when using this convention.
A finer scale that captures degrees of solubility, following the HSPiP convention:
| Score | Meaning |
|---|---|
| 1 | Completely dissolves |
| 2 | Mostly dissolves |
| 3 | Partially dissolves / swells |
| 4 | Slight interaction |
| 5 | Little to no interaction |
| 6 | Untouched โ no effect at all |
Set Inside Limit to the threshold that separates "good" from "bad" for your material.
| Key | Action |
|---|---|
Enter or โ | Move to the next row |
Shift+Enter or โ | Move to the previous row |

After a fit has been run, rows whose experimental score disagrees with the sphere prediction are highlighted:
| Highlight | Meaning |
|---|---|
| Red background | Wrong in โ solvent scored as bad but falls inside the sphere (RED โค 1) |
| Amber/yellow background | Wrong out โ solvent scored as good but falls outside the sphere (RED > 1) |
These misclassifications also appear as counters in the Fitting Panel (see Section 5.3).

The bottom of the solvent table always shows an empty row for entering a solvent that is not in the built-in database โ for example, a proprietary solvent blend or a material for which you have measured HSP values yourself.
Fill in the four editable fields in that row:
| Field | Description |
|---|---|
| Solvent | Free-text name (any label you choose) |
| ฮดD | Dispersion Hansen parameter (MPaยฝ) |
| ฮดP | Polar Hansen parameter (MPaยฝ) |
| ฮดH | Hydrogen bonding Hansen parameter (MPaยฝ) |
Once all four fields contain valid values, the + button in the leftmost column becomes active. Click it โ or press Enter in any of the four input fields โ to commit the row. The custom solvent is added to the grid with a blank Score, and the empty row resets for the next entry.

Once at least one solvent has a Score assigned, the Fit HSP button in the Fitting Panel becomes active and shows the number of scored solvents in brackets, e.g. Fit HSP (42 solvents).
Click Fit HSP to run the optimisation. The button shows a loading spinner while the calculation runs.


The Inside Limit selector (values 1โ6) sets the minimum Score a solvent must have to be considered inside the sphere during fitting.
This mirrors the inside_limit parameter in HSPiPy.

The 1 Sphere / 2 Spheres toggle controls whether the algorithm fits one or two independent HSP spheres simultaneously. Two-sphere fitting is useful for materials with bimodal solubility behaviour (e.g. some polymers or surfactants).
When two spheres are fit, the result table shows two rows (one per sphere) and both spheres are drawn on the plot.

| Column | Description |
|---|---|
| ฮดD | Dispersion Hansen parameter of the sphere centre (MPaยฝ) |
| ฮดP | Polar Hansen parameter of the sphere centre (MPaยฝ) |
| ฮดH | Hydrogen bonding Hansen parameter of the sphere centre (MPaยฝ) |
| Rโ | Radius of the fitted sphere (MPaยฝ) |
| Metric | Description |
|---|---|
| Accuracy | Percentage of solvents correctly classified by the sphere (higher is better) |
| DATAFIT | HSPiPy's DATAFIT metric โ a score from 0 to 1 reflecting fit quality (closer to 1 is better) |
| Error | Optimisation residual error (lower is better) |
| Counter | Description |
|---|---|
| In | Number of scored solvents that fall inside the sphere (RED โค 1) |
| Out | Number of scored solvents that fall outside the sphere (RED > 1) |
| โ Wrong in | Solvents scored as bad (below Inside Limit) but inside the sphere โ shown red if > 0 |
| โ Wrong out | Solvents scored as good (โฅ Inside Limit) but outside the sphere โ shown red if > 0 |
The RED value (Relative Energy Difference) for each solvent is shown in the RED column of the grid table after a fit. RED < 1 means the solvent is inside the sphere; RED > 1 means it is outside.

The Explore Surface button (available after a successful fit) opens the Surface Solvents modal. It queries the built-in solvent database for solvents that lie near the boundary of the fitted sphere โ these are candidates that may help constrain the sphere more precisely when scored and added to the grid.
The explorer fetches all database solvents whose RED value falls within a configurable tolerance band around 1.0 (i.e., 1 โ tolerance โค RED โค 1 + tolerance).
| Control | Description |
|---|---|
| Sphere selector | Shown only when two spheres are fitted; switches which sphere's surface is explored |
| All near surface / Outside only | Toggle between showing all solvents within the tolerance band, or only those with RED > 1 |
| RED range slider | Adjusts the tolerance (ยฑ0.05 to ยฑ0.50). Wider tolerance returns more solvents |
| Column | Description |
|---|---|
| Solvent | Solvent name (sortable) |
| ฮดD / ฮดP / ฮดH | Hansen parameters (sortable) |
| RED | Relative Energy Difference, colour-coded: blue = inside (RED < 0.95), amber = on surface (0.95โ1.05), red = outside (RED > 1.05) |
Select rows using the checkboxes and click Add Selected (n) to insert them into the current grid with a blank Score.

The 3D view shows all solvents as points in the Hansen solubility space (axes: D, H, P). After a fit, the HSP sphere is drawn as a green wireframe.
| Colour | Meaning |
|---|---|
| Grey (semi-transparent) | Unscored solvent |
| Blue | Good solvent (Score โฅ Inside Limit) |
| Red | Bad solvent (Score < Inside Limit, Score > 0) |
| Green wireframe + dot | Fitted HSP sphere centre |
Hovering over a point shows a tooltip with the solvent name and its ฮดD, ฮดP, ฮดH coordinates. If a fit has been run, the RED value is also shown for scored solvents.

The 2D view shows three 2D projections of the solvent space side by side. This is useful for identifying which plane shows the clearest separation between good and bad solvents.
| Subplot | Axes |
|---|---|
| Left โ P vs H | x = P, y = H |
| Centre โ H vs D | x = H, y = D |
| Right โ P vs D | x = P, y = D |
After a fit, the sphere projection appears as a green circle in each subplot. The same colour coding as the 3D view applies.

The 2D/3D mode shows both the 3D scatter plot and the three 2D subplots at the same time. The fitting panel is repositioned to the right of the 3D plot to save vertical space.
This mode is best used on wide screens or when you want to inspect both the spatial distribution and the individual plane projections simultaneously.
All plots are powered by Plotly and support the following interactions:
| Action | Effect |
|---|---|
| Click + drag | Rotate (3D) or pan (2D) |
| Scroll wheel | Zoom in/out |
| Double-click | Reset view to default zoom |
| Hover over point | Show solvent name and coordinates |
| Toolbar (top-right of plot) | Camera (PNG download) and Home (reset view) |

Click the settings icon in the top-right corner of the window to open the Settings modal.
| Option | Language |
|---|---|
| English | English |
| Espaรฑol | Spanish |
| ไธญๆ | Simplified Chinese |
The change takes effect immediately. The selected language is persisted and restored on the next launch.
A checkbox directly below the language selector. When enabled, all solvent names from the built-in database are displayed in English regardless of the selected interface language. Useful when working in Spanish or Chinese but needing solvent names to match published literature or lab documentation. The setting is persisted across sessions.
| Field | Default | Description |
|---|---|---|
| Host | 127.0.0.1 | The network address the backend server listens on. Use 127.0.0.1 to keep it local-only (recommended). Set to 0.0.0.0 to allow connections from other devices on your network. |
| Port | 8000 | The TCP port the backend API runs on. Change this if port 8000 is already in use. |
An optional secret key that must be included in all requests to the backend API. Useful when the server is exposed beyond localhost.
Maximum number of seconds a fitting operation may run before it is abandoned and a timeout error is returned. Set to 0 to disable the limit entirely. The default is 60 seconds, which is sufficient for most datasets; very large grids or slow machines may require a higher value.
The folder that the native save dialog opens to when exporting a grid (CSV or Excel). If left empty, the system default (usually Downloads) is used. Click Browse to select a folder.
The Settings modal also displays the application version and links to: EULA, Privacy Policy, and Third-party Licenses.
Click the docs icon (to the left of the settings icon) to open this user manual in your browser.
On first launch the setup dialog (language, EULA, license) appears before the backend starts โ this is expected. The app polls the backend continuously with no fixed timeout. On macOS the very first launch may take longer while the system verifies the backend component. If startup takes unusually long, click Cancel to quit, then run xattr -cr /Applications/hsp-desktop.app in Terminal before relaunching. On all platforms, check that port 8000 is not in use by another application.
The language preference, EULA acceptance, and license data are each stored locally. If any of this data is cleared, the corresponding step reappears on next launch. Complete the step again to proceed normally.
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) without leading or trailing spaces.The Score column only stores integer values. For binary scoring use 0 or 1; for graduated scoring use 1โ6. Values outside the valid range or non-numeric input are silently discarded.
The grid is considered dirty (unsaved) as soon as any score is changed โ the save icon turns amber. Remember to save to the database if you want to reload the grid in a future session.
These operations require that a grid is saved in the database. A grid imported from a file or freshly created but not yet saved does not have a database ID. Save it first using the Save to DB button, then rename or duplicate.
Make sure the export format is Export as Excel (.xlsx) rather than CSV. Some regional Excel settings may require you to change the decimal separator in the CSV; the Excel export avoids this issue entirely.