<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ayesha Siddiqa</title>
    <description>The latest articles on DEV Community by Ayesha Siddiqa (@ayesha_siddiqa_06).</description>
    <link>https://dev.to/ayesha_siddiqa_06</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4192431%2F89fc02b1-7ce3-4245-8ed4-6b1da7871521.png</url>
      <title>DEV Community: Ayesha Siddiqa</title>
      <link>https://dev.to/ayesha_siddiqa_06</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayesha_siddiqa_06"/>
    <language>en</language>
    <item>
      <title>Thooriga: Turning Endless Photo Searching into AI-Assisted Selection with Gemma</title>
      <dc:creator>Ayesha Siddiqa</dc:creator>
      <pubDate>Sun, 25 Oct 2026 13:29:19 +0000</pubDate>
      <link>https://dev.to/ayesha_siddiqa_06/thooriga-turning-endless-photo-searching-into-ai-assisted-selection-with-gemma-1gck</link>
      <guid>https://dev.to/ayesha_siddiqa_06/thooriga-turning-endless-photo-searching-into-ai-assisted-selection-with-gemma-1gck</guid>
      <description>&lt;h1&gt;
  
  
  My Friend Started a Bakery. I Built Thooriga with Gemma to Make Picking Photos Less of a Chore. 🎨
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The cake was ready. The Instagram post wasn't.
&lt;/h3&gt;

&lt;p&gt;A friend of mine recently started a small bakery.&lt;/p&gt;

&lt;p&gt;She enjoys experimenting with recipes, decorating cakes, and getting creative with her products. But running a small business also means handling all the little things that come afterward.&lt;/p&gt;

&lt;p&gt;One of them is &lt;strong&gt;choosing photographs for social media.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think about a Halloween cake promotion.&lt;/p&gt;

&lt;p&gt;You take a photograph from the front. Then another from the side. A close-up of the decorations. One with better lighting. Another where the background looks nicer.&lt;/p&gt;

&lt;p&gt;Before you know it, your gallery is full of slightly different photographs of the same cake.&lt;/p&gt;

&lt;p&gt;And now you have to pick the right ones.&lt;/p&gt;

&lt;p&gt;Not necessarily the sharpest ones, but the ones that actually work for what you're trying to post.&lt;/p&gt;

&lt;p&gt;Maybe you want to highlight the frosting details. Maybe you want a festive atmosphere. Or maybe you need enough empty space in the photograph to add some promotional text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem isn't that you don't know what you want.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's that you have to keep searching through photographs you've already taken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That small, repetitive frustration became the starting point for &lt;strong&gt;Thooriga&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Meet Thooriga
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Thooriga&lt;/strong&gt; is a &lt;em&gt;local-first, AI-powered photo-curation workspace&lt;/em&gt; that helps people find photographs matching a specific creative purpose.&lt;/p&gt;

&lt;p&gt;The name is inspired by the Tamil word &lt;strong&gt;தூரிகை (Thoorigai)&lt;/strong&gt;, meaning &lt;em&gt;paintbrush&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I liked that connection because a paintbrush doesn't decide what an artist creates. It's simply a tool that helps bring an idea to life.&lt;/p&gt;

&lt;p&gt;That's what I wanted Thooriga to be.&lt;/p&gt;

&lt;p&gt;Instead of asking AI to decide which photograph is objectively the best, &lt;strong&gt;you tell it what you're looking for.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Find photos that highlight the Halloween cake decorations, have a warm festive feel, and work well for my bakery's Instagram post."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thooriga assesses photographs against that request and organizes relevant candidates into an &lt;strong&gt;explainable shortlist&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Users can compare results, restore photographs that weren't shortlisted, change the order, and export the ones they actually want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI helps with the search. The creative decision stays with the person.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Who is it for?
&lt;/h3&gt;

&lt;p&gt;I started with the idea of helping &lt;strong&gt;small business owners&lt;/strong&gt;, especially people who handle their own product photography and social media.&lt;/p&gt;

&lt;p&gt;But I didn't want to build something that only works for bakeries.&lt;/p&gt;

&lt;p&gt;Thooriga can be used for different creative briefs, from showcasing handmade crochet details and café products to selecting festive photographs or finding an image suitable for a professional profile.&lt;/p&gt;

&lt;p&gt;The same photograph might be useful for one purpose and unsuitable for another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And that's the part I wanted the AI to understand.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Less Searching. More Creating.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo 🎬
&lt;/h2&gt;

&lt;h3&gt;
  
  
  From an Idea to a Working Application
&lt;/h3&gt;

