<?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: joshita</title>
    <description>The latest articles on DEV Community by joshita (@joshita_913451df3988e7733).</description>
    <link>https://dev.to/joshita_913451df3988e7733</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%2F4157248%2Facd4346d-3f45-4d17-9ca4-5fe6459a22eb.png</url>
      <title>DEV Community: joshita</title>
      <link>https://dev.to/joshita_913451df3988e7733</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joshita_913451df3988e7733"/>
    <language>en</language>
    <item>
      <title>From Clutter to Calm: My Local AI File Butler</title>
      <dc:creator>joshita</dc:creator>
      <pubDate>Thu, 22 Oct 2026 15:45:14 +0000</pubDate>
      <link>https://dev.to/joshita_913451df3988e7733/from-clutter-to-calm-my-local-ai-file-butler-52g0</link>
      <guid>https://dev.to/joshita_913451df3988e7733/from-clutter-to-calm-my-local-ai-file-butler-52g0</guid>
      <description>&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;p&gt;My folders collect files with names like &lt;code&gt;scan0042.pdf&lt;/code&gt;, &lt;code&gt;untitled.txt&lt;/code&gt;, and &lt;code&gt;notes FINAL 2.pdf&lt;/code&gt;. Organising them means opening each file, figuring out what it contains, choosing a name, and moving it somewhere sensible.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Lazy File Butler&lt;/strong&gt; to handle the preparation.&lt;/p&gt;

&lt;p&gt;It reads files locally and uses an open-weight model to suggest descriptive filenames and categories. I can review the suggestions, edit anything that looks wrong, and approve only the files I want to organize.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose a folder → analyze → review and edit → organize → undo if needed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It supports text PDFs, scanned PDFs, screenshots, Word documents, and common text formats. Installers, archives, and media can be sorted by file type while keeping their original names.&lt;/p&gt;

&lt;p&gt;Nothing moves during analysis.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://youtu.be/ZjRkz4bUM4Q" rel="noopener noreferrer"&gt;Watch the Lazy File Butler demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app runs locally, so the video demonstrates the workflow without requiring access to my laptop.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/joshitapl/lazy-file-butler" rel="noopener noreferrer"&gt;View the source code on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project includes setup instructions, tests, and an MIT license for the application source.&lt;/p&gt;

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

&lt;p&gt;The AI naming engine uses &lt;strong&gt;Llama 3.2 1B through Ollama&lt;/strong&gt;, running on my laptop. The model receives extracted document text and proposes a filename, category, and explanation.&lt;/p&gt;

&lt;p&gt;The rest of the stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python and FastAPI&lt;/strong&gt; for the local application server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyMuPDF&lt;/strong&gt; for PDF text extraction and page rendering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local OCR&lt;/strong&gt; through macOS text recognition where available, with Tesseract as a fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; for saved previews, cached results, and move history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML, CSS, and JavaScript&lt;/strong&gt; for the interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One early problem was that scanned PDFs produced no readable text. I added OCR and checks for later pages, so an empty opening page no longer immediately ends the analysis.&lt;/p&gt;

&lt;p&gt;The small model also made category mistakes. I added validation, retries for invalid or generic names, and consistency checks for obvious document-type conflicts. Corrected and OCR-based suggestions are marked for closer review.&lt;/p&gt;

&lt;p&gt;The model proposes changes; Python handles file operations. Before moving anything, the application checks file hashes, destination conflicts, and path boundaries. Undo restores original names and locations, but stops if a file has changed or its original location is occupied.&lt;/p&gt;

&lt;p&gt;There are &lt;strong&gt;22 automated regression checks&lt;/strong&gt; covering readers, validation, caching, file moves, and undo safeguards.&lt;/p&gt;

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

&lt;p&gt;A file organizer may need to read personal notes, bills, screenshots, and documents. Running an open-weight model locally means those contents do not need to be sent to a hosted inference provider.&lt;/p&gt;

&lt;p&gt;After installing the dependencies and model weights, the local workflow can run without an internet connection. There is no required per-call inference API fee, although hardware and electricity still have costs.&lt;/p&gt;

&lt;p&gt;I can inspect the prompts, change the categories, and choose another compatible installed model. I also kept the existing small model rather than making a larger download a requirement.&lt;/p&gt;

&lt;p&gt;For this project, local inference was a better fit than a hosted API because it lets the automation work directly with private files while keeping processing on the user's computer.&lt;/p&gt;

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

&lt;p&gt;Butler reduces the repetitive work of opening documents and deciding how to name and group them. I review one editable preview instead.&lt;/p&gt;

&lt;p&gt;For testing, I created a fictional student-project folder containing lecture notes, an invoice, a scanned exam paper, screenshots, code, an archive, and an audio file. This exercises both AI naming and ordinary file-type sorting.&lt;/p&gt;

&lt;p&gt;It is still a small-model tool: handwriting recognition and suggestions can be imperfect. That is why checking the extracted text, editing suggestions, and undoing changes are part of the main workflow.&lt;/p&gt;

