Organize Downloads Automatically with Local AI
Краткое содержание
Pixel shares a project that uses Python watchdog and a local Ollama model to sort new Downloads files by reading their contents, not just their names. It extracts text from PDFs, images, TXT, and DOCX files, then moves them into matching folders while keeping private documents on the device.
DEV Community
Cansei de arrumar minha pasta Downloads: montei um "zelador" com IA local que faz isso por mim
Cansei de arrumar minha pasta Downloads: montei um "zelador" com IA local que faz isso por mim Depois de passar a semana inteira lidando com Active Directory, Entra ID e tickets de infraestrutura, no fim de semana eu gosto de resolver um problema bem mais egoísta: a minha própria bagunça digital. Minha pasta de Downloads virou, com o tempo, um cemitério de PDFs com nome documento (3).pdf, prints de tela chamados Captura de tela 2026-...png, planilhas, instaladores e boletos — tudo misturado, sem nenhuma lógica. Já tinha brincado antes de montar um assistente de IA local para outras coisas, então resolvi reaproveitar a mesma ideia para um problema bem mais mundano: um script que observa a pasta Downloads, entende (de verdade, lendo o conteúdo, não só o nome) o que cada arquivo é, e move ele para o lugar certo — sozinho, rodando o tempo todo em segundo plano, sem nada saindo da minha máquina. A ideia por trás do projeto O conceito não é novo — encontrei pelo menos três projetos de código aberto que fazem exatamente isso, usando a mesma combinação de peças: uma biblioteca Python chamada watchdog para vigiar a pasta[1], e um modelo de IA rodando localmente via Ollama para decidir a categoria de cada arquivo[2][3]. A ideia central é simples e elegante: O watchdog detecta quando um arquivo novo aparece na pasta. O script extrai um pedaço do conteúdo — texto de PDFs, OCR de imagens, texto puro de .txt/.docx. Esse conteúdo (mais o nome do arquivo) vai para um modelo de linguagem rodando local, via Ollama, pedindo para ele responder com uma categoria entre as que eu defini. O script cria a subpasta se não existir e move o arquivo. O detalhe que me convenceu a fazer isso localmente, e não com alguma IA de nuvem: boletos, comprovantes, documentos pessoais e prints de conversas privadas passam por esse pipeline todos os dias. Com Ollama, o texto extraído nunca sai da própria máquina — o modelo responde via uma API local, sem nenhuma chamada externa[4][5]. Montando a base: Ollama O primeiro passo é instalar o Ollama e baixar um modelo pequeno, que já é suficiente para esse tipo de classificação simples (não precisa de um modelo gigante para decidir se um PDF é "nota fiscal" ou "contrato"): # instala o Ollama (Linux/WSL)
curl -fsSL https://ollama.com/install.sh | sh
baixa um modelo leve, bom o suficiente para classificação de texto
ollama pull llama3.2:3b
Isso sobe um serviço local expondo uma API HTTP em http://localhost:11434, que qualquer script Python pode chamar com a biblioteca requests[4][5]. O "zelador": monitorando a pasta com watchdog A segunda peça é o watchdog, uma biblioteca Python que observa eventos do sistema de arquivos — criação, modificação, remoção — e dispara callbacks[1]. A estrutura básica de um observador é direta: from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
class NovoArquivoHandler(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
classificar_e_mover(event.src_path)
if name == "main":
handler = NovoArquivoHandler()
observer = Observer()
observer.schedule(handler, "/caminho/para/Downloads", recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Esse handler dispara classificar_e_mover sempre que um arquivo novo aparece. É aqui que a IA entra. A função que "pensa": classificar com o modelo local A função classificar_e_mover faz três coisas: extrai um pedaço do conteúdo (texto puro, ou pdftotext para PDF, ou OCR via pytesseract para imagem), monta um prompt curto pedindo uma resposta em categoria fixa, e chama a API local do Ollama: import requests, json, shutil, os
CATEGORIAS = ["Notas Fiscais", "Comprovantes", "Trabalho", "Contratos", "Imagens", "Outros"]
def classificar(nome_arquivo, trecho_conteudo):
prompt = f"""Classifique o arquivo abaixo em UMA destas c...

Powered by Readybot.io