Skip to main content

Self-hosted picture library with AI tagging, semantic search, and a clean web UI

Project description

PixlVault

PixlVault Logo

PixlVault Screenshot

PixlVault is a local picture library server for organizing, filtering, and reviewing large image collections.

It provides:

  • A browser-based interface
  • Fast metadata and tag filtering
  • Smart score sorting
  • Character and set organization
  • Local storage of your library data

PixlVault runs on your machine and serves the UI at a local web address.

Install PixlVault

Choose one installation method.

Option 1: Windows installer

Use this if you want the easiest setup on Windows.

  1. Go to the GitHub Releases page for this repository.
  2. Download the latest Windows installer .exe.
  3. Run the installer.
  4. Start PixlVault Server from the Start Menu shortcut.
  5. Open your browser to http://localhost:9537.

Windows SmartScreen warning: Because the installer is not yet signed with a paid code-signing certificate, Windows SmartScreen may show a red "Windows protected your PC" dialog when you run it. This is expected. Click More info and then Run anyway to proceed with the installation.

Windows SmartScreen – click More info then Run anyway

Option 2: Install from PyPI

Use this if you already have Python and want a pip install.

Requirements:

  • Python 3.10 or newer

Install:

pip install pixlvault

Run:

pixlvault-server

Then open:

http://localhost:9537

Option 3: Clone and run manually

Use this if you want to run from source.

Requirements:

  • Python 3.10 or newer
  • Node.js 20 or newer
  • npm

Steps:

git clone <your-repo-url>
cd pixlvault

python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
# source .venv/bin/activate

pip install --upgrade pip
pip install -e .

cd frontend
npm ci
npm run build
cd ..

pixlvault-server

Then open:

http://localhost:9537

Installing plugins

PixlVault supports built-in plugins and user plugins.

  • Built-in plugins are in image-plugins/built-in/.
  • User plugins are in image-plugins/user/.
  • Start from image-plugins/user/plugin_template.py.

To add your own plugin:

  1. Copy image-plugins/user/plugin_template.py to a new .py file in image-plugins/user/.
  2. Rename the plugin class and plugin id.
  3. Implement the plugin run() method.
  4. Restart PixlVault Server.

plugin_template.py is ignored by plugin discovery and will not be loaded as a plugin.

First run and data location

On first run, PixlVault creates a user config directory and stores:

  • Server config
  • Database
  • Imported media files

If you need to use a custom config path:

python -m pixlvault.app --server-config "C:\path\to\server-config.json"

Server configuration

On first run, PixlVault generates a server-config.json file in the user config directory:

  • Linux / macOS: ~/.config/pixlvault/server-config.json
  • Windows: %APPDATA%\pixlvault\server-config.json

You can also supply a custom path with --server-config <path>.

Edit the file and restart the server to apply changes.

Network and port

Key Default Description
host "localhost" Address the server binds to. Change to "0.0.0.0" to expose the server on the local network.
port 9537 TCP port the server listens on.
cors_origins [] Extra origins allowed to make credentialed cross-origin requests. localhost, 127.0.0.1, and the server's own LAN IP are always permitted on any port.

