Skip to main content

English | 日本語 | 中文 | Español | Français | हिन्दी | Italiano | Português (BR)

dataset-desk

CI Coverage MIT License Landing Page

A desk for making and reviewing visual datasets: find the copies, the near-copies and the odd ones out,
search a set by words or by picture, and check that every image's description really describes it.


Why

A style LoRA learns from its training images and its captions. Two quiet defects spoil both:

  • Repeats. The same picture saved twice, or two renders a few pixels apart, teach one image twice.
  • Descriptions that aren't descriptions. A caption copied from the generation prompt, or one ruling pasted onto 54 images, tells the model nothing about the picture. Worse, if that text is later used to test search, it measures recall of the prompt, not understanding of the image.

dataset-desk finds both, on a project folder, without changing it. It writes a report and a review queue for a person to act on. Nothing is removed automatically.

What it does

Command What you get
index Scans the project (records, wave metadata, PNG generation data) and embeds every unique image into a cache under --out
dupes Byte-identical copies (sha256), near-duplicates (256-bit dHash within 10 bits) and semantic duplicates (embedding cosine), as JSON
search The nearest images to a description (--text), a picture (--image), or both together
coverage The best images for each subject in a wanted-subjects list, so gaps show
report A Markdown report: duplicates, the least typical approved images by content and by look, the description audit, and whether each description finds its own image

The description gate runs without any model. A description is flagged when it:

  • echoes its prompt: it equals the prompt or sits inside it, shares a run of 6+ words with it, or 90%+ of its words (80%+ of its content words) appear in it;
  • wraps the record's subject line: a 4+ word canon.subject appears as a contiguous run of its words;
  • is too short: under 8 words or under 5 content words;
  • duplicates another description in the set: identical once punctuation is removed, or a content-word Jaccard of 0.85 or more;
  • is too long for SigLIP2: more than 64 tokens (the one check that needs a tokenizer; unchecked records are never marked as passing).

Flagged records go to description-review.jsonl and to a blind worksheet: each flagged image beside 3–5 visually nearest siblings, with no prompt, no subject line and no old text in view, so the person rewriting it describes the picture. An optional drafter (plain-sight, Florence-2) can write a first draft from the pixels alone; drafts are recorded as captioner_assisted, and a person edits them.

The look channel is 30 numbers per image (palette, tone, and texture at native resolution), so "this one's rendering is off" shows separately from "this one's subject is odd".

Install

pip install dataset-desk

That gives the lite tier: numpy and Pillow only, no torch. The duplicate checks, the look channel, the description gate and the report all work in it (--backend none).

For the embedding index (search, coverage, semantic duplicates, the description fit check), add the model libraries:

pip install "dataset-desk[models]"

The models are fetched from Hugging Face at pinned revisions the first time they're used, then load from your cache: EmbeddingGemma 2 (--backend eg2) or SigLIP2 so400m (--backend siglip2). Set HF_HUB_OFFLINE=1 to forbid downloads. The plain-sight drafter is always offline: it never downloads.

Runs on: Python 3.11 and 3.12, on Windows and Linux. CPU by default, with every thread pool capped (4 threads unless --threads says otherwise), and a model run drops the process to below-normal priority, so it can share a machine.

Usage

# The lite pass: no model, no GPU
dataset-desk index  --project path/to/project --backend none --out desk-out/project
dataset-desk report --project path/to/project --backend none --out desk-out/project

# With an embedding index
dataset-desk index    --project path/to/project --backend siglip2 --out desk-out/project
dataset-desk search   --project path/to/project --backend siglip2 --out desk-out/project --text "a squat bog creature"
dataset-desk coverage --project path/to/project --backend siglip2 --out desk-out/project --subjects wanted.txt
dataset-desk report   --project path/to/project --backend siglip2 --out desk-out/project --subjects wanted.txt

dataset-desk --help lists every flag. Exit codes: 0 ok, 1 a user error or a refusal, 2 an unexpected error. Errors print as error <CODE>: <message> with a hint: line; --debug adds the stack trace.

The project layout it reads is style-dataset-lab's:

project/
  records/*.json                  one per image: judgment (status, explanation), canon (subject), provenance (prompt)
  outputs/<wave>/*.png            the images; a wave's generation.json and _curation.json are read when present

A project with no records/ works too, as long as the images sit in folders under outputs/ (files at the top of outputs/ are skipped as contact sheets): every image is "unrecorded", and the duplicate and look checks still run.

Threat model and trust

  • What it reads: the project folder you name with --project: images, records/*.json, wave metadata, and the generation data embedded in PNG files.
  • What it writes: only under --out: its scan cache, embedding caches, the report, description-review.jsonl and the worksheet. It refuses an --out inside the project (PERM_OUT_INSIDE_PROJECT), so a project is never modified.
  • What it never touches: anything outside those two folders. It deletes nothing, anywhere.
  • Network: the lite tier never uses it. A model backend fetches its pinned weights from Hugging Face on first use, unless HF_HUB_OFFLINE=1 is set; the drafter loads with HF_HUB_OFFLINE=1 and local_files_only=True every time. No model runs remote code.
  • Permissions: an ordinary user account. A GPU needs --device plus a --grant id, so a shared card isn't taken by accident.
  • Secrets and telemetry: it reads no credentials, and it collects and sends no telemetry.
  • Guarded steps: on projects locked for a running benchmark, description embeddings and any model-based acceptance of descriptions are refused unless --allow-multimodal-pool is passed, so the benchmark's queries aren't shaped by the models it measures.

Report a vulnerability as described in SECURITY.md.

Status

v0.1.3, a public prototype. The code is tested offline (152 tests, 96% line coverage, with small stand-ins for the model libraries), and a first calibration on the studio's own data has ranked the models by task, but it hasn't pinned the thresholds yet: the near-duplicate and semantic thresholds are still starting points. Expect the command line to change before 1.0.

The design record, its research grounding and its review history live in the studio's research library: rnd / experiments / dataset-desk.

Development

git clone https://github.com/mcp-tool-shop-org/dataset-desk && cd dataset-desk
python -m pip install -e ".[dev]"
bash verify.sh                       # lint, the tests, and a lite-mode smoke run
python -m coverage run -m unittest discover -s tests && python -m coverage report

CI holds line coverage at 90% or more.

License

MIT. The models it can load are not part of this package, and each carries its own licence; read the model card before you use one.


Built by MCP Tool Shop

Metadata

Release files for dataset-desk 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dataset-desk 0.1.3
File Size Uploaded Provenance
dataset_desk-0.1.3.tar.gz 75.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for dataset-desk 0.1.3
File Interpreter ABI Platform
dataset_desk-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 121.4 kB

Release files / dataset_desk-0.1.3.tar.gz

Download URL dataset_desk-0.1.3.tar.gz
Size 75.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7c36ea2af54e941323dd0c8cdc7e370bf0865088d4ad59068c8013d49c13a786
BLAKE2b-256 checksum
How to use checksums
a849d8a2b485e316c5afee5b8290c0bac5e70cfe40068bf0f6e390fb3846d4a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / dataset_desk-0.1.3-py3-none-any.whl

Download URL dataset_desk-0.1.3-py3-none-any.whl
Size 45.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
14ae559014019a164422732db10ccaa3d2e9f41ac78c05ce846b27817dd1704a
BLAKE2b-256 checksum
How to use checksums
470280c614cefefa81b8e70587b3835967ed743b3dca61f60c5f5a2842611dc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Security for dataset-desk 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dataset_desk-0.1.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page