&lt;p&gt;My interpretation of “Slow and Steady” is simple: let the computer do the tedious reading and proposing, while I keep the final say.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Lazy File Butler: Local AI for the Files I Keep Ignoring</title>
      <dc:creator>joshita</dc:creator>
      <pubDate>Thu, 22 Oct 2026 15:43:49 +0000</pubDate>
      <link>https://dev.to/joshita_913451df3988e7733/lazy-file-butler-local-ai-for-the-files-i-keep-ignoring-1522</link>
      <guid>https://dev.to/joshita_913451df3988e7733/lazy-file-butler-local-ai-for-the-files-i-keep-ignoring-1522</guid>
      <description>&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;p&gt;My folders collect files with names like &lt;code&gt;scan0042.pdf&lt;/code&gt;, &lt;code&gt;untitled.txt&lt;/code&gt;, and &lt;code&gt;notes FINAL 2.pdf&lt;/code&gt;. Organising them means opening each file, figuring out what it contains, choosing a name, and moving it somewhere sensible.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Lazy File Butler&lt;/strong&gt; to handle the preparation.&lt;/p&gt;

&lt;p&gt;It reads files locally and uses an open-weight model to suggest descriptive filenames and categories. I can review the suggestions, edit anything that looks wrong, and approve only the files I want to organize.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose a folder → analyze → review and edit → organize → undo if needed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It supports text PDFs, scanned PDFs, screenshots, Word documents, and common text formats. Installers, archives, and media can be sorted by file type while keeping their original names.&lt;/p&gt;

&lt;p&gt;Nothing moves during analysis.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://youtu.be/ZjRkz4bUM4Q" rel="noopener noreferrer"&gt;Watch the Lazy File Butler demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app runs locally, so the video demonstrates the workflow without requiring access to my laptop.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/joshitapl/lazy-file-butler" rel="noopener noreferrer"&gt;View the source code on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project includes setup instructions, tests, and an MIT license for the application source.&lt;/p&gt;

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

&lt;p&gt;The AI naming engine uses &lt;strong&gt;Llama 3.2 1B through Ollama&lt;/strong&gt;, running on my laptop. The model receives extracted document text and proposes a filename, category, and explanation.&lt;/p&gt;

&lt;p&gt;The rest of the stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python and FastAPI&lt;/strong&gt; for the local application server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyMuPDF&lt;/strong&gt; for PDF text extraction and page rendering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local OCR&lt;/strong&gt; through macOS text recognition where available, with Tesseract as a fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; for saved previews, cached results, and move history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML, CSS, and JavaScript&lt;/strong&gt; for the interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One early problem was that scanned PDFs produced no readable text. I added OCR and checks for later pages, so an empty opening page no longer immediately ends the analysis.&lt;/p&gt;

&lt;p&gt;The small model also made category mistakes. I added validation, retries for invalid or generic names, and consistency checks for obvious document-type conflicts. Corrected and OCR-based suggestions are marked for closer review.&lt;/p&gt;

&lt;p&gt;The model proposes changes; Python handles file operations. Before moving anything, the application checks file hashes, destination conflicts, and path boundaries. Undo restores original names and locations, but stops if a file has changed or its original location is occupied.&lt;/p&gt;

&lt;p&gt;There are &lt;strong&gt;22 automated regression checks&lt;/strong&gt; covering readers, validation, caching, file moves, and undo safeguards.&lt;/p&gt;

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

&lt;p&gt;A file organizer may need to read personal notes, bills, screenshots, and documents. Running an open-weight model locally means those contents do not need to be sent to a hosted inference provider.&lt;/p&gt;

&lt;p&gt;After installing the dependencies and model weights, the local workflow can run without an internet connection. There is no required per-call inference API fee, although hardware and electricity still have costs.&lt;/p&gt;

&lt;p&gt;I can inspect the prompts, change the categories, and choose another compatible installed model. I also kept the existing small model rather than making a larger download a requirement.&lt;/p&gt;

&lt;p&gt;For this project, local inference was a better fit than a hosted API because it lets the automation work directly with private files while keeping processing on the user's computer.&lt;/p&gt;

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

&lt;p&gt;Butler reduces the repetitive work of opening documents and deciding how to name and group them. I review one editable preview instead.&lt;/p&gt;

&lt;p&gt;For testing, I created a fictional student-project folder containing lecture notes, an invoice, a scanned exam paper, screenshots, code, an archive, and an audio file. This exercises both AI naming and ordinary file-type sorting.&lt;/p&gt;

&lt;p&gt;It is still a small-model tool: handwriting recognition and suggestions can be imperfect. That is why checking the extracted text, editing suggestions, and undoing changes are part of the main workflow.&lt;/p&gt;

&lt;p&gt;My interpretation of “Slow and Steady” is simple: let the computer do the tedious reading and proposing, while I keep the final say.&lt;/p&gt;

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