&lt;p&gt;Here's &lt;strong&gt;Thooriga in action&lt;/strong&gt;, starting with a visual walkthrough of the idea and ending with a real demonstration of the application.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/A0boWQqooks" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1 — Concept Walkthrough:&lt;/strong&gt; A small bakery owner's struggle with photo selection and how Thooriga simplifies the process using AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 2 — Real Application Demo:&lt;/strong&gt; A screen recording of the actual Thooriga workspace, showcasing its photo-curation features and workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From endless scrolling to smarter shortlists — powered by Gemma 3.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How Thooriga Works
&lt;/h3&gt;

&lt;p&gt;The workflow is designed to be straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload&lt;/strong&gt; — Add photographs to a local collection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe&lt;/strong&gt; — Enter a creative brief and select the intended output format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze&lt;/strong&gt; — Gemma vision and image-processing techniques assess the photographs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shortlist&lt;/strong&gt; — Review ranked candidates, near-duplicate groups, explanations, and crop previews.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide&lt;/strong&gt; — Compare, select, reorder, and export the final photographs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application supports &lt;strong&gt;JPEG, PNG, and WebP&lt;/strong&gt;, with a default limit of &lt;strong&gt;15 photographs per collection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It also supports output formats including &lt;em&gt;Story, Square, Portrait, Carousel, Profile,&lt;/em&gt; and &lt;em&gt;Original&lt;/em&gt;, allowing users to consider how their photographs will be presented.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explore the Project
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/thooriga24/Thooriga" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/thooriga24/Thooriga/blob/main/docs/desktop.png" rel="noopener noreferrer"&gt;&lt;strong&gt;Desktop Workspace Screenshot&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/thooriga24/Thooriga/blob/main/docs/library.png" rel="noopener noreferrer"&gt;&lt;strong&gt;Photo Library Screenshot&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GitHub Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/thooriga24/Thooriga" rel="noopener noreferrer"&gt;&lt;strong&gt;github.com/thooriga24/Thooriga&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thooriga is an open-source project released under the &lt;strong&gt;MIT license&lt;/strong&gt;, with Gemma model weights downloaded separately under Google's applicable terms.&lt;/p&gt;

&lt;p&gt;The repository includes the React frontend, FastAPI backend, Gemma/Ollama integration, image-processing pipeline, ranking logic, tests, and setup documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started — Windows
&lt;/h3&gt;

&lt;p&gt;Thooriga combines a React frontend, FastAPI backend, and locally running Gemma 3 4B vision model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Windows 11, Python 3.12, Node.js 22+, Git, and Ollama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Clone the repository&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/thooriga24/Thooriga.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Thooriga&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Set up the project&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NoProfile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts\setup.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Download Gemma 3 4B&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gemma3:4b&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ensure Ollama is running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Start the backend&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NoProfile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts\start-backend.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Start the frontend&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In another PowerShell terminal, from the project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NoProfile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\scripts\start-frontend.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Open Thooriga&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Application:&lt;/strong&gt; &lt;a href="http://127.0.0.1:5173" rel="noopener noreferrer"&gt;http://127.0.0.1:5173&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API documentation:&lt;/strong&gt; &lt;a href="http://127.0.0.1:8000/docs" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository also provides &lt;code&gt;scripts/smoke_gemma.py&lt;/code&gt; for checking real Gemma vision inference using a public-domain sample photograph.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I wanted AI to understand the purpose, not just the pixels.
&lt;/h3&gt;

&lt;p&gt;One of the key ideas behind Thooriga is that &lt;strong&gt;the best photograph isn't always the most technically perfect one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A sharp product close-up might be ideal for showcasing intricate details, while a wider photograph with warm lighting and negative space might be more suitable for an advertisement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The difference is intent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why I built Thooriga around &lt;strong&gt;Gemma 3 4B&lt;/strong&gt;, a vision-capable open-weight model that can evaluate photographs in the context of a natural-language creative brief.&lt;/p&gt;

&lt;p&gt;Rather than sorting images solely by sharpness or resolution, Thooriga combines &lt;em&gt;multimodal AI with traditional computer vision&lt;/em&gt; to make shortlisting more purposeful.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tech Stack ⚙️
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React, TypeScript, Vite, Tailwind CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python, FastAPI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gemma 3 4B Vision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local Inference&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Processing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pillow, OpenCV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Response Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pydantic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pytest, Vitest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How the Pipeline Works
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Image Preparation
&lt;/h4&gt;

&lt;p&gt;FastAPI validates uploaded images, checks dimensions and formats, handles orientation, and creates temporary processing copies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original photographs remain unchanged.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Similarity Detection
&lt;/h4&gt;

