{"id":28386984,"url":"https://github.com/visualboy/ai-slicer","last_synced_at":"2025-06-26T19:32:30.413Z","repository":{"id":295968322,"uuid":"991844209","full_name":"VisualBoy/AI-Slicer","owner":"VisualBoy","description":"AI-Slicer è un assistente vocale Python progettato per semplificare e automatizzare il processo di slicing di modelli 3D utilizzando PrusaSlicer tramite la sua interfaccia a riga di comando. ","archived":false,"fork":false,"pushed_at":"2025-06-04T02:15:52.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-06T16:31:05.031Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VisualBoy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-28T08:27:57.000Z","updated_at":"2025-06-04T02:10:39.000Z","dependencies_parsed_at":"2025-05-28T10:18:19.785Z","dependency_job_id":"643fb958-fd2f-4856-9f75-0c710b5ef0ee","html_url":"https://github.com/VisualBoy/AI-Slicer","commit_stats":null,"previous_names":["visualboy/ai-slicer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VisualBoy/AI-Slicer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisualBoy%2FAI-Slicer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisualBoy%2FAI-Slicer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisualBoy%2FAI-Slicer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisualBoy%2FAI-Slicer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VisualBoy","download_url":"https://codeload.github.com/VisualBoy/AI-Slicer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VisualBoy%2FAI-Slicer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262132578,"owners_count":23264023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-30T16:12:01.542Z","updated_at":"2025-06-26T19:32:30.393Z","avatar_url":"https://github.com/VisualBoy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI-Slicer (assistente vocale per la stampa 3D) - Gemini Edition\n\n## Panoramica del Progetto\n\nAI-Slicer è un assistente vocale Python progettato per semplificare e automatizzare il processo di slicing di modelli 3D. Questa versione è stata aggiornata per utilizzare **Google Gemini API**. L'obiettivo è permettere all'utente di interagire con PrusaSlicer e risorse di rete locale usando comandi vocali in linguaggio naturale (italiano).\n\nL'assistente, chiamato \"Arturo\", utilizza:\n* **RealtimeSTT (con faster_whisper):** Per la trascrizione da parlato a testo (Speech-to-Text), con accelerazione GPU se disponibile.\n* **Google Gemini API (gemini-1.5-flash-latest):** Per la comprensione del linguaggio naturale (NLU), la gestione della conversazione e la decisione di chiamare funzioni specifiche (tools).\n* **PrusaSlicer Command Line:** Per eseguire materialmente le operazioni di slicing.\n* **Python:** Come linguaggio di programmazione principale, con librerie come `pygame` per l'audio (input), `python-dotenv` per la configurazione, `requests` per chiamate HTTP, `markdownify` per conversione HTML, e `subprocess` per lanciare PrusaSlicer.\n* **NOTA TTS:** Attualmente, le funzionalità Text-to-Speech (risposte vocali di Arturo) sono **disabilitate** a seguito della transizione a Gemini API. L'assistente fornirà risposte testuali.\n\n## Funzionalità Chiave Implementate\n\n* **Attivazione Vocale:** Risponde alla hotword \"Arturo\".\n* **Riconoscimento Vocale in Italiano:** Trasforma i comandi vocali in testo.\n* **Comprensione del Linguaggio Naturale (via Gemini):** Interpreta le richieste dell'utente.\n* **Interazione con PrusaSlicer CLI:**\n    * **Elenco File:** Può elencare i file `.stl`, `.3mf`, `.obj` da una cartella predefinita.\n    * **Slicing Modelli:** Può avviare lo slicing di un file specificato e generare il G-code.\n    * **Tentativo di Correzione Z=0:** Correzione automatica per l'errore \"no extrusions in the first layer\".\n* **Interazione con Risorse di Rete Locale (Nuova Funzionalità):**\n    * Utilizza la funzione `fetch_local_url_content` per recuperare contenuti testuali da URL sulla rete locale (es. stato stampante da OctoPrint, documentazione locale).\n* **Configurazione Tramite `.env`:** Gestione sicura di API key e percorsi.\n* **Gestione Preferenze:** Capacità di caricare, salvare e impostare preferenze di base.\n* **Integrazione OctoPrint:** Funzionalità di base per listare file, profili, avviare stampe e slicing tramite OctoPrint (utilizzando anche la nuova capacità di fetch URL per alcuni aspetti).\n\n## Setup e Installazione\n\n1.  **Clona il Repository**\n2.  **Crea un Ambiente Virtuale Python:**\n    ```bash\n    python -m venv .venv\n    source .venv/bin/activate  # Su Linux/macOS\n    .venv/bin/activate    # Su Windows\n    ```\n3.  **Installa le Dipendenze:**\n    ```bash\n    pip install -r requirements.txt\n    ```\n    (Assicurati che `requirements.txt` ora includa `google-generativeai`, `requests`, `markdownify`, `RealtimeSTT`, `faster_whisper`, `pygame`, `python-dotenv`, `rich` e `PyTorch` con supporto CUDA se usi la GPU).\n4.  **Configura PrusaSlicer:** Assicurati che PrusaSlicer sia installato.\n5.  **Configura Google Cloud e Gemini API:**\n    *   Abilita la Gemini API nel tuo progetto Google Cloud.\n    *   Assicurati di esserti autenticato tramite `gcloud auth application-default login` o imposta la variabile d'ambiente `GOOGLE_APPLICATION_CREDENTIALS`. In alternativa, puoi configurare la API key direttamente nel codice (non raccomandato per la sicurezza) o tramite la variabile `GEMINI_API_KEY` (se il codice in `assist.py` viene adattato per usarla esplicitamente con `genai.configure()`).\n6.  **Crea e Configura il File `.env`:**\n    Crea un file `.env` nella directory principale con le seguenti variabili:\n    ```dotenv\n    # GEMINI_API_KEY=\"la_tua_chiave_api_gemini\" # Opzionale, vedi punto sopra\n    PRUSA_SLICER_PATH=\"C:/Percorso/Completo/A/prusa-slicer-console.exe\"\n    STL_DEFAULT_FOLDER=\"C:/Percorso/Alla/Tua/Cartella/STL\"\n    # OCTOPRINT_URL e OCTOPRINT_API_KEY se si usa l'integrazione OctoPrint\n    ```\n7.  **(Opzionale) Configura GPU per Whisper.**\n\n## Utilizzo\n\nEsegui lo script `ai-slicer.py`:\n```bash\npython ai-slicer.py\n```\nAttendi il saluto testuale \"Ciao, sono Arturo. In cosa posso aiutarti?\" e poi interagisci usando la hotword \"Arturo\" (per input vocale) o digitando direttamente se la modalità silenziosa è attiva o l'input vocale non è configurato. Ricorda che le risposte di Arturo saranno testuali.\n\n**Comandi Esempio:**\n* \"Arturo, elenca i file.\"\n* \"Arturo, processa il file CUBO.stl.\"\n* \"Arturo, qual è lo stato della stampante su http://octoprint.local/api/job?\" (esempio per la nuova funzione)\n\n## Struttura del Progetto (File Principali)\n\n* `ai-slicer.py`: Script principale.\n* `assist.py`: Gestisce la comunicazione con l'API di **Google Gemini**, la cronologia della conversazione e la mappatura delle function calls (ora definite programmaticamente).\n* `tools.py`: Contiene l'implementazione Python delle funzioni che l'AI può chiamare (incl. `fetch_local_url_content`).\n* `shared_variables.py`: Gestisce variabili condivise tra thread.\n* `.env`: File di configurazione.\n* `preferences.json`: File per salvare le preferenze utente.\n* `requirements.txt`: Elenco delle dipendenze Python.\n*  `3D_objects`: Cartella di default per i modelli 3D.\n\n## Punti Chiave Discussi e Modifiche Apportate (Recenti)\n\n* **Migrazione da OpenAI a Google Gemini API.**\n* **Aggiunta Funzionalità \"Browser as a Tool\":** `fetch_local_url_content` per accedere a URL locali.\n* **Disabilitazione Temporanea TTS:** Le risposte vocali di Arturo sono momentaneamente sospese.\n* **Aggiornamento Dipendenze e Configurazione API.**\n\n## Roadmap\n\nPer le idee di sviluppo futuro e la roadmap dettagliata del progetto, si veda il file [ROADMAP.md](ROADMAP.md). (Considerare di aggiungere il ripristino di TTS alla roadmap).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisualboy%2Fai-slicer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvisualboy%2Fai-slicer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisualboy%2Fai-slicer/lists"}