Skip to main content
imcluster

PyPI package version Documentation build status Coverage badge Test suite status

imcluster clusters images using features from pretrained vision models. It produces a reusable cache and a self-contained HTML gallery organized by cluster.

By default, imcluster uses DINOv3 when its weights are cached or accessible and otherwise falls back to DINOv2. Spectral clustering is the default, with DBSCAN available when the number of groups is not known.

Example imcluster gallery showing clustered image cards and navigation

Installation

imcluster requires Python 3.10–3.13:

pip install imcluster

DINOv2 presets are public and require no authentication. DINOv3 model repositories are gated. Before using --dino-version 3:

  1. Sign in to Hugging Face and open the DINOv3 ViT-B/16 model page.

  2. Review and accept Meta’s DINOv3 license and agree to share the requested contact information. Approval is usually automatic, but access can take several minutes (often 5–15 minutes) to propagate.

  3. Authenticate the machine that will run imcluster:

    hf auth login

    This opens Hugging Face’s browser login flow and stores the resulting token locally. Confirm the active account with:

    hf auth whoami

For a server or non-interactive environment, create a read token in Hugging Face token settings and expose it to the process instead:

export HF_TOKEN=hf_your_token_here

Never commit a Hugging Face token to the repository or place it directly in a script. Accepting access on the website and authenticating locally are both required; a valid token from an account without model access cannot download the weights.

DINOv2 weights use the Apache License 2.0. DINOv3 weights use the DINOv3 license; the imcluster source code uses the Apache License 2.0.

Quick start

Cluster the images directly inside a directory and open the gallery:

imcluster photos/

Include nested directories, request 12 groups, and preserve the outputs:

imcluster photos/ --recursive --n-clusters 12 \
    --cache results.parquet --gallery clusters.html

Inputs may be individual image files, directories, or UTF-8 text manifests with one image path per line. Relative manifest entries are resolved from the manifest’s directory. Supported formats are PNG, JPEG, TIFF, BMP, and GIF.

Outputs

Without output options, imcluster writes temporary processing data and a temporary HTML gallery, then opens the gallery in the default browser. Pass --no-open to suppress browser launching.

--cache PATH preserves the Parquet cache, which contains resolved paths, filenames, feature vectors, cluster labels, thumbnails, and run metadata. --gallery PATH preserves the standalone HTML gallery. It embeds its styles and JPEG thumbnails and does not require an internet connection.

If the input list no longer matches an existing cache, imcluster stops with a clear error. Pass --force to intentionally replace the cache. More targeted controls are available as --force-features, --force-cluster, and --force-thumbnails.

Models

The default selection is --dino-version auto --size base. Automatic mode uses DINOv3 when the selected model is cached or accessible with the active Hugging Face account. Otherwise it reports the fallback and uses DINOv2.

Explicit DINOv2 selection uses --dino-version 2. Its presets are small, base, large, and max; max selects DINOv2 Giant. For DINOv2, --arch is ignored. In automatic mode, tiny falls back to DINOv2 Small and huge falls back to DINOv2 Giant.

Size

Hugging Face model

small

facebook/dinov2-small

base

facebook/dinov2-base

large

facebook/dinov2-large

max

facebook/dinov2-giant

DINOv3 is selected with --dino-version 3. Its available presets are:

Architecture

Size

Hugging Face model

vit

tiny

facebook/dinov3-vits16-pretrain-lvd1689m

vit

small

facebook/dinov3-vits16plus-pretrain-lvd1689m

vit

base

facebook/dinov3-vitb16-pretrain-lvd1689m

vit

large

facebook/dinov3-vitl16-pretrain-lvd1689m

vit

huge

facebook/dinov3-vith16plus-pretrain-lvd1689m

vit

max

facebook/dinov3-vit7b16-pretrain-lvd1689m

convnext

tiny

facebook/dinov3-convnext-tiny-pretrain-lvd1689m

convnext

small

facebook/dinov3-convnext-small-pretrain-lvd1689m

convnext

base

facebook/dinov3-convnext-base-pretrain-lvd1689m

convnext

large

facebook/dinov3-convnext-large-pretrain-lvd1689m

An arbitrary compatible Hugging Face model overrides the preset:

imcluster photos/ --model organization/model-id

Inference

--device auto selects CUDA, then Apple MPS, then CPU. A device can be selected explicitly with --device cpu|cuda|mps. --batch-size defaults to 8; reduce it if inference runs out of memory.

ViT-B is suitable for a quality-oriented default but can be slow on CPU. --dino-version 2 --size small or --dino-version 3 --size tiny provides a lighter run. The largest variants require substantial accelerator memory.

Clustering

Spectral, K-means, agglomerative, and hierarchical clustering use a cluster count:

imcluster photos/ --clustering spectral --n-clusters 10

DBSCAN discovers groups and marks outliers as the noise cluster:

imcluster photos/ --clustering dbscan \
    --dbscan-eps 0.35 --min-samples 3

HDBSCAN also discovers groups and noise while adapting to varying densities:

imcluster photos/ --clustering hdbscan --min-samples 5

Run imcluster --help for the complete command-line reference.

Limitations

Model downloads can be large, and the biggest presets are impractical without a high-memory GPU. Clustering quality depends on the visual domain and chosen parameters. The models’ training data also carries the biases documented by their authors.

Credits

imcluster is maintained by Robert Turnbull at the Melbourne Data Analytics Platform. Zaher Joukhadar was instrumental in the original idea, and James Quang helped implement DINO feature extraction.

Download files

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

Source Distribution

imcluster-0.3.0.tar.gz (239.7 kB view details)

Uploaded Source

Built Distribution

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

imcluster-0.3.0-py3-none-any.whl (240.7 kB view details)

Uploaded Python 3

File details

Details for the file imcluster-0.3.0.tar.gz.

File metadata

  • Download URL: imcluster-0.3.0.tar.gz
  • Upload date:
  • Size: 239.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.13.1 Darwin/25.5.0

File hashes

Hashes for imcluster-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c2d25863297a53d4a411b94c9e554623e0a11a64ba438c6374d23578c972470d
MD5 3308c07b96cd5b929c587b4a1aecae6b
BLAKE2b-256 5cacaf7a8c11ae4b7f2c74c95717d7a0ba7ee8ce5f136961444cc5f141d05349

See more details on using hashes here.

File details

Details for the file imcluster-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: imcluster-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 240.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.13.1 Darwin/25.5.0

File hashes

Hashes for imcluster-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0505f8be617b773a24567c31a72a4ee43926a452988132baa5a0a05600846df8
MD5 038361f01c86c3aa27fc1ec7c130f54d
BLAKE2b-256 f54a0c93b325f856263f378f827c0a542ed5c185ef02f99a4f59630f52ffa60e

See more details on using hashes here.

Supported by

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