&lt;p&gt;Thooriga uses &lt;strong&gt;OpenCV-based perceptual hashing&lt;/strong&gt; to identify near-duplicate images.&lt;/p&gt;

&lt;p&gt;This helps prevent a shortlist from being filled with almost identical photographs and encourages more useful variety.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Gemma-Powered Visual Understanding
&lt;/h4&gt;

&lt;p&gt;This is where open-weight AI becomes central to the application.&lt;/p&gt;

&lt;p&gt;The backend sends resized photographs, along with the user's creative brief, to &lt;strong&gt;Gemma 3 4B through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Gemma evaluates how well each photograph matches the requested purpose, considering visible content, composition, and relevant visual details.&lt;/p&gt;

&lt;p&gt;Its assessment contributes directly to the recommendation process rather than merely producing an image caption.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Explainable Ranking
&lt;/h4&gt;

&lt;p&gt;Thooriga combines Gemma's structured assessments with technical image characteristics through a weighted ranking system.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ranking Factor&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Creative-brief relevance&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual suitability&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;25%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crop compatibility&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image resolution&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pydantic&lt;/strong&gt; validates the structured model responses before they enter the ranking pipeline.&lt;/p&gt;

&lt;p&gt;The resulting &lt;em&gt;fit index&lt;/em&gt; organizes photographs according to the user's intended purpose, while near-duplicate handling helps diversify the shortlist.&lt;/p&gt;

&lt;p&gt;This is a measure of how well a photograph fits a brief, not an objective beauty rating.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Human Review and Export
&lt;/h4&gt;

&lt;p&gt;Once the recommendations are available, users remain in control.&lt;/p&gt;

&lt;p&gt;They can compare photographs, review explanations, restore lower-ranked images, manually reorder selections, and export their chosen collection as a ZIP.&lt;/p&gt;

&lt;p&gt;Exported copies have image metadata removed, while original files remain untouched.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Engineering Approach
&lt;/h3&gt;

&lt;p&gt;What interested me most was combining &lt;strong&gt;traditional computer vision with multimodal AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Image-processing algorithms are useful for measurable characteristics like resolution, similarity, and crop geometry.&lt;/p&gt;

&lt;p&gt;But understanding whether an image matches someone's creative intention requires more context.&lt;/p&gt;

&lt;p&gt;So I designed the pipeline around two complementary approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenCV + Pillow:&lt;/strong&gt; Image preparation, similarity detection, and technical analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 4B:&lt;/strong&gt; Purpose-aware visual assessments based on natural-language requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FastAPI connects these components, validates model responses, and organizes the results for the React interface.&lt;/p&gt;

&lt;p&gt;I also designed Thooriga around &lt;strong&gt;local-first processing&lt;/strong&gt;, allowing Gemma inference through Ollama without requiring a third-party hosted vision API.&lt;/p&gt;

&lt;p&gt;The entire workflow follows a simple pattern:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload → Describe → Analyze → Compare → Export&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing and Verification
&lt;/h3&gt;

&lt;p&gt;Testing covered image uploads, near-duplicate detection, crop calculations, model-response validation, ranking, collection management, and exports.&lt;/p&gt;

&lt;p&gt;The repository's October 24 verification recorded &lt;strong&gt;29 passing backend tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A later local smoke test also successfully returned a structured visual assessment using &lt;code&gt;gemma3:4b&lt;/code&gt; and a public-domain sample image.&lt;/p&gt;

&lt;p&gt;The result is a local photo-curation workspace that brings together image understanding, explainable recommendations, and human-controlled selection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My goal was simple: use AI for repetitive searching and analysis, while leaving creative decisions in human hands.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Because creativity shouldn't require giving up control over your photographs.
&lt;/h3&gt;

&lt;p&gt;Photographs can be personal.&lt;/p&gt;

&lt;p&gt;They might contain someone's home, family celebrations, unreleased products, private moments, or customer-related work.&lt;/p&gt;

&lt;p&gt;For Thooriga, I wanted &lt;strong&gt;local image processing&lt;/strong&gt; to be part of the design from the beginning.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Gemma 3 4B through Ollama&lt;/strong&gt; allows visual assessments to run on the user's own computer without requiring a hosted commercial vision API.&lt;/p&gt;

&lt;p&gt;That matters to me for three reasons.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy and Control
&lt;/h3&gt;

&lt;p&gt;Thooriga uses local FastAPI and Ollama endpoints.&lt;/p&gt;

&lt;p&gt;Once the model and dependencies are installed, users can process photographs locally without sending them to a remote inference provider.&lt;/p&gt;

