Skip to main content

Crosscheck

A second opinion for AI photo descriptions. Several vision models, running on your own computer, describe the same photo. Crosscheck tells you what they all agree on, and, first and most clearly, where they disagree.

Built for blind and low-vision people, who use AI descriptions for labels, medicine, mail and screens but have no easy way to tell when a description is wrong.

Why

A single AI description sounds equally confident when it is right and when it is wrong. A study at ASSETS 2025, Surfacing Variations to Calibrate Perceived Reliability of MLLM-generated Image Descriptions (Meng Chen, Akhil Iyer, Amy Pavel), found that when blind and low-vision participants were shown where several models' descriptions varied, they spotted 4.9 times as many unreliable claims as with a single description (2.62 against 0.53 per image). 11 of 15 participants ranked that presentation as their favourite, and all of them wanted to use it in the future.

Crosscheck brings that idea to models that run locally through Ollama: free, offline, and the photo never leaves your computer.

How it works

  1. Each model lists what it sees as short, separate facts, and quotes any text it can read.

  2. Facts that say the same thing are merged. Facts that differ in a number or quoted text ("Ibuprofen 200 mg" against "400 mg") are kept apart, because that is where errors hide.

  3. Every model looks at the photo again and judges each fact the others stated: yes, no, or unsure.

  4. You hear a short summary first, for example:

    A pill bottle on a wooden table. The 3 models agree on 6 of 9 details. They disagree about: The label says "Ibuprofen 200 mg"; The label says "Ibuprofen 400 mg".

    Then, on demand: what every model agrees on, where they disagree (and which model said what), and details not every model could judge.

Agreement is not proof. Models can make the same mistake. For medicine, money or safety, confirm with a person or another trusted source. Crosscheck never says "verified".

Install

  1. Install Ollama and pull three vision models from different families (different families make different mistakes):

    ollama pull qwen3-vl:4b-instruct
    ollama pull gemma4:e4b
    ollama pull granite3.2-vision:2b
    
  2. Install and start Crosscheck (Python 3.10+, no other dependencies):

    uv tool install crosscheck-vision      # or: pipx install crosscheck-vision
    crosscheck serve
    

    It opens http://127.0.0.1:8765 in your browser.

Choose other models with --models a,b,c (or CROSSCHECK_MODELS). With a 12–16 GB GPU, expect about 30–90 seconds per photo while Ollama swaps the models in and out; a CPU works, slowly.

Using it

  • Web app: choose a photo, optionally ask a question ("What does the label say?"), press Check photo. Progress is announced; when the result is ready, focus moves to it. Everything works with the keyboard and a screen reader. A checkbox can also read the result aloud with the browser's own voice.
  • Terminal: crosscheck describe photo.jpg --question "What does the label say?", or --json for the full result.

The web app shrinks the photo in your browser before sending it, which also removes metadata such as GPS location.

Privacy and security

  • Runs on 127.0.0.1 only. Photos stay in memory and go only to your Ollama. Nothing is logged.
  • Requests must come from the app itself: a non-local Host (DNS rebinding) or a foreign Origin (another website) is refused. A strict Content-Security-Policy blocks outside content.
  • Model output is shown as text, never as HTML.

Status and limits

  • v0.1, for desktop browsers on the same computer. Using a phone camera over Wi-Fi needs HTTPS and is planned for v0.2.
  • Merging facts across models uses word overlap, so two phrasings of one fact are sometimes listed separately; each still gets judged.
  • Small local models are weaker than the cloud models in the study. We are measuring how well their disagreement predicts real errors on photos taken by blind people (VizWiz), and will publish the results and timings here.

Feedback from blind and low-vision users matters most: please open an issue or email admin@rushlabs.ai.

Development

python -m unittest discover -s tests -v

Tests run against a fake Ollama: merging and judging, a failing model, the web app's security checks, the job queue and the CLI.

Licence

Apache-2.0. Built by Rush Labs, an applied AI lab. The models keep their own licences (all three defaults are Apache-2.0).

Metadata

Release files for crosscheck-vision 0.1.0

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

Source distribution (sdist)

Source distribution for crosscheck-vision 0.1.0
File Size Uploaded Provenance Actions
crosscheck_vision-0.1.0.tar.gz 20.8 kB With provenance Details for crosscheck_vision-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for crosscheck-vision 0.1.0
File Interpreter ABI Platform Actions
crosscheck_vision-0.1.0-py3-none-any.whl Python 3 none any Details for crosscheck_vision-0.1.0-py3-none-any.whl

Total release size: 44.8 kB

Release files / crosscheck_vision-0.1.0.tar.gz

Download URL crosscheck_vision-0.1.0.tar.gz
Size 20.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4c90ef10b9f3bb4a8835d4b567dba72fa211e0828de5ca8266be55340fd82f95
BLAKE2b-256 checksum
How to use checksums
61b81602894489a6149ccf064ac01e0158bf30862a3f208655ff801de086263c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 8, 2026.

Transparency log

Release files / crosscheck_vision-0.1.0-py3-none-any.whl

Download URL crosscheck_vision-0.1.0-py3-none-any.whl
Size 23.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f24b945a0ade198e1642993cf20cc5e84aec03d7ca5778fb570227d1e856ad7
BLAKE2b-256 checksum
How to use checksums
fccbb367ee276b81fa8bd788114b5b78810007c1a5b97e3716b08b60fc0af2c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 8, 2026.

Transparency log

Security for crosscheck-vision 0.1.0

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

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for crosscheck_vision-0.1.0.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 Nov 8, 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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 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