{"id":103215,"date":"2026-03-07T17:20:26","date_gmt":"2026-03-07T11:50:26","guid":{"rendered":"https:\/\/www.guvi.in\/blog\/?p=103215"},"modified":"2026-09-07T14:13:42","modified_gmt":"2026-09-07T08:43:42","slug":"build-visual-rag-pipelines-llama-3-2-vision-ollama","status":"publish","type":"post","link":"https:\/\/www.guvi.in\/blog\/build-visual-rag-pipelines-llama-3-2-vision-ollama\/","title":{"rendered":"Building Visual RAG Pipelines with Llama 3.2 Vision and Ollama: The Complete Step-by-Step Guide (2026)"},"content":{"rendered":"\n<p>Want a system that can actually read your PDFs and answer questions about them, all without sending a single byte to the cloud?<\/p>\n\n\n\n<p>That&#8217;s exactly what a visual RAG pipeline with Llama 3.2 Vision and Ollama does. It turns your PDF pages into images, stores them in a local vector database, then pulls up the right page and hands it to the model for a grounded answer.<\/p>\n\n\n\n<p>This guide walks you through building the whole thing step by step. No API bills, no cloud accounts, just your machine doing the work.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>TL;DR Summary<\/strong><\/h2>\n\n\n\n<ul>\n<li>Visual RAG pipelines let you query PDFs, including charts, tables, and diagrams, using Llama 3.2 Vision and Ollama, running fully on your local machine with no cloud APIs.<\/li>\n\n\n\n<li>Setup involves installing Ollama and Python libraries, then converting PDF pages into high-resolution images and extracting text with Tesseract OCR.<\/li>\n\n\n\n<li>Each page gets both text and image embeddings, stored together in ChromaDB, so pages can be retrieved by meaning, not just keywords.<\/li>\n\n\n\n<li>When a question comes in, the pipeline retrieves the most relevant page, re-ranks it visually using CLIP, and passes the winning image to Llama 3.2 Vision for a grounded answer.<\/li>\n\n\n\n<li>The guide also covers hardware requirements, licensing notes, common errors, a full working example, and tips for improving accuracy.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What Is a Visual RAG Pipeline and Why Does It Matter<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"636\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-1200x636.jpg\" alt=\"Infographic showing what is a visual RAG pipelines and why does it matter\" class=\"wp-image-105520\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-1200x636.jpg 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-300x159.jpg 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-768x407.jpg 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-1536x814.jpg 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-2048x1085.jpg 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/What-Is-a-Visual-RAG-Pipeline-and-Why-Does-It-Matter-150x80.jpg 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p>Most people have heard of RAG by now. RAG stands for Retrieval-Augmented Generation. Instead of relying only on what an AI was trained on, RAG lets it pull in relevant content from your own documents before generating an answer. Think of it as giving the AI an open book during an exam.<\/p>\n\n\n\n<p>Standard <a href=\"https:\/\/www.guvi.in\/blog\/guide-for-retrieval-augmented-generation\/\">RAG<\/a> works great for text documents. But the moment a document contains a bar chart, a scanned invoice, an engineering diagram, or a table full of data, standard RAG becomes useless. It simply cannot see those elements. Visual RAG solves this by adding image understanding to retrieval and generation.<\/p>\n\n\n\n<p><strong>Fun Fact:<\/strong> Research published in the VisRAG paper in 2024 found that visual RAG systems achieved a 39% relative accuracy improvement over text-only RAG systems when tested across six different multimodal document datasets. Seeing the page directly is simply more accurate than parsing text alone.<\/p>\n\n\n\n<p>Here is why building visual RAG pipelines matters so much in 2026:<\/p>\n\n\n\n<ul>\n<li><strong>Works with real-world documents:<\/strong> Business reports, research papers, medical records, and technical manuals all contain charts, tables, and diagrams that text-only RAG misses completely.<\/li>\n\n\n\n<li><strong>More accurate and grounded answers:<\/strong> When the model can see the actual chart and its caption together, its answers are far more reliable than anything text extraction alone could produce.<\/li>\n\n\n\n<li><strong>Fully private and local:<\/strong> Running the pipeline with Ollama means your documents never leave your machine. No cloud uploads, no data sharing, no per-token API costs.<\/li>\n\n\n\n<li><strong>Scales to any document type:<\/strong> PDFs, scanned images, slide decks, and technical manuals all work within the same pipeline structure once it is set up.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><em>Become a Future-Ready AI\/ML Engineer with HCL GUVI&#8217;s <\/em><\/strong><em><a href=\"https:\/\/www.guvi.in\/zen-class\/ai-ml-programme\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=build-visual-rag-pipelines-llama-3-2-vision-ollama\" target=\"_blank\" rel=\"noreferrer noopener\">Artificial Intelligence and Machine Learning<\/a><\/em><strong><a href=\"https:\/\/www.guvi.in\/zen-class\/ai-ml-programme\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=build-visual-rag-pipelines-llama-3-2-vision-ollama\" target=\"_blank\" rel=\"noreferrer noopener\"><em> <\/em><\/a><\/strong><em><a href=\"https:\/\/www.guvi.in\/zen-class\/ai-ml-programme\/?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=build-visual-rag-pipelines-llama-3-2-vision-ollama\" target=\"_blank\" rel=\"noreferrer noopener\">Course<\/a><\/em><strong><em>. Get 120+ hours of live classes across 25+ modules, 10+ real-world projects, and 1:1 mentor support. Learn from India&#8217;s platform trusted by 4.5M+ learners, with 1000+ hiring partners and placement assistance. Backed by a 7-day money-back guarantee. Seats are limited, so enroll now and start building your AI career today!<\/em><\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div style=\"background-color: #099f4e; border: 3px solid #110053; border-radius: 12px; padding: 18px 22px; color: #FFFFFF; font-size: 18px; font-family: Montserrat, Helvetica, sans-serif; line-height: 1.6; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); max-width: 750px;\">\n  <strong style=\"font-size: 22px; color: #ffffff;\">\ud83d\udca1 Did You Know?<\/strong> <br \/><br \/>\n  <span>\n    <strong style=\"color: #110053;\">Llama 3.2 Vision<\/strong> launched in 2024 with \n    <strong style=\"color: #110053;\">11B and 90B<\/strong> models, trained on \n    <strong style=\"color: #110053;\">6B image-text pairs<\/strong> to understand images, documents, charts, and more!\n    <br \/><br \/>\n    \n    <strong style=\"color: #110053;\">EU users, take note!<\/strong> Llama 3.2 Vision can\u2019t be directly used by individuals or companies in the EU due to Meta\u2019s licensing restrictions.\n    <br \/><br \/>\n    \n    <strong style=\"color: #110053;\">CLIP<\/strong> was trained on a massive \n    <strong style=\"color: #110053;\">400M image-text pairs<\/strong>, helping AI connect what it <em>sees<\/em> with what it <em>reads<\/em> \u2014 perfect for visual RAG!\n  <\/span>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Important Licensing Note Before You Start<\/strong><\/h2>\n\n\n\n<p>Most beginner guides skip this, and it matters before you write a single line of code. Llama 3.2 Vision has a geographic licensing restriction that directly affects who can legally use it.<\/p>\n\n\n\n<p>If you are an individual based in the European Union, or a company with its principal place of business in the EU, Meta&#8217;s Llama 3.2 Community License does not grant you the rights to use the multimodal vision models directly. This restriction was put in place due to regulatory uncertainty around the EU AI Act and EU data privacy laws.<\/p>\n\n\n\n<p><strong>What this means in plain language:<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>If you are outside the EU:<\/strong> You can download and use Llama 3.2 Vision freely for research and most commercial use cases as long as you follow the Community License terms.<\/li>\n\n\n\n<li><strong>If you are based in the EU:<\/strong> You cannot legally use the Llama 3.2 Vision model directly as an individual or business. You can, however, use products and services that incorporate the model as an end user.<\/li>\n\n\n\n<li><strong>If you work for a non-EU company but are based in the EU:<\/strong> You may use the model within the scope of your work for that non-EU company.<\/li>\n\n\n\n<li><strong>Alternative options for EU developers:<\/strong> Consider using Mistral&#8217;s vision models or other multimodal models that are fully available in the EU without restriction.<\/li>\n<\/ul>\n\n\n\n<p>Always check the official Llama 3.2 license and acceptable use policy at llama.com before building or distributing anything using this model.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Understanding the Tools: Llama 3.2 Vision, Ollama, and the Supporting Stack<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"636\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-1200x636.jpg\" alt=\"Infographic showing the tools - Llama 3.2 vision , Ollama and supporting stack\" class=\"wp-image-105521\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-1200x636.jpg 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-300x159.jpg 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-768x407.jpg 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-1536x814.jpg 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-2048x1085.jpg 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Understanding-the-Tools_-Llama-3.2-Vision-Ollama-and-the-Supporting-Stack-150x80.jpg 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p>Before writing any code it is important to understand what each tool does and why this particular combination works so well together. Most beginners jump straight to installation and get confused when something doesn&#8217;t connect the way they expected.<\/p>\n\n\n\n<p>Think of it like assembling a team before a project. Each person has a specific role, and knowing those roles upfront means the project runs smoothly instead of chaotically.<\/p>\n\n\n\n<p>Here is what each tool in the visual RAG stack does:<\/p>\n\n\n\n<ul>\n<li><strong>Llama 3.2 Vision:<\/strong> Meta&#8217;s open-source multimodal model released on September 25, 2024. It comes in two sizes, 11 billion parameters for consumer hardware and 90 billion parameters for large-scale applications. It processes both text and images in a single prompt and is trained on 6 billion image-text pairs, making it excellent at reading charts, diagrams, tables, and scanned documents.<\/li>\n\n\n\n<li><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"><strong>Ollama:<\/strong>\u00a0A free local model runner that lets you download and run large language models, including Llama 3.2 Vision, directly on your own machine.<\/span> It requires no API key and no internet connection once the model is downloaded. It works on Mac, Windows, and Linux.<\/li>\n\n\n\n<li><strong>ChromaDB:<\/strong> A lightweight open-source vector database that stores your text and image embeddings and makes them searchable by meaning rather than just keywords. It runs entirely on your local machine alongside the rest of the pipeline.<\/li>\n\n\n\n<li><strong>CLIP:<\/strong> OpenAI&#8217;s Contrastive Language-Image Pretraining model, trained on 400 million image-text pairs. It maps both images and text into the same numerical space, making it possible to search your documents using a natural language question even when the answer lives inside a chart or diagram.<\/li>\n\n\n\n<li><strong>Tesseract OCR:<\/strong> An open-source text extraction tool that reads and extracts text from images. Since Llama 3.2 Vision receives images as input rather than raw PDFs, Tesseract pulls the visible text from each page image so it can be embedded and searched alongside the visual content.<\/li>\n\n\n\n<li><strong>pdf2image:<\/strong> A Python library that converts each page of a PDF into a high-resolution image file. This conversion is the first step in any visual RAG pipeline built around a vision language model.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Hardware Requirements Before You Begin<\/strong><\/h2>\n\n\n\n<p>This is another section most beginner tutorials skip entirely, and it is one of the most searched questions about this topic. Knowing your hardware limits before you start saves hours of frustration.<\/p>\n\n\n\n<p>The good news is you do not need a server or a high-end workstation to build a working visual RAG pipeline. The 11B model is designed to run on consumer hardware.<\/p>\n\n\n\n<p>Here is a clear breakdown of what you need for each setup:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Setup<\/strong><\/td><td><strong>RAM<\/strong><\/td><td><strong>GPU VRAM<\/strong><\/td><td><strong>Storage<\/strong><\/td><td><strong>Best For<\/strong><\/td><\/tr><tr><td>Llama 3.2 Vision 11B on CPU<\/td><td>16 GB minimum<\/td><td>No GPU needed<\/td><td>8 GB free<\/td><td>Laptops, development, testing<\/td><\/tr><tr><td>Llama 3.2 Vision 11B on GPU<\/td><td>16 GB RAM<\/td><td>8 GB VRAM minimum<\/td><td>8 GB free<\/td><td>Faster inference on most modern laptops<\/td><\/tr><tr><td>Llama 3.2 Vision 90B on GPU<\/td><td>64 GB RAM<\/td><td>24 GB VRAM minimum<\/td><td>55 GB free<\/td><td>Workstations, production applications<\/td><\/tr><tr><td>Llama 3.2 Vision 90B high performance<\/td><td>128 GB RAM<\/td><td>Dual RTX 4090 or A100<\/td><td>55 GB free<\/td><td>Enterprise-grade speed and accuracy<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>If you are on a modern laptop with 16 GB of RAM, the 11B model will work for development and testing. Expect slower responses on CPU-only setups, but the output quality remains strong.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How Visual RAG Pipelines Work: The Full Architecture Explained<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"636\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-1200x636.jpg\" alt=\"Infogarphic showing how visual RAG pipelines work .\" class=\"wp-image-105522\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-1200x636.jpg 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-300x159.jpg 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-768x407.jpg 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-1536x814.jpg 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-2048x1085.jpg 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/How-Visual-RAG-Pipelines-Work_-The-Full-Architecture-Explained-150x80.jpg 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p>Understanding what happens under the hood before writing code is what separates someone who can fix problems from someone who is completely lost when something goes wrong. The architecture is simpler than it sounds once you see it laid out clearly.<\/p>\n\n\n\n<p>A visual RAG pipeline runs in two phases. The indexing phase processes your documents and stores them so they can be searched. The retrieval and generation phase uses that index to find the right page and generate an answer when a user asks a question.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Here is the full pipeline from document to answer in plain steps:<\/p>\n\n\n\n<ul>\n<li><strong>Phase 1 (Document ingestion):<\/strong> Your PDF is loaded, and every page is converted into a high-resolution PNG image using pdf2image. This step is necessary because vision models process images, not raw PDF file formats.<\/li>\n\n\n\n<li><strong>Phase 2 (OCR text extraction):<\/strong> Tesseract OCR reads each page image and extracts all visible text. This text is stored alongside the image file path so both are available during the retrieval step.<\/li>\n\n\n\n<li><strong>Phase 3 (Embedding generation):<\/strong> The extracted text is embedded using a sentence transformer model called all-MiniLM-L6-v2, and each page image is embedded using CLIP. Both embeddings are stored in ChromaDB with metadata that links them back to their source page.<\/li>\n\n\n\n<li><strong>Phase 4 (Semantic retrieval):<\/strong> When a user asks a question, the question is embedded using the same text model. ChromaDB performs a similarity search to find the most relevant page. A second ranking step uses CLIP to confirm the retrieved page is also visually relevant, not just textually similar.<\/li>\n\n\n\n<li><strong>Phase 5 (Multimodal generation):<\/strong> The retrieved page image and the user&#8217;s question are passed together to Llama 3.2 Vision running locally via Ollama. The model reads both the image and the question, reasons across the visual content, and returns a grounded answer based on what it actually sees on that page.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Building Visual RAG Pipelines with Llama 3.2 Vision and Ollama Step by Step<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1200\" height=\"636\" src=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-1200x636.jpg\" alt=\"Building visual RAG pipelines with Llama 3.2 vision and Ollama .\" class=\"wp-image-105523\" srcset=\"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-1200x636.jpg 1200w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-300x159.jpg 300w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-768x407.jpg 768w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-1536x814.jpg 1536w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-2048x1085.jpg 2048w, https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/Building-Visual-RAG-Pipelines-with-Llama-3.2-Vision-and-Ollama-Step-by-Step-150x80.jpg 150w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" title=\"\"><\/figure>\n\n\n\n<p>Now that you understand the architecture, it is time to build. This section walks through every step, from installation to your first working visual question-and-answer query. Follow each step in order and run the verification checks before moving on to the next one.<\/p>\n\n\n\n<p>All commands in this guide are written in bold inline text. No code shell blocks, just clean instructions you can follow directly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Install Ollama and pull Llama 3.2 Vision<\/strong><\/h3>\n\n\n\n<p>Everything starts here. Ollama is what makes it possible to run Llama 3.2 Vision on your local machine without any cloud dependency. Getting this right first means everything else builds on a solid foundation.<\/p>\n\n\n\n<p>Think of it like plugging in and turning on your oven before you start cooking. Nothing else in the kitchen matters until you do that step correctly.<\/p>\n\n\n\n<p>Here is exactly how to install Ollama and pull the Llama 3.2 Vision model:<\/p>\n\n\n\n<ul>\n<li><strong>Download and install Ollama:<\/strong> Go to ollama.com, click Download, and install the version for your operating system. Ollama version 0.4.1 or higher is required for full Llama 3.2 Vision support. Earlier versions will not handle vision inputs correctly.<\/li>\n\n\n\n<li><strong>Pull the vision model:<\/strong> Open your terminal and run <strong>ollama pull llama3.2-vision<\/strong> to download the 11B model. It is approximately 7 gigabytes, so allow a few minutes depending on your connection speed.<\/li>\n\n\n\n<li><strong>Verify it is working:<\/strong> Run <strong>ollama run llama3.2-vision<\/strong> in your terminal, type a simple question, and confirm you get a sensible response before continuing.<\/li>\n\n\n\n<li><strong>Check model sizes:<\/strong> If you have the hardware, you can pull the larger model with <strong>ollama pull llama3.2-vision:90b<\/strong>. For most beginners, the 11B model is the right starting point.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Install All Required Python Libraries<\/strong><\/h3>\n\n\n\n<p>With Ollama running, the next step is installing every <a href=\"https:\/\/www.guvi.in\/blog\/what-is-a-python-library\/\">Python library<\/a> the pipeline depends on. Each one plays a specific role, and none of them is optional. Installing everything in one go avoids the frustrating experience of hitting a missing-library error halfway through a build.<\/p>\n\n\n\n<p>It is the same principle as unpacking all your ingredients before you start cooking. Finding out you are missing something halfway through is far more disruptive than checking upfront.<\/p>\n\n\n\n<p>Here is what to install and exactly why each library is needed:<\/p>\n\n\n\n<p><strong>pdf2image<\/strong> converts PDF pages into PNG images.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install pdf2image<\/code><\/pre>\n\n\n\n<p>This depends on Poppler, so install it separately for your OS:<\/p>\n\n\n\n<ul>\n<li>Mac: <code>brew install poppler<\/code><\/li>\n\n\n\n<li>Ubuntu: <code>sudo apt-get install poppler-utils<\/code><\/li>\n\n\n\n<li>Windows: download the binary from the official Poppler releases page<\/li>\n<\/ul>\n\n\n\n<p><strong>pytesseract<\/strong> is the Python wrapper for Tesseract OCR.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install pytesseract<\/code><\/pre>\n\n\n\n<p>Then install the Tesseract binary itself:<\/p>\n\n\n\n<ul>\n<li>Mac: <code>brew install tesseract<\/code><\/li>\n\n\n\n<li>Ubuntu: <code>sudo apt install tesseract-ocr<\/code><\/li>\n\n\n\n<li>Windows: download the installer from the Tesseract GitHub wiki and add its path to your system environment variables<\/li>\n<\/ul>\n\n\n\n<p><strong>sentence-transformers<\/strong> converts extracted page text into searchable vectors for ChromaDB.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install sentence-transformers<\/code><\/pre>\n\n\n\n<p><strong>chromadb<\/strong> sets up your local vector database. It runs fully in-process, so no separate server is needed for single-worker setups.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install chromadb<\/code><\/pre>\n\n\n\n<p><strong>transformers and torch<\/strong> give you access to the CLIP model for visual embedding generation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install transformers torch<\/code><\/pre>\n\n\n\n<p><strong>ollama<\/strong> is the Python client that lets your script send prompts and images to your locally running Ollama model.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install ollama<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Convert Your PDF Into High-Resolution Page Image<\/strong><\/h3>\n\n\n\n<p>This is the first real step of the indexing phase, and it surprises many beginners. Llama 3.2 Vision cannot process a raw PDF file. It needs images. So the very first thing you do to any document is convert every page into a PNG image.<\/p>\n\n\n\n<p>It is the same logic as scanning a physical document before feeding it to a machine reader. The scanner does not read the paper; it photographs it. That photograph is what the AI can actually work with and reason over.<\/p>\n\n\n\n<p><strong>Brain Teaser:<\/strong> <strong>Why convert PDFs to images instead of just extracting the text?<\/strong><\/p>\n\n\n\n<p>Because charts, tables, and diagrams carry meaning through layout, not just words. Extract a bar chart as text, and you get a list of disconnected numbers with no context. Keep it as an image, and everything stays intact.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Here is how to convert your PDF into searchable page images:<\/p>\n\n\n\n<p><strong>Import the library<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from pdf2image import convert_from_path<\/code><\/pre>\n\n\n\n<p><strong>Convert the PDF to images<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pages = convert_from_path(\"your_document.pdf\", dpi=200)<\/code><\/pre>\n\n\n\n<p>This loads every page as a high-resolution image object. A DPI of 200 gives Tesseract and Llama 3.2 Vision enough clarity to read small text and fine diagram details accurately.<\/p>\n\n\n\n<p><strong>Save each page as a PNG file<\/strong><\/p>\n\n\n\n<p>Loop through the <code>pages<\/code> list and save each one:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i, page in enumerate(pages):\n    page.save(f\"page_{i}.png\", \"PNG\")<\/code><\/pre>\n\n\n\n<p>Store every file path in a list so you can use them in later steps.<\/p>\n\n\n\n<p><strong>Verify the output visually<\/strong><\/p>\n\n\n\n<p>Open three or four of the saved PNG files and confirm they&#8217;re readable, properly oriented, and capturing the full content of each page before moving on.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Extract Text from Page Images Using Tesseract OCR<\/strong><\/h3>\n\n\n\n<p>With page images ready, Tesseract OCR now reads and extracts all visible text from each one. This text is what gets embedded into ChromaDB for keyword and semantic search during the retrieval phase.<\/p>\n\n\n\n<p>A common beginner question is why you need OCR at all if Llama 3.2 Vision can already read images. The answer is efficiency and scale. OCR creates searchable text, letting you retrieve only the one or two most relevant pages from a hundred-page document instead of passing every page to the vision model every time a question comes in.<\/p>\n\n\n\n<p>Here is how to run Tesseract OCR across all your page images:<\/p>\n\n\n\n<p><strong>Import the required libraries<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pytesseract\nfrom PIL import Image<\/code><\/pre>\n\n\n\n<p><strong>Extract text from a single page<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>text = pytesseract.image_to_string(Image.open(\"page_0.png\"))<\/code><\/pre>\n\n\n\n<p>This pulls all readable text from a page image as a plain string.<\/p>\n\n\n\n<p><strong>Store text alongside its page reference<\/strong><\/p>\n\n\n\n<p>Save each extracted text string with its image path in a structured format:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"page\": 0, \"text\": text, \"image_path\": \"page_0.png\"}<\/code><\/pre>\n\n\n\n<p>This keeps both easy to look up during retrieval.<\/p>\n\n\n\n<p><strong>Keep visually heavy pages in the index<\/strong><\/p>\n\n\n\n<p>Some pages have very little text because they&#8217;re mostly diagrams or charts. Don&#8217;t skip them. Keep their image paths in the index so CLIP can still embed and retrieve the visual content, even when OCR produces minimal text output.<\/p>\n\n\n\n<p><strong>Fun Fact:<\/strong> OCR error rates of 20 per cent or higher are still common in real-world documents, especially scanned ones with low resolution or unusual fonts. <\/p>\n\n\n\n<p>Using a high DPI setting of 200 or above when converting PDFs to images dramatically reduces these errors and improves downstream retrieval accuracy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Generate Text and Image Embeddings and Store Them in ChromaDB<\/strong><\/h3>\n\n\n\n<p>This is the most technically important step in the entire indexing phase. Embeddings are numerical representations of your content that capture meaning rather than just keywords. <\/p>\n\n\n\n<p>When you embed a sentence and an image that contain the same concept, both end up with similar numbers in the vector space. That similarity is what makes semantic search possible.<\/p>\n\n\n\n<p>Think of embeddings as translating your document into a language that a computer can compare instantly. A question about sales performance and a bar chart showing monthly revenue will end up numerically close, even though one is text and the other is an image.<\/p>\n\n\n\n<p>Here is how to generate embeddings and load your vector store:<\/p>\n\n\n\n<p><strong>Import your embedding models<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from sentence_transformers import SentenceTransformer\nfrom transformers import CLIPProcessor, CLIPModel<\/code><\/pre>\n\n\n\n<p><strong>Load them:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>text_model = SentenceTransformer(\"all-MiniLM-L6-v2\")\nclip_model = CLIPModel.from_pretrained(\"openai\/clip-vit-base-patch32\")<\/code><\/pre>\n\n\n\n<p><strong>Generate text embeddings<\/strong><\/p>\n\n\n\n<p>For each page, encode the OCR-extracted text into a vector that represents its semantic meaning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>text_embedding = text_model.encode(page_text).tolist()<\/code><\/pre>\n\n\n\n<p><strong>Generate image embeddings<\/strong><\/p>\n\n\n\n<p>Open each page image with PIL, run it through the CLIP processor and model, and extract the image features tensor. Convert this to a list for storage. Keep these image embeddings separately in a dictionary keyed by page ID, since you&#8217;ll need them for the visual re-ranking step.<\/p>\n\n\n\n<p><strong>Store everything in ChromaDB<\/strong><\/p>\n\n\n\n<p>Create a ChromaDB collection and add each page&#8217;s text embedding along with its image path and page number as metadata:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>collection.add(\n    embeddings=&#91;text_embedding],\n    documents=&#91;page_text],\n    metadatas=&#91;{\"image_path\": \"page_0.png\", \"page\": 0}],\n    ids=&#91;\"page_0\"]\n)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Retrieve the Most Relevant Page for a User Query<\/strong><\/h3>\n\n\n\n<p>The indexing phase is now complete. When a user asks a question, your pipeline needs to find the single most relevant page from the entire document before sending anything to Llama 3.2 Vision. This retrieval step is what keeps the system accurate and prevents the model from hallucinating answers.<\/p>\n\n\n\n<p>Good retrieval is the difference between an AI that gives you the right answer and one that confidently makes something up. The better your retrieval, the more grounded your final answer will be in content that actually exists in the document.<\/p>\n\n\n\n<p><strong>Brain Teaser:<\/strong> <strong>What happens if your retrieval step returns the wrong page? <\/strong><\/p>\n\n\n\n<p>Llama 3.2 Vision will generate an answer based on whatever image it receives. If that image is the wrong page, the answer will look confident but be completely wrong. This is why testing retrieval independently before connecting the model is so important.<\/p>\n\n\n\n<p>Here is how to build the retrieval step with hybrid text and visual ranking:<\/p>\n\n\n\n<p><strong>Embed the user&#8217;s question<\/strong><\/p>\n\n\n\n<p>Encode the question into the same vector format as your stored page embeddings:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query_embedding = text_model.encode(user_question).tolist()<\/code><\/pre>\n\n\n\n<p><strong>Search ChromaDB for the top matches<\/strong><\/p>\n\n\n\n<p>Retrieve the three pages whose text embeddings are most semantically similar to the question:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>results = collection.query(query_embeddings=&#91;query_embedding], n_results=3)<\/code><\/pre>\n\n\n\n<p><strong>Apply CLIP visual re-ranking<\/strong><\/p>\n\n\n\n<p>For each of the top three results, compute the cosine similarity between the CLIP text encoding of the question and the stored image embedding of that page. The page with the highest combined text and visual similarity score wins.<\/p>\n\n\n\n<p><strong>Extract the winning image path<\/strong><\/p>\n\n\n\n<p>Pull the image path from the metadata of the top-ranked result. This tells you exactly which page image to send to Llama 3.2 Vision in the next step.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>7. Generate an Answer Using Llama 3.2 Vision via Ollama<\/strong><\/h3>\n\n\n\n<p>This is the final step and the payoff for everything that came before it. You now have the user&#8217;s question and the most relevant page image. You pass both to Llama 3.2 Vision running locally via Ollama, and it generates a grounded, context-aware answer based on what it actually sees.<\/p>\n\n\n\n<p>The model is not guessing from its <a href=\"https:\/\/www.guvi.in\/blog\/training-data-vs-testing-data\/\">training data<\/a>. It looks at your actual document page and reasons from the real visual content in front of it. That is what makes visual RAG fundamentally different and more reliable than a standard LLM response.<\/p>\n\n\n\n<p>Here is how to run multimodal inference with Llama 3.2 Vision through Ollama:<\/p>\n\n\n\n<p><strong>Import the required libraries<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import ollama\nimport base64<\/code><\/pre>\n\n\n\n<p><strong>Encode the page image as base64<\/strong><\/p>\n\n\n\n<p>Convert the PNG file into a base64 string so it can be embedded in the API request:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>image_data = base64.b64encode(open(image_path, \"rb\").read()).decode(\"utf-8\")<\/code><\/pre>\n\n\n\n<p><strong>Build and send the multimodal prompt<\/strong><\/p>\n\n\n\n<p>Send both the question and the image to the model together:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>response = ollama.chat(\n    model=\"llama3.2-vision\",\n    messages=&#91;{\n        \"role\": \"user\",\n        \"content\": user_question,\n        \"images\": &#91;image_data]\n    }]\n)<\/code><\/pre>\n\n\n\n<p><strong>Extract and return the answer<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>answer = response&#91;\"message\"]&#91;\"content\"]<\/code><\/pre>\n\n\n\n<p>The answer will reference specific visual elements from the page, making it far more accurate than any text-only system could produce.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Common Errors and How to Fix Them<\/strong><\/h2>\n\n\n\n<p>This section saves beginners the most time. Every guide shows you the happy path. Almost none of them tell you what to do when something breaks. Here are the most common errors in visual RAG pipeline builds and exactly how to fix them.<\/p>\n\n\n\n<p>No setup goes perfectly the first time. Knowing what the error means and how to solve it is what turns a frustrating afternoon into a productive one.<\/p>\n\n\n\n<p>Here are the errors you are most likely to hit and how to resolve each one:<\/p>\n\n\n\n<ul>\n<li><strong>&#8220;TesseractNotFoundError&#8221; when running pytesseract:<\/strong> This means Python cannot find the Tesseract binary on your system. On Windows, <span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">add the Tesseract installation folder path (usually\u00a0<strong>C:\\Program Files\\Tesseract-OCR)<\/strong><\/span> to your system environment variables under Path. On Mac or Linux, verify the installation with <strong>which tesseract<\/strong> in your terminal and set the path explicitly in your script with <strong>pytesseract.pytesseract.tesseract_cmd = &#8220;\/usr\/bin\/tesseract&#8221;<\/strong>.<\/li>\n\n\n\n<li><strong>&#8220;Error: unable to find image&#8221; when calling Ollama:<\/strong> This usually means the base64 encoding step produced an empty or malformed string. Verify the image file path exists, and the file is not corrupted by opening it manually before encoding. Also confirm you are using Ollama version 0.4.1 or higher since earlier versions do not support vision inputs.<\/li>\n\n\n\n<li><strong>Blank or near-empty OCR output on some pages:<\/strong> This happens on pages that are predominantly visual with very little readable text. Do not try to fix this with OCR settings. Instead, make sure those pages still have their image paths stored in ChromaDB so CLIP can retrieve them visually even when text retrieval fails.<\/li>\n\n\n\n<li><strong>ChromaDB collection already exists error on restart:<\/strong> ChromaDB persists data to disk by default. When you restart your script, it tries to create a collection that already exists. Fix this by using <strong>client.get_or_create_collection(&#8220;your_collection_name&#8221;)<\/strong> instead of <strong>client.create_collection()<\/strong> so it reuses the existing collection rather than throwing an error.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><strong>Slow PDF conversion on large documents:<\/strong> pdf2image processes pages sequentially, which gets slow on documents with 50 or more pages. Speed this up by using Python&#8217;s multiprocessing library to convert multiple pages in parallel, or by processing and indexing the document once and saving the ChromaDB collection to disk so you never repeat the indexing step.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>A Complete Example Flow You Can Test Right Now<\/strong><\/h2>\n\n\n\n<p>Reading through steps is useful, but seeing the entire pipeline described from input to output makes everything concrete. Here is what a proper end-to-end test looks like and what a good response tells you about the health of your pipeline.<\/p>\n\n\n\n<p>Use a PDF that contains at least one chart, table, or diagram for your first test. A business annual report, a scientific paper, or a chemistry textbook page all work well. The goal is to ask a question whose answer exists only inside a visual element.<\/p>\n\n\n\n<p><strong>Here is the example test flow:<\/strong><\/p>\n\n\n\n<p>Load your PDF, convert it to images at 200 DPI, run Tesseract OCR on all pages, generate text and image embeddings for each page, store everything in ChromaDB, then ask the question: &#8220;What does the chart on the third page show, and what were the peak values?&#8221;<\/p>\n\n\n\n<p><strong>What a good visual RAG response looks like:<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>It names specific elements from the image:<\/strong> A reliable response mentions actual axis labels, data series names, percentage values, or time periods that are visibly present in the chart. Generic descriptions without specific numbers suggest poor retrieval or a low-resolution image.<\/li>\n\n\n\n<li><strong>It stays within the retrieved page:<\/strong> The answer should contain only information visible on the retrieved page. If the model starts discussing content from other parts of the document, your retrieval is returning the wrong page.<\/li>\n\n\n\n<li><strong>It connects the visual and text content together:<\/strong> The strongest answers combine what Tesseract extracted as caption text with what the model sees in the chart itself, producing a richer and more complete answer than either source alone could give.<\/li>\n\n\n\n<li><strong>It is honest about limitations:<\/strong> If the image resolution is too low for the model to read a specific value clearly, Llama 3.2 Vision will typically say so rather than guess. This is a good sign. Confident wrong answers indicate the model is hallucinating rather than grounding its response in the image.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Tips for Building Better Visual RAG Pipelines with Llama 3.2 Vision<\/strong><\/h2>\n\n\n\n<ul>\n<li><strong>Always use a DPI of 200 or higher when converting PDFs.<\/strong> Higher resolution gives Tesseract and Llama 3.2 Vision clearer images to work with and dramatically improves accuracy on small text and fine diagram details.<\/li>\n\n\n\n<li><strong>Store image paths in your ChromaDB metadata.<\/strong> Without this direct link from the stored embedding back to the image file, retrieved results cannot connect to the right page for Ollama inference.<\/li>\n\n\n\n<li><strong>Test retrieval independently before testing generation.<\/strong> Run several test queries against ChromaDB and confirm it returns the correct pages before connecting Llama 3.2 Vision. Bad retrieval produces bad answers regardless of model quality.<\/li>\n\n\n\n<li><strong>Use hybrid text and image re-ranking.<\/strong> Combining ChromaDB text similarity with CLIP visual similarity gives significantly better page retrieval on documents where charts and diagrams carry as much meaning as the surrounding text.<\/li>\n\n\n\n<li><strong>Keep Ollama updated to version 0.4.1 or higher.<\/strong> Vision model support requires at least this version. Running an older version will cause silent failures or unhelpful error messages when you include image inputs.<\/li>\n\n\n\n<li><strong>Start with the 11B model before attempting 90B.<\/strong> The 11B version handles most visual RAG tasks reliably and runs on standard hardware. Upgrade to 90B only if you are working on highly complex visual reasoning tasks and have the GPU resources to support it.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>That&#8217;s the whole point of visual RAG. Your documents stop being static files you dig through and start being something you can actually talk to, charts, tables, and all, without your data ever leaving your machine. The tools are free, the setup takes an afternoon, and once it&#8217;s running, you&#8217;ll wonder how you ever managed with plain text extraction. Go build something with it.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQs<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1788770411424\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">1. What is a visual RAG pipeline and do I need internet to run it?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It lets you query PDFs using Llama 3.2 Vision and Ollama. Internet is needed only for setup. After that, it runs fully offline.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1788770422527\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">2. Why do visual RAG pipelines convert PDF pages to images instead of extracting text?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Charts, tables, and diagrams carry meaning through layout, which plain text extraction destroys. Images keep that context intact.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1788770423837\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">3. What are the hardware requirements for running Llama 3.2 Vision and Ollama locally?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It depends on model size and workload. Check the Hardware Requirements section in this guide for specifics.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1788770424820\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">4. Can a visual RAG pipeline handle pages with little to no text, like charts or diagrams?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. Those pages stay indexed using image embeddings, so CLIP can retrieve them even when OCR extracts almost nothing.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1788770425578\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">5. What&#8217;s the role of ChromaDB in a visual RAG pipeline with Llama 3.2 Vision?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It&#8217;s the local vector database that stores each page&#8217;s text and image embeddings, so the pipeline can retrieve pages by meaning, not just keywords.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Want a system that can actually read your PDFs and answer questions about them, all without sending a single byte to the cloud? That&#8217;s exactly what a visual RAG pipeline with Llama 3.2 Vision and Ollama does. It turns your PDF pages into images, stores them in a local vector database, then pulls up the [&hellip;]<\/p>\n","protected":false},"author":64,"featured_media":105518,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[933,715],"tags":[],"views":"2537","authorinfo":{"name":"Abhishek Pati","url":"https:\/\/www.guvi.in\/blog\/author\/abhishek-pati\/"},"thumbnailURL":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/03\/Feature-image-1-1-300x116.jpg","_links":{"self":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/103215"}],"collection":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/comments?post=103215"}],"version-history":[{"count":14,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/103215\/revisions"}],"predecessor-version":[{"id":137632,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/103215\/revisions\/137632"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media\/105518"}],"wp:attachment":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media?parent=103215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/categories?post=103215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/tags?post=103215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}