&lt;p&gt;This gives the application a foundation for keeping sensitive photo processing on the user's computer, while still requiring responsible temporary-file handling and security practices.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. An Inspectable Pipeline
&lt;/h3&gt;

&lt;p&gt;The ranking rules, duplicate detection, processing logic, and export functionality are available in the source code.&lt;/p&gt;

&lt;p&gt;Developers can inspect how recommendations are produced, modify scoring rules, and experiment with improvements.&lt;/p&gt;

&lt;p&gt;That flexibility matters when building AI intended to support different creative preferences rather than impose one definition of the &lt;em&gt;best&lt;/em&gt; photograph.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Experimentation Without Per-Image API Pricing
&lt;/h3&gt;

&lt;p&gt;With the model installed locally, image inference doesn't require a hosted AI API payment for every photograph assessed.&lt;/p&gt;

&lt;p&gt;Local computing still uses processing time, memory, and electricity, but an open-weight approach gives developers direct control over how inference is integrated and optimized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For me, open innovation means having the flexibility to build AI around the user, rather than forcing the user to adapt to a closed AI service.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Lazy Payoff 🦥
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Less Scrolling, More Creating
&lt;/h3&gt;

&lt;p&gt;Running a small business already means juggling product creation, photography, marketing, and customer orders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spending extra time comparing dozens of similar product photographs shouldn't be another job.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thooriga tackles repetitive searching through &lt;strong&gt;Gemma 3 4B's vision-based analysis&lt;/strong&gt;, which evaluates each photograph against a natural-language creative brief.&lt;/p&gt;

&lt;p&gt;OpenCV-based perceptual hashing identifies near-duplicates, while the weighted ranking system combines AI relevance, suitability, crop compatibility, and resolution to organize relevant candidates.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly searching through the entire collection, business owners can focus on an &lt;strong&gt;explainable shortlist&lt;/strong&gt;, compare their favorites, and export the final selections.&lt;/p&gt;

&lt;p&gt;That's my take on the &lt;strong&gt;Slow and Steady&lt;/strong&gt; theme: finding smarter ways to handle repetitive work without automating away creativity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less time sorting. Smarter shortlists. More time building the business.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Gemma 3 4B&lt;/strong&gt; is the core vision model used for Thooriga's purpose-aware image assessments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluates photographs against natural-language creative briefs.&lt;/li&gt;
&lt;li&gt;Contributes directly to recommendation scoring.&lt;/li&gt;
&lt;li&gt;Runs locally through &lt;strong&gt;Ollama&lt;/strong&gt;, supporting the local-first design.&lt;/li&gt;
&lt;li&gt;Connects multimodal image understanding with an inspectable ranking pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma is a central part of Thooriga's photo-discovery workflow, not simply an optional chatbot feature.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;When I started building Thooriga, I wasn't trying to replace a photographer, an editor, or anyone's creative judgment.&lt;/p&gt;

&lt;p&gt;I was thinking about &lt;strong&gt;all the little tasks that take up our time without really adding anything to the creative process.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Someone spends hours baking and decorating a cake.&lt;/p&gt;

&lt;p&gt;Then takes photographs of it from every possible angle.&lt;/p&gt;

&lt;p&gt;And somehow, choosing just a few pictures to post becomes another task altogether.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's where I thought AI could help.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's what Hacktoberfest's &lt;em&gt;Slow and Steady&lt;/em&gt; theme means to me.&lt;/p&gt;

&lt;p&gt;Sometimes, being a little lazy isn't about avoiding work. It's about finding smarter ways to handle repetitive tasks so we can spend our energy on things that actually matter.&lt;/p&gt;

&lt;p&gt;With Thooriga, I wanted to make that small but frustrating task easier.&lt;/p&gt;

&lt;p&gt;Let AI help find the relevant photographs, while the person behind the camera decides which ones tell their story best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI doesn't always need to do the creative work for us. Sometimes, the best thing it can do is take care of the boring bits and let us get back to creating.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That's the kind of laziness I'm building for.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thooriga — Less Searching. More Creating.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/thooriga24/Thooriga" rel="noopener noreferrer"&gt;Thooriga on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Contributors:&lt;/strong&gt; &lt;a href="https://dev.to/divya_sree_r_"&gt;Divya Sree (@divya_sree_r_)&lt;/a&gt; and &lt;a href="https://dev.to/ayesha_siddiqa_06"&gt;Ayesha Siddiqa (@ayesha_siddiqa_06)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built for Hacktoberfest 2026 — Week 3: Slow and Steady.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>gemma</category>
    </item>
  </channel>
</rss>
