Source: Ollama
Mistral's multimodal vision model — analyze images, documents, and charts without sending visual data to the cloud.
Most enterprise AI use cases eventually hit a wall: the data that matters most — contracts with signatures, financial charts, engineering schematics, medical imaging reports, ID documents — exists as images or PDFs, not clean text. Cloud vision APIs can process these files, but doing so means transmitting sensitive visual content to external servers. Pixtral 12B, run locally with Ollama, eliminates that exposure entirely.
Released by Mistral AI in September 2024, Pixtral 12B is the first truly capable open-source multimodal model at this parameter count. It combines a 400M-parameter vision encoder with Mistral Nemo's 12B language backbone, supports variable image resolutions up to high-definition, and can process multiple images in a single context window. For organizations handling confidential visual content, the ability to run Pixtral on local hardware is not a nice-to-have — it is a compliance requirement.
When professionals think about AI data privacy, they typically focus on the text they type into chat interfaces. But visual data carries far greater risk of sensitive information exposure. Consider what passes through a typical enterprise vision workflow:
A law firm processing discovery materials uploads scanned exhibits — witness signatures, handwritten annotations, physical document metadata — to a cloud vision API. A hospital's radiology department runs AI-assisted report drafting on DICOM-exported images. A financial analyst feeds earnings presentation slides into a vision model to extract chart data before public release. An HR team processes uploaded ID documents for onboarding verification.
In each case, the visual content carries identification, privilege, or confidentiality implications that text summaries alone cannot capture. Cloud vision APIs are technically processing this content on external infrastructure, regardless of contractual protections. Pixtral 12B deployed locally processes every image on your hardware, with no network transmission of visual content.
When you send an image to GPT-4o Vision or Gemini Pro Vision, the image bytes travel across the internet to OpenAI or Google's inference servers. The image is decoded, processed by the model, and the response is transmitted back. Even with data processing agreements in place, the image existed outside your infrastructure. With Pixtral running via Ollama, the image is read from your local filesystem or memory, processed entirely on your GPU, and the response is generated locally. The image never leaves your machine.
| Specification | Value |
|---|---|
| Language model backbone | Mistral Nemo 12B |
| Vision encoder | 400M parameters, custom architecture |
| Total parameters | ~12.4B |
| Context window | 128,000 tokens |
| Image resolution | Variable — up to 1024×1024 per patch |
| Multi-image support | Yes — multiple images per context |
| Image formats | JPEG, PNG, WebP, GIF (static) |
| License | Apache 2.0 |
| Languages | English + 10 European and Asian languages |
| Ollama tag | pixtral |
| Setup | Hardware | VRAM | Speed | Use Case |
|---|---|---|---|---|
| Minimum | RTX 3090 | 24 GB | ~12 tok/s | Development, occasional use |
| Recommended | RTX 4090 | 24 GB | ~22 tok/s | Production single-user |
| Server grade | A10G / L4 | 24 GB | ~18 tok/s | Cloud-isolated deployment |
| High throughput | A100 40GB | 40 GB | ~45 tok/s | Multi-user, batch document processing |
| Maximum quality | A100 80GB | 80 GB | ~55 tok/s | Full precision, research |
# Pull Pixtral 12B
ollama pull pixtral
# Interactive session with image
ollama run pixtral "Describe what you see in this chart" --image ./q3_revenue.png
# CLI with local image path
ollama run pixtral "Extract all text visible in this document" \
--image /path/to/scanned_contract.jpg
import ollama
import base64
# Load and encode image locally
with open("financial_chart.png", "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
response = ollama.chat(
model="pixtral",
messages=[
{
"role": "user",
"content": "Analyze this financial chart. Extract: "
"1) The time period shown "
"2) Key data series and their values "
"3) The overall trend "
"4) Any anomalies or notable data points",
"images": [image_data]
}
]
)
print(response['message']['content'])
import ollama
import base64
def encode_image(path):
with open(path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
# Compare multiple documents or images in one pass
response = ollama.chat(
model="pixtral",
messages=[
{
"role": "user",
"content": """Compare these two contract pages and identify:
1) Any differences in key terms
2) Clauses present in one but not the other
3) Any redline changes or annotations""",
"images": [
encode_image("contract_v1_page3.jpg"),
encode_image("contract_v2_page3.jpg")
]
}
]
)
print(response['message']['content'])
One of Pixtral's highest-value enterprise applications is processing scanned documents — contracts, invoices, forms, and reports that exist only as images. Unlike OCR-only solutions, Pixtral understands document structure, layout, and context, enabling extraction that goes beyond raw text.
import ollama, json, base64
def process_invoice(image_path: str) -> dict:
with open(image_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
response = ollama.chat(
model="pixtral",
messages=[
{
"role": "system",
"content": "Extract structured data from documents. Return only valid JSON."
},
{
"role": "user",
"content": """Extract all invoice data from this image as JSON with fields:
{
"vendor_name": string,
"invoice_number": string,
"invoice_date": "YYYY-MM-DD",
"due_date": "YYYY-MM-DD",
"line_items": [{"description": string, "qty": number, "unit_price": number, "total": number}],
"subtotal": number,
"tax": number,
"total_due": number,
"currency": string,
"payment_terms": string
}""",
"images": [image_data]
}
],
format="json"
)
return json.loads(response['message']['content'])
# Process locally — invoice image never leaves your server
invoice_data = process_invoice("invoices/acme_inv_2024_0847.jpg")
print(invoice_data)
import ollama, base64
def extract_contract_clauses(scanned_pdf_images: list) -> str:
"""Process multi-page scanned contract."""
encoded_pages = []
for path in scanned_pdf_images:
with open(path, "rb") as f:
encoded_pages.append(base64.b64encode(f.read()).decode("utf-8"))
response = ollama.chat(
model="pixtral",
messages=[
{
"role": "user",
"content": """Review these contract pages and extract:
1. Parties involved (names, roles)
2. Effective date and term
3. Key obligations of each party
4. Payment terms and amounts
5. Termination conditions
6. Governing law and jurisdiction
7. Any unusual or non-standard clauses
Flag any clauses that appear to be handwritten additions
or differ from standard formatting.""",
"images": encoded_pages
}
]
)
return response['message']['content']
Discovery processing involves scanned exhibits, handwritten notes, annotated documents, and physical correspondence that must be analyzed for relevance and privilege. Uploading these to cloud vision APIs risks exposing privileged attorney-client communications, witness information, and case strategy. Pixtral running on local infrastructure processes every scanned page, handwritten annotation, and signature block on your hardware. The 128K context window handles lengthy multi-page exhibits in a single pass. Extracted text and summaries remain on your servers.
Banks, asset managers, and accounting firms process financial statements, audit reports, and regulatory filings that contain material non-public information. Processing pre-release earnings slides or M&A term sheets through external APIs could constitute a compliance violation. Pixtral deployed on bank infrastructure extracts financial data from scanned statements, reads chart values from investor presentations, and processes loan application documents — all without any financial data leaving the institution's controlled environment.
Clinical workflows generate substantial image-based documentation: printed lab reports, imaging summaries, handwritten physician notes, insurance EOB forms. HIPAA requires that PHI processing occur within covered entity infrastructure or under valid BAA arrangements. Running Pixtral on hospital hardware provides an architectural guarantee that clinical images and documents containing PHI never transit external networks. This is categorically stronger than relying on cloud provider BAAs, which still involve external processing of PHI.
Engineering teams work with schematics, technical drawings, quality control images, and equipment inspection photos that may constitute trade secrets. Sending proprietary CAD exports or production line defect images to cloud vision APIs risks IP exposure. Pixtral running on factory or R&D infrastructure analyzes equipment inspection images, reads technical drawings, identifies defects in QC photos, and processes safety documentation without proprietary visual IP leaving the facility network.
Government agencies processing sensitive documents, infrastructure imagery, or classified materials face strict data handling requirements that cloud APIs cannot satisfy. Air-gapped Pixtral deployments on government hardware enable AI-assisted document processing, form extraction, and visual intelligence workflows that comply with FISMA, IL4/IL5, and similar frameworks. The Apache 2.0 license permits government use without vendor licensing restrictions.
Pixtral is a vision model, so it expects a real GPU (16–24 GB) rather than a laptop CPU. For enthusiasts who have one, it is a private way to analyze your own documents, receipts, screenshots, and photos — extracting text and answering questions about images — without uploading anything to a cloud vision service. If you only occasionally need image analysis, a smaller model like moondream may be the lighter personal choice.
Document-heavy teams in legal, finance, healthcare administration, and operations are Pixtral's core audience. It reads scanned contracts, invoices, and forms, compares multiple document images in one pass, and keeps confidential visual content on infrastructure you control. The 12B model's Apache 2.0 license makes commercial rollout straightforward — a meaningful advantage over vision models with restrictive terms.
Through Ollama's API, Pixtral backs private document-processing pipelines: structured JSON extraction from invoices, multi-page contract analysis, and screenshot understanding — all locally. Its multi-image support and 128K context let a single request reason across several pages or compare before/after images. Apache 2.0 on the 12B model means you can embed it in commercial products without license review friction.
Pixtral is well suited to turning visual data — charts, tables, figures — into structured data for analysis, and to building or labelling multimodal datasets privately at batch scale. As a general-purpose model it is strong on document and administrative imagery, but it is not a clinical-imaging specialist; validate outputs for any high-stakes scientific or diagnostic use.
The Pixtral line spans the accessible 12B and the high-end Pixtral Large. NoCloudGPT will confirm current model availability, license terms, tags, and hardware fit before deployment begins. NoCloudGPT confirms GPU requirements and selects the right quantization before your pilot begins.
| Model | Deployment tier | Best for | |
|---|---|---|---|
| Pixtral 12B | Professional AI — 16–24 GB GPU | Private document & image analysis (Apache 2.0) | Get quote → |
| Pixtral Large (124B) | Enterprise AI — multi-GPU | Frontier multimodal quality (Research License) | Get quote → |
Pixtral licensing varies by model. Pixtral 12B is released under the permissive Apache 2.0 license — clear for commercial use. Pixtral Large, the 124B flagship, is released under the Mistral Research License (MRL), which permits research and non-commercial use but requires a separate commercial agreement with Mistral for production use. Confirm which model you are deploying before building on it.
| Model | License | Commercial use | Model card |
|---|---|---|---|
| Pixtral 12B | Apache 2.0 | Permitted | mistralai/Pixtral-12B-2409 → |
| Pixtral Large (124B) | Mistral Research License | Commercial license required | mistralai/Pixtral-Large-Instruct-2411 → |
Pixtral 12B is Apache 2.0; Pixtral Large is the non-commercial Mistral Research License. License information sourced from Hugging Face model cards and may change between releases. Always verify the current terms before commercial deployment. NoCloudGPT is not a legal advisor.
import ollama, base64, json
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor
import time
def process_single_document(doc_path: Path) -> dict:
"""Process one document image through Pixtral locally."""
with open(doc_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
response = ollama.chat(
model="pixtral",
messages=[{
"role": "user",
"content": "Classify this document type, extract key metadata, "
"and summarize main content in 2-3 sentences.",
"images": [image_data]
}]
)
return {
"file": doc_path.name,
"analysis": response['message']['content'],
"processed_at": time.time()
}
def batch_process_documents(folder: str, workers: int = 2) -> list:
"""
Process folder of document images in parallel.
workers=2 is conservative for single GPU — increase for multi-GPU setups.
"""
doc_paths = list(Path(folder).glob("*.{jpg,jpeg,png,webp}"))
results = []
with ThreadPoolExecutor(max_workers=workers) as executor:
futures = {executor.submit(process_single_document, p): p
for p in doc_paths}
for future in futures:
try:
results.append(future.result(timeout=120))
except Exception as e:
results.append({"file": str(futures[future]), "error": str(e)})
return results
# Process entire folder of scanned documents — nothing leaves your server
results = batch_process_documents("/data/incoming_contracts/")
with open("processing_results.json", "w") as f:
json.dump(results, f, indent=2)
| Model | Params | VRAM (Q4) | Multi-Image | Context | License |
|---|---|---|---|---|---|
| Pixtral 12B | 12.4B | ~10 GB | ✅ Yes | 128K | Apache 2.0 |
| LLaVA 1.6 13B | 13B | ~10 GB | ❌ No | 4K | Apache 2.0 |
| Llama 3.2 Vision 11B | 11B | ~8 GB | ❌ No | 128K | Llama 3.2 |
| Llama 3.2 Vision 90B | 90B | ~55 GB | ❌ No | 128K | Llama 3.2 |
| Gemma 3 Vision 12B | 12B | ~10 GB | ✅ Yes | 128K | Gemma ToS |
| moondream2 | 1.8B | ~1.5 GB | ❌ No | 2K | Apache 2.0 |
Pixtral's key differentiator is multi-image support combined with a 128K context window under an Apache 2.0 license. Llama 3.2 Vision, while competitive on single-image tasks, processes only one image per request. Pixtral's ability to compare, cross-reference, and analyze multiple images in a single context window is essential for document comparison, multi-page processing, and before/after analysis workflows.
# Modelfile optimized for document processing
FROM pixtral
PARAMETER temperature 0.1 # Low temperature for factual extraction
PARAMETER top_p 0.9
PARAMETER num_ctx 32768 # 32K is sufficient for most documents
PARAMETER repeat_penalty 1.05
SYSTEM """
You are a precise document analysis assistant. Your role is to:
- Extract information accurately and completely
- Preserve exact numbers, dates, names, and amounts as written
- Note any text that is unclear, handwritten, or potentially misread
- Flag document sections that appear incomplete, altered, or unusual
- Return structured data when requested as valid JSON
Never infer or guess information that is not clearly visible in the document.
If text is illegible, indicate [ILLEGIBLE] rather than guessing.
"""
# Build document-optimized model
ollama create doc-analyzer -f Modelfile.docanalyzer
ollama run doc-analyzer
Pixtral uses a variable-resolution architecture that processes images as patches, supporting resolutions up to 1024×1024 per patch. For most document scanning use cases (300 DPI scans of letter-size pages), Pixtral handles the resolution effectively. Very high-resolution technical drawings may need downsampling to fit within VRAM constraints. Standard document scans at 150–300 DPI work well without modification.
Yes, with limitations. Pixtral performs reasonably well on clear, consistent handwriting — printed block letters, neat cursive — but struggles with highly stylized or ambiguous handwriting. For critical handwritten content extraction, validate Pixtral's output against the original. In production workflows, flag all handwriting-derived extractions for human review rather than treating them as ground truth.
Ollama processes images, not PDFs directly. For PDF workflows, convert each page to an image first using a library like pdf2image (Python) or pdftoppm (CLI). Then pass the page images to Pixtral. This conversion happens entirely locally, maintaining your privacy posture. For multi-page PDFs, you can pass multiple page images in a single Pixtral request up to the context window limit.
Pixtral is a general-purpose vision model, not a medical imaging specialist. It can describe and extract text from radiology reports, clinical photos, and administrative medical documents effectively. For diagnostic interpretation of DICOM images (X-rays, MRIs, CT scans), purpose-built medical AI models with clinical validation are more appropriate. Pixtral's strongest healthcare use case is administrative document processing, not diagnostic imaging.
Documents, charts, forms, and images — analyzed on your hardware, never transmitted externally.
→ Deployment Guide | ← All Mistral Models | Mistral Large 123B →
Artwork and source references
Hero image
AI-generated abstract artwork created for NoCloudGPT. Original work, no third-party license required.
Developer reference
Pixtral is developed by Mistral AI. NoCloudGPT is an independent deployment service not affiliated with Mistral AI.
Model catalog reference
See the Ollama library page for Pixtral for current model tags.