At startup the server detects its own LAN IP and automatically allows it on any port. This means the Vite dev server works over LAN (http://192.168.1.5:5173http://192.168.1.5:9537) without any extra configuration, as long as network access is enabled via host.

Use cors_origins only if you need to allow origins on a different machine entirely.

SSL / HTTPS

Key Default Description
require_ssl false Enable HTTPS. When true, the server will use the key and certificate below.
ssl_keyfile <config_dir>/ssl/key.pem Path to the SSL private key file.
ssl_certfile <config_dir>/ssl/cert.pem Path to the SSL certificate file.
cookie_samesite "Lax" SameSite attribute for session cookies ("Lax", "Strict", or "None").
cookie_secure false Set the Secure flag on session cookies. Enable when serving over HTTPS.

Storage

Key Default Description
image_root <config_dir>/images Directory where imported media files are stored.
watch_folders [] List of folder entries to watch for new images and automatically import them. Each entry is an object with the fields below.

Each entry in watch_folders has the following fields:

Field Type Default Description
folder string Absolute path to the directory to monitor (recursively).
delete_after_import boolean false When true, source files are deleted from the watch folder after a successful import.

Example:

"watch_folders": [
  { "folder": "/home/user/downloads/photos", "delete_after_import": false },
  { "folder": "/mnt/camera", "delete_after_import": true }
]

Processing

Key Default Description
default_device "cpu" Device used for AI processing ("cpu" or "cuda").
generate_thumbnails_on_startup true Generate missing thumbnails when the server starts.

Logging

Key Default Description
log_level "info" Log verbosity ("debug", "info", "warning", "error").
log_file <config_dir>/server.log Path to the log file.

Example config

{
  "host": "localhost",
  "port": 9537,
  "log_level": "info",
  "require_ssl": false,
  "image_root": "/home/user/.config/pixlvault/images",
  "watch_folders": [
    { "folder": "/path/to/photos", "delete_after_import": false }
  ],
  "default_device": "cpu",
  "generate_thumbnails_on_startup": true
}

Updating PixlVault

PyPI install

pip install --upgrade pixlvault

Source install

Pull latest changes, rebuild frontend, and reinstall:

git pull
cd frontend
npm ci
npm run build
cd ..
pip install -e .

Troubleshooting

  • If the page does not load, confirm the server process is running.
  • If port 9537 is in use, set a different port in your server config file.
  • If frontend assets are missing, rebuild frontend with npm run build and restart the server.

GPU startup fails (CUDAExecutionProvider unavailable)

If startup reports that ONNX CUDAExecutionProvider is unavailable, you likely have CPU-only ONNX Runtime installed.

Fix your environment:

pip uninstall -y onnxruntime
pip install onnxruntime-gpu

Verify providers:

python -c "import onnxruntime as ort; print(ort.get_available_providers())"

Expected output should include CUDAExecutionProvider.

If you prefer CPU mode, set "default_device": "cpu" in server-config.json.

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

pixlvault-0.8.5.tar.gz (6.4 MB view details)

Uploaded Source

Built Distribution

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

pixlvault-0.8.5-py3-none-any.whl (6.4 MB view details)

Uploaded Python 3

File details

Details for the file pixlvault-0.8.5.tar.gz.

File metadata

  • Download URL: pixlvault-0.8.5.tar.gz
  • Upload date:
  • Size: 6.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixlvault-0.8.5.tar.gz
Algorithm Hash digest
SHA256 fac6858d782bb9400fa73e0923cb2f3659db41968cf7fe3a520acee35aebe5f3
MD5 49e3d1b50ac74a312037abc7eb9d170d
BLAKE2b-256 dd23d378c10b328c2cf07e61bdf601c2b77ec6bc22bd13acc289ccd3f81638d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pixlvault-0.8.5.tar.gz:

Publisher: publish-pypi.yml on Pixelurgy/pixlvault

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

File details

Details for the file pixlvault-0.8.5-py3-none-any.whl.

File metadata

  • Download URL: pixlvault-0.8.5-py3-none-any.whl
  • Upload date:
  • Size: 6.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixlvault-0.8.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6e4db5fb81a1179b35aac3eec09c9a8f611c5b58727ab09216e3f8587eea54fd
MD5 5d3b5b8b3f849a5cc292ac4037d6cbc3
BLAKE2b-256 d11548646884ad38b2e972389011d43fcba6b9d279e91bf64aee92beef929f30

See more details on using hashes here.

Provenance

The following attestation bundles were made for pixlvault-0.8.5-py3-none-any.whl:

Publisher: publish-pypi.yml on Pixelurgy/pixlvault

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