Image file browser with semantic search
Project description
Skjalf
Ever tried to find "the photo of my cat sleeping on the couch" but couldn't remember the filename or folder?
Skjalf lets you search your local photo collection using natural language instead of filenames or tags. It uses AI to understand the content of your images and your search queries, helping you find exactly what you're looking for - while keeping everything on your machine.
Why is it called Skjalf? The name is inspired by Hlidskjalf, Odin's high seat in Norse mythology, which allowed him to see and observe the world from above. Similarly, Skjalf helps you gain a new perspective on your own image collection - making it easier to discover what you are looking for.
This project is still in an early stage, so bugs are to be expected. If you run into any issues, please open a ticket. It would be greatly appreciated!
Watch Skjalf in action below!
https://github.com/user-attachments/assets/db17e439-2173-4ff1-84cd-6da0fde0446e
Features
- Semantic Search: Find images by describing their content (e.g., "a cat sleeping on a sofa").
- Local & Private: All processing happens locally on your machine. Your images never leave your computer.
- Folder Watching: Register folders to automatically scan and embed new images.
- Drag & Drop: Easily register folders or move files via drag and drop.
- Multi-Select & File Operations: Select multiple files and perform batch operations (copy, move, delete).
- GPU Acceleration: Toggle GPU processing for faster embedding generation.
Technology Stack
- Language: Python 3.12+
- UI Framework: PySide6
- Embedding Model: Hugging Face Transformers (
kakaobrain/align-base) - Vector Storage: ChromaDB
- Filesystem Monitoring:
watchdog
Installation & Usage
Prerequisites
- Python 3.12 or higher
1. Install Skjalf
From PyPI (recommended):
pip install skjalf
From Source:
git clone https://github.com/viktor-haag/skjalf.git
cd skjalf
conda create -n skjalf python=3.12 # feel free to use your favorite python environment manager
conda activate skjalf
pip install -e .
2. Run the App
Once installed, you can launch Skjalf from your terminal. If you use skjalf for the first time, it will download the kakaobrain/align-base from Huggning Face at startup.
skjalf
3. Use the App
- Add root folders by dragging and dropping them into the left sidebar or via the context menu. The application will automatically index the selected folders and prepare everything needed for semantic search.
- Select a root folder to explore its contents. Images can be opened in your default image viewer with a double-click.
- Use the right mouse button to access file operations such as moving, copying, or deleting items. Multiple files can be selected using Ctrl-click, Shift-click, or box selection.
- To search, simply enter a query in the search bar. Searches are always limited to the currently selected root folder.
Roadmap
Milestone 0: Initial Prototype <-- we are here
- Semantic image search using ALIGN model
- Folder registration and recursive scanning
- Local ChromaDB vector storage per folder
- GPU/CPU toggle for embedding
- Multi-file selection and batch operations
- Progress tracking for embeddings and file operations
Milestone 1: Consolidation & Distribution
- More control over the ingestion process of registered folders
- Automatic model download at first launch
- Drag & drop support (folders & files)
- Light/Dark mode toggle
- Codebase refactoring and UI design update
- Test cases
- Performance improvements
- Dedicated multi-platform installer (Windows & Linux, maybe macOS)
- PyPI release for easier installation
Milestone 2: People & Search-By-Example
- Face detection and recognition
- Person-based search and grouping
- Privacy-preserving local face embeddings
- Retrieval by example image
Milestone 3: Web Platform
- Browser-based interface for remote access
- Server-client architecture
- All current features available in the web version
- Multi-user support and sharing
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skjalf-1.0.1.tar.gz.
File metadata
- Download URL: skjalf-1.0.1.tar.gz
- Upload date:
- Size: 41.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49a13a81b6213266d5c30f22890f45b3205692e1dc7a3ca71c2a488651515bc9
|
|
| MD5 |
26db2c5a0d7d69b387d032b0ae9e42ec
|
|
| BLAKE2b-256 |
454336372558123d5a48316ea941a8a442a989839ceec8b9b9f91320c7313e2b
|
Provenance
The following attestation bundles were made for skjalf-1.0.1.tar.gz:
Publisher:
release.yml on viktor-haag/skjalf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skjalf-1.0.1.tar.gz -
Subject digest:
49a13a81b6213266d5c30f22890f45b3205692e1dc7a3ca71c2a488651515bc9 - Sigstore transparency entry: 2175414958
- Sigstore integration time:
-
Permalink:
viktor-haag/skjalf@136f472e28a9e4391e6e943fc40b8bb8a7849671 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/viktor-haag
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@136f472e28a9e4391e6e943fc40b8bb8a7849671 -
Trigger Event:
push
-
Statement type:
File details
Details for the file skjalf-1.0.1-py3-none-any.whl.
File metadata
- Download URL: skjalf-1.0.1-py3-none-any.whl
- Upload date:
- Size: 43.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73d95351a9c817c27869d6c49ef51d9b8877c5e1550515a8cd3e7a3f63e6493a
|
|
| MD5 |
a79170080760e1b006584d2f34da98b4
|
|
| BLAKE2b-256 |
2b8ed5a77a14307f7fe9298f42f45ad7ffb7e6b80a9c4a3e3e95217f4279c8e7
|
Provenance
The following attestation bundles were made for skjalf-1.0.1-py3-none-any.whl:
Publisher:
release.yml on viktor-haag/skjalf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skjalf-1.0.1-py3-none-any.whl -
Subject digest:
73d95351a9c817c27869d6c49ef51d9b8877c5e1550515a8cd3e7a3f63e6493a - Sigstore transparency entry: 2175415054
- Sigstore integration time:
-
Permalink:
viktor-haag/skjalf@136f472e28a9e4391e6e943fc40b8bb8a7849671 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/viktor-haag
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@136f472e28a9e4391e6e943fc40b8bb8a7849671 -
Trigger Event:
push
-
Statement type: