Add AI photo import via Ollama Vision

Users can upload a photo of a nail polish bottle; a background queue
job sends it to Ollama (llama3.2-vision at 192.168.30.172:11434),
extracts name, number and manufacturer, then creates the nail polish
and adds it to the user's collection automatically.

- ProcessNailPolishImage job (180s timeout, 2 tries)
- NailPolishImport model + migration (status tracking)
- AiSetting model + migration (Ollama URL + model, admin-configurable)
- NailPolishImportController: upload, status page (auto-refresh every 5s)
- Admin\AiSettingController: configure Ollama connection
- Views: drag-drop upload form, live status page, import history
- Navbar: "Foto importieren" link for all users
- Admin dropdown: "KI-Einstellungen"
- neonail-worker.conf: Supervisor config for the queue worker

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Housemann
2026-06-13 17:37:26 +02:00
co-authored by Claude Sonnet 4.6
parent 7a24e554b0
commit f715bc4552
15 changed files with 738 additions and 0 deletions
+8
View File
@@ -456,6 +456,12 @@
<i class="fas fa-industry me-1"></i>Hersteller
</a>
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('nail-polish-imports.*') ? 'active' : '' }}"
href="{{ route('nail-polish-imports.create') }}">
<i class="fas fa-camera me-1"></i>Foto importieren
</a>
</li>
@if(auth()->user()->isAdmin())
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle {{ request()->routeIs('admin.*') || request()->routeIs('nail-polishes.*') ? 'active' : '' }}"
@@ -474,6 +480,8 @@
<li><hr class="dropdown-divider" style="border-color:rgba(255,255,255,0.1);"></li>
<li><a class="dropdown-item" href="{{ route('admin.sso.show') }}">
<i class="fas fa-shield-alt me-2"></i>SSO-Konfiguration</a></li>
<li><a class="dropdown-item" href="{{ route('admin.ai.show') }}">
<i class="fas fa-robot me-2"></i>KI-Einstellungen</a></li>
</ul>
</li>
@endif