Add ComfyUI models documentation and download script

- Complete MODELS.md with detailed model descriptions
- Interactive download script for 5+ specialized SDXL models
- Updated README with model selection guide
- Fix docker-compose volumes path (/root/ComfyUI)
- API workflows for OpenWebUI integration

Models documented:
- RealVisXL (portraits)
- Juggernaut XL (versatile)
- DreamShaper (art/fantasy)
- SDXL Lightning (fast)
- Proteus (realism)
This commit is contained in:
Folzo
2026-04-06 01:05:18 +02:00
parent ad2f7bb221
commit 97348e9a12
21 changed files with 23379 additions and 18 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,567 @@
<img src="https://r2cdn.perplexity.ai/pplx-full-logo-primary-dark%402x.png" style="height:64px;margin-right:32px"/>
# CONTEXTE TECHNIQUE
Je cherche à créer un assistant IA personnel qui utilise Open WebUI comme interface, Ollama pour l'inférence LLM, et AFFiNE comme base de connaissance/mémoire.
Infrastructure actuelle :
1. NAS Synology (192.168.1.25)
Open WebUI (container Docker, port 3000)
AFFiNE (container Docker, port 3010) avec PostgreSQL + Redis
Compose AFFiNE complet fonctionnel (affine, migration, postgres, redis)
2. PC Gamer (192.168.1.11)
Ollama (port 11434) avec modèles 14B paramètres (Qwen3-VL, Ministral, etc.)
Accessible via un WOL proxy (container sur NAS, port 3011) qui réveille le PC à la demande
3. WOL Proxy fonctionnel
Python/Flask sur NAS (192.168.1.25:3011)
Réveille le PC gamer automatiquement via Wake-on-LAN
Proxifie ensuite toutes les requêtes vers Ollama de manière transparente
Open WebUI configuré avec OLLAMA_BASE_URL=http://wol-proxy:3010
CONFIGURATION AFFINE ACTUELLE
text
services:
affine:
image: ghcr.io/toeverything/affine:stable
ports: ['3010:3010']
environment:
- AFFINE_COPILOT_ENABLED=true
- AFFINE_AI_PROVIDER=openai
- AFFINE_OPENAI_BASE_URL=http://192.168.1.10:11434 \# À modifier ?
- AFFINE_OPENAI_API_KEY=ollama
depends_on: [redis, postgres, affine_migration]
# + services redis, postgres, migration (fonctionnels)
OBJECTIF
Je veux que :
Open WebUI soit l'orchestrateur central (UI unique, gestion conversation, config assistant)
Ollama sur PC gamer fasse l'inférence (via WOL proxy pour économie énergie)
AFFiNE serve de base de connaissance persistante où l'assistant peut :
Rechercher dans mes documents/notes
Créer/modifier des notes automatiquement
Récupérer du contexte pour les conversations
Architecture souhaitée :
text
Utilisateur → Open WebUI (NAS) → WOL Proxy → Ollama (PC)
↓
[Tools]
↓
AFFiNE (NAS) ← GraphQL API
CONTRAINTES \& PRÉFÉRENCES
✅ Tout en Docker/Docker Compose sur le NAS (sauf Ollama sur PC)
✅ Solution simple et maintenable (pas de dépendances npm complexes si possible)
✅ Pas de duplication d'historique (Open WebUI = source de vérité)
✅ AFFiNE doit rester utilisable indépendamment (pas couplé à l'IA)
⚠️ J'ai essayé d'installer le package npm @dawncr0w/affine-mcp-server mais il n'existe pas dans le registre npm
QUESTIONS CONCRÈTES
Quelle est l'approche la plus robuste : MCP server + proxy HTTP, ou outil Python custom dans Open WebUI qui appelle directement l'API GraphQL d'AFFiNE ?
Comment configurer proprement l'intégration pour que le modèle LLM puisse faire du function calling vers AFFiNE (recherche, création docs, etc.) ?
Dois-je modifier l'URL Ollama dans AFFiNE (AFFINE_OPENAI_BASE_URL) pour qu'elle passe aussi par le WOL proxy ? Actuellement elle pointe directement sur le PC.
Peux-tu me fournir :
Le docker-compose.yml complet modifié (si ajout de services)
Le code de l'outil/intégration (Python, MCP config, etc.)
Les étapes de configuration dans Open WebUI
VERSION LOGICIELS
Open WebUI : 0.8.2
AFFiNE : stable (ghcr.io/toeverything/affine:stable)
Ollama : 0.16.1
IMPORTANT : Je préfère une solution qui minimise le nombre de conteneurs supplémentaires et qui soit facile à débugger. Si MCP est trop complexe, une intégration directe via GraphQL + Python dans Open WebUI me convient aussi.
Basé sur votre infrastructure et vos contraintes, je recommande **une intégration Python directe via GraphQL** plutôt que MCP, car c'est plus simple, maintenable et parfaitement adapté à votre cas.[^1_1][^1_2][^1_3]
## Approche recommandée : Outil Python Custom dans Open WebUI
Open WebUI supporte nativement le function calling via des **Tools** Python qui permettent au LLM d'appeler des fonctions externes. Cette approche évite d'ajouter des conteneurs supplémentaires et reste facilement débuggable.[^1_2][^1_3][^1_1]
### Architecture finale
```
Utilisateur → Open WebUI (NAS:3000) → Ollama (via WOL Proxy)
↓
[AFFiNE Tool]
↓
AFFiNE GraphQL API (NAS:3010)
```
## Solution complète
### 1. Docker Compose modifié
```yaml
services:
# Configuration AFFiNE existante
affine:
image: ghcr.io/toeverything/affine:stable
ports: ['3010:3010']
environment:
- AFFINE_COPILOT_ENABLED=true
- AFFINE_AI_PROVIDER=openai
# Modifier pour passer par le WOL proxy
- AFFINE_OPENAI_BASE_URL=http://wol-proxy:3011/v1
- AFFINE_OPENAI_API_KEY=ollama
depends_on: [redis, postgres, affine_migration]
networks:
- affine_network
postgres:
# Votre config existante
networks:
- affine_network
redis:
# Votre config existante
networks:
- affine_network
affine_migration:
# Votre config existante
networks:
- affine_network
# Configuration Open WebUI
open-webui:
image: ghcr.io/open-webui/open-webui:latest
ports: ['3000:8080']
environment:
- OLLAMA_BASE_URL=http://wol-proxy:3011
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
volumes:
- open-webui-data:/app/backend/data
networks:
- affine_network
# WOL Proxy existant
wol-proxy:
# Votre config existante
ports: ['3011:3011']
networks:
- affine_network
networks:
affine_network:
driver: bridge
volumes:
open-webui-data:
```
### 2. Tool Python pour Open WebUI
Créez un fichier `affine_tool.py` à importer dans Open WebUI:[^1_3]
```python
"""
title: AFFiNE Knowledge Base Tool
author: Your Name
version: 1.0.0
description: Interact with AFFiNE workspace for document search, creation, and retrieval
required_open_webui_version: 0.8.0
"""
import os
import requests
from typing import Optional, Callable, Any
from pydantic import BaseModel, Field
class Tools:
class Valves(BaseModel):
AFFINE_BASE_URL: str = Field(
default="http://affine:3010",
description="AFFiNE server base URL"
)
AFFINE_WORKSPACE_ID: str = Field(
default="",
description="Default workspace ID"
)
AFFINE_API_TOKEN: str = Field(
default="",
description="AFFiNE personal access token (optional)"
)
def __init__(self):
self.valves = self.Valves()
self.graphql_endpoint = None
def _get_endpoint(self):
"""Construire l'URL GraphQL"""
if not self.graphql_endpoint:
base = self.valves.AFFINE_BASE_URL.rstrip('/')
self.graphql_endpoint = f"{base}/graphql"
return self.graphql_endpoint
def _execute_graphql(self, query: str, variables: dict = None) -> dict:
"""Exécuter une requête GraphQL"""
headers = {"Content-Type": "application/json"}
# Ajouter le token si disponible
if self.valves.AFFINE_API_TOKEN:
headers["Authorization"] = f"Bearer {self.valves.AFFINE_API_TOKEN}"
payload = {"query": query}
if variables:
payload["variables"] = variables
try:
response = requests.post(
self._get_endpoint(),
json=payload,
headers=headers,
timeout=30
)
response.raise_for_status()
return response.json()
except Exception as e:
return {"error": str(e)}
def search_documents(
self,
search_query: str,
workspace_id: Optional[str] = None,
__event_emitter__: Callable[[dict], Any] = None
) -> str:
"""
Search for documents in AFFiNE workspace.
:param search_query: Text to search for in documents
:param workspace_id: Workspace ID (uses default if not provided)
:return: Search results with document titles and IDs
"""
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": f"Searching AFFiNE for: {search_query}", "done": False}
})
ws_id = workspace_id or self.valves.AFFINE_WORKSPACE_ID
query = """
query SearchDocs($workspaceId: String!, $query: String!) {
workspace(id: $workspaceId) {
docs {
id
title
createdAt
}
}
}
"""
result = self._execute_graphql(query, {
"workspaceId": ws_id,
"query": search_query
})
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": "Search completed", "done": True}
})
if "error" in result:
return f"Error searching documents: {result['error']}"
if "data" in result and result["data"].get("workspace"):
docs = result["data"]["workspace"]["docs"]
if docs:
response = f"Found {len(docs)} documents:\n"
for doc in docs[:10]: # Limiter à 10 résultats
response += f"- {doc['title']} (ID: {doc['id']})\n"
return response
return "No documents found matching your query."
return "Error retrieving search results."
def get_document_content(
self,
doc_id: str,
workspace_id: Optional[str] = None,
__event_emitter__: Callable[[dict], Any] = None
) -> str:
"""
Retrieve the content of a specific document.
:param doc_id: Document ID to retrieve
:param workspace_id: Workspace ID (uses default if not provided)
:return: Document content
"""
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": f"Retrieving document {doc_id}", "done": False}
})
ws_id = workspace_id or self.valves.AFFINE_WORKSPACE_ID
query = """
query GetDoc($workspaceId: String!, $docId: String!) {
workspace(id: $workspaceId) {
doc(id: $docId) {
id
title
content
updatedAt
}
}
}
"""
result = self._execute_graphql(query, {
"workspaceId": ws_id,
"docId": doc_id
})
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": "Document retrieved", "done": True}
})
if "error" in result:
return f"Error retrieving document: {result['error']}"
if "data" in result and result["data"].get("workspace", {}).get("doc"):
doc = result["data"]["workspace"]["doc"]
return f"# {doc['title']}\n\nLast updated: {doc['updatedAt']}\n\n{doc.get('content', 'No content available')}"
return "Document not found or error retrieving content."
def create_document(
self,
title: str,
content: str,
workspace_id: Optional[str] = None,
__event_emitter__: Callable[[dict], Any] = None
) -> str:
"""
Create a new document in AFFiNE workspace.
:param title: Title of the new document
:param content: Content of the document
:param workspace_id: Workspace ID (uses default if not provided)
:return: Created document ID and confirmation
"""
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": f"Creating document: {title}", "done": False}
})
ws_id = workspace_id or self.valves.AFFINE_WORKSPACE_ID
mutation = """
mutation CreateDoc($workspaceId: String!, $title: String!, $content: String!) {
createDoc(workspaceId: $workspaceId, title: $title, content: $content) {
id
title
}
}
"""
result = self._execute_graphql(mutation, {
"workspaceId": ws_id,
"title": title,
"content": content
})
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": "Document created successfully", "done": True}
})
if "error" in result:
return f"Error creating document: {result['error']}"
if "data" in result and result["data"].get("createDoc"):
doc = result["data"]["createDoc"]
return f"Successfully created document '{doc['title']}' with ID: {doc['id']}"
return "Error creating document."
def list_workspaces(
self,
__event_emitter__: Callable[[dict], Any] = None
) -> str:
"""
List all available workspaces.
:return: List of workspace names and IDs
"""
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": "Fetching workspaces", "done": False}
})
query = """
query {
workspaces {
id
name
createdAt
}
}
"""
result = self._execute_graphql(query)
if __event_emitter__:
__event_emitter__({
"type": "status",
"data": {"description": "Workspaces retrieved", "done": True}
})
if "error" in result:
return f"Error listing workspaces: {result['error']}"
if "data" in result and result["data"].get("workspaces"):
workspaces = result["data"]["workspaces"]
if workspaces:
response = f"Available workspaces ({len(workspaces)}):\n"
for ws in workspaces:
response += f"- {ws['name']} (ID: {ws['id']})\n"
return response
return "No workspaces found."
return "Error retrieving workspaces."
```
### 3. Configuration dans Open WebUI
#### Étape A : Importer le Tool
1. Connectez-vous à Open WebUI (http://192.168.1.25:3000)
2. Allez dans **Workspace → Tools**
3. Cliquez sur **+ Create Tool**
4. Collez le code Python ci-dessus
5. Cliquez sur **Save**
#### Étape B : Configurer les Valves[^1_3]
1. Cliquez sur l'icône d'engrenage du tool **AFFiNE Knowledge Base**
2. Configurez les valeurs :
- `AFFINE_BASE_URL`: `http://affine:3010` (communication inter-conteneur)
- `AFFINE_WORKSPACE_ID`: Votre ID de workspace (à récupérer)
- `AFFINE_API_TOKEN`: Laissez vide pour l'instant
#### Étape C : Récupérer le Workspace ID[^1_4][^1_5]
Depuis le NAS, exécutez :
```bash
curl -X POST http://192.168.1.25:3010/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ workspaces { id name } }"}'
```
Copiez l'ID du workspace et mettez-le dans les Valves.
#### Étape D : Activer le Tool
1. Dans **Workspace → Models**, sélectionnez votre modèle Ollama
2. Cliquez sur l'icône crayon pour éditer
3. Scrollez jusqu'à **Functions**
4. Cochez **AFFiNE Knowledge Base Tool**
5. Cliquez sur **Save**
## Réponses aux questions
### 1. Approche la plus robuste
**Python Tool directement dans Open WebUI** est supérieure à MCP dans votre cas car:[^1_6][^1_3]
- Pas de conteneur supplémentaire
- Débugage simple (logs Python natifs)
- Configuration unifiée dans Open WebUI
- Le package npm `@dawncr0w/affine-mcp-server` existe mais nécessite Node.js + conteneur dédié[^1_7][^1_5]
### 2. Configuration function calling
Le code fourni utilise les **Sphinx-style docstrings** qu'Open WebUI convertit automatiquement en spécifications de tools pour le LLM. Les paramètres typés permettent au modèle de comprendre comment appeler les fonctions.[^1_2][^1_3]
### 3. URL Ollama dans AFFiNE
**Oui, modifiez-la** pour utiliser le WOL proxy. Changez :[^1_1]
```yaml
- AFFINE_OPENAI_BASE_URL=http://wol-proxy:3011/v1
```
**Important** : Ajoutez `/v1` car AFFiNE attend une API compatible OpenAI. Votre WOL proxy doit donc exposer `/v1/chat/completions` (pattern standard Ollama).[^1_4]
## Avantages de cette solution
✅ **Un seul conteneur supplémentaire** : Open WebUI gère tout
✅ **Debugging facile** : Logs Python visibles dans Open WebUI
✅ **Pas de duplication** : Open WebUI reste la source de vérité
✅ **AFFiNE indépendant** : Fonctionne normalement sans l'IA
✅ **Économie d'énergie** : Le WOL proxy réveille le PC uniquement quand nécessaire
## Limitations et évolutions
- Les requêtes GraphQL ci-dessus sont des **exemples** : l'API réelle d'AFFiNE peut différer[^1_8][^1_9]
- Testez les requêtes manuellement avec `curl` avant de les intégrer
- Pour l'authentification avancée, générez un Personal Access Token via l'API GraphQL d'AFFiNE[^1_10][^1_11]
- Si vous avez besoin de capacités MCP plus tard, le projet `ivanuser/open-webui-mcp-connector` existe[^1_6]
Cette architecture vous permet de commencer simplement et d'étendre progressivement les fonctionnalités selon vos besoins.[^1_1][^1_3]
<span style="display:none">[^1_12][^1_13][^1_14][^1_15][^1_16][^1_17][^1_18][^1_19][^1_20][^1_21][^1_22][^1_23][^1_24][^1_25]</span>
<div align="center">⁂</div>
[^1_1]: https://github.com/open-webui/open-webui/discussions/11820
[^1_2]: https://github.com/open-webui/open-webui/discussions/3134
[^1_3]: https://docs.openwebui.com/tutorials/plugin/functions/
[^1_4]: https://lobehub.com/mcp/dawncr0w-affine-mcp-server
[^1_5]: https://github.com/dawncr0w/affine-mcp-server
[^1_6]: https://github.com/ivanuser/open-webui-mcp-connector
[^1_7]: https://playbooks.com/mcp/dawncr0w/affine-mcp-server
[^1_8]: https://deepwiki.com/toeverything/AFFiNE/3.1-server-and-api
[^1_9]: https://opendeep.wiki/toeverything/AFFiNE/integrating-external-app
[^1_10]: https://github.com/toeverything/AFFiNE/issues/13262
[^1_11]: https://glama.ai/mcp/servers/@DAWNCR0W/affine-mcp-server/tools/affine_generate_access_token
[^1_12]: https://www.reddit.com/r/OpenWebUI/comments/1jeqj9u/is_function_calling_possible_in_open_webui/
[^1_13]: https://www.youtube.com/watch?v=04h9XlOkhCE
[^1_14]: https://www.reddit.com/r/mcp/comments/1oqj7hp/affine_mcp_server_enables_interaction_with_affine/
[^1_15]: https://github.com/open-webui/open-webui/issues/2825
[^1_16]: https://dahvc-docs.colab.duke.edu/mcp/open-web-ui-and-mcpo.html
[^1_17]: https://github.com/open-webui/open-webui/discussions/1629
[^1_18]: https://mcpmarket.com/server/affine
[^1_19]: https://rainbowbreeze.it/openwebui-mcp-http/
[^1_20]: https://www.reddit.com/r/OpenWebUI/comments/1oqh3au/open_webui_now_supports_native_sequential_tool/
[^1_21]: https://docs.affine.pro/self-host-affine/install/upgrade
[^1_22]: https://developers.cloudflare.com/analytics/graphql-api/getting-started/authentication/api-token-auth/
[^1_23]: https://developers.openai.com/api/docs/guides/function-calling/
[^1_24]: https://community.retool.com/t/graphql-authorization-with-url-token/4638
[^1_25]: https://shyft.ai/mcp/dawncr0w-affine-mcp-server-github
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,187 @@
<img src="https://r2cdn.perplexity.ai/pplx-full-logo-primary-dark%402x.png" style="height:64px;margin-right:32px"/>
# Peux tu me conseiller et evaluer les solution possible pour repondre a ce cahier des charges stp :
"📋 CAHIER DES CHARGES - PROJET EFFI v2.0
Assistant IA Personnel Local avec Prise de Notes Intelligente
🎯 OBJECTIFS GÉNÉRAUX
Créer une assistante IA locale nommée Effi qui :
Gère automatiquement une base de connaissances personnelle (notes)
Connaît parfaitement Folzo et son contexte (vie pro + perso)
Prend des initiatives autonomes (noter, corriger, enrichir, résumer)
Recherche intelligemment dans la mémoire avec compréhension sémantique
Accessible partout (desktop + mobile) via reverse proxy sécurisé
💻 INFRASTRUCTURE EXISTANTE
Matériel disponible
PC Gaming : AMD Ryzen 5800X3D, 32GB RAM, AMD Radeon 7800XT 16GB VRAM
NAS Synology : hébergement applications, reverse proxy configuré, nom de domaine
Réseau : reverse proxy fonctionnel pour accès externe sécurisé
Stack actuelle à faire évoluer
Open WebUI (NAS:3000) → WOL Proxy (NAS:3011) → Ollama PC (11434)
└─ mcpo (NAS:8000) → siyuan-mcp → SiYuan (NAS:6806)
📝 BESOINS FONCTIONNELS - PRISE DE NOTES
Types de contenus à gérer
Vie Personnelle :
Organisation quotidienne (agenda, tâches)
To-do liste personnelle
Idées de voyages
Liste films/séries à regarder
Documentation tests IA et infrastructure perso
Journal personnel (optionnel)
Vie Professionnelle :
Suivi de projets (quelques projets actifs)
To-do liste professionnelle
Wiki personnel (aide-mémoires techniques, procédures)
Notes de réunions/échanges
Caractéristiques techniques requises
Format : Markdown pur (fichiers .md) → futur-proof et portable
Structure : flexible (pas encore d'habitudes établies)
Mobilité : accès desktop + mobile (iOS/Android) obligatoire​​
Synchronisation : temps réel ou quasi temps réel entre appareils
Sécurité : self-hosted, accessible via reverse proxy existant
projet "Effi - Assistante IA Personnelle Locale"
🤖 BESOINS FONCTIONNELS - INTERACTION IA
Niveau d'autonomie
Maximum souhaité avec confiance :
L'IA doit corriger automatiquement (orthographe, formulation, structure)
L'IA doit enrichir automatiquement (ajout contexte, liens entre notes)
L'IA doit créer des notes spontanément si échange pertinent détecté
L'IA doit proposer des améliorations visibles/validables
L'IA doit connaître profondément Folzo (préférences, projets, historique)
Workflows d'interaction
Mode 1 - Prise de note assistée (principal) :
Folzo écrit une note brute
Effi corrige/améliore en temps réel ou à la demande
Validation/ajustement par Folzo
Sauvegarde finale
Mode 2 - Capture automatique (autonome) :
Conversation Folzo ↔ Effi
Effi détecte information importante
Effi crée note automatiquement (avec notification)
Folzo peut consulter/modifier après
Mode 3 - Recherche sémantique :
Requête en langage naturel : "trouve mes problèmes Docker avec réseau"
Effi comprend contexte même sans mots-clés exacts
Résultats pertinents avec extraits contextuels
🔍 FONCTIONNALITÉS TECHNIQUES CRITIQUES
1. Recherche Avancée (RAG Sémantique)
Embeddings locaux pour recherche par sens, pas par mots-clés​
Modèle d'embedding : nomic-embed-text ou similaire (léger, performant)​
Vector store : Qdrant ou intégré à l'app de notes​
Compréhension contextuelle : "projets Docker réseau" = trouve notes avec "container networking issues", "bridge problems", etc.​
2. Mémoire Persistante Multi-Sessions
Historique complet conversations Folzo ↔ Effi accessible
Base de connaissances sur Folzo enrichie automatiquement
Contexte long-terme (projets en cours, préférences, historique décisions)
3. Synchronisation Multi-Devices
Desktop : Linux (Fedora/Bazzite) + Windows si nécessaire
Mobile : iOS/Android via app native
Sync method : self-hosted, temps réel, sans conflit​
4. Actions Autonomes
Auto-tagging intelligent des notes (par projet, type, urgence)
Détection automatique informations à noter
Résumés automatiques de conversations longues
Création daily notes automatique chaque matin
"
Oui — et avec ton infra actuelle, tu as déjà 70% du “socle” (Open WebUI ↔ Ollama + MCP ↔ SiYuan). Le point le plus délicat de ton cahier des charges n’est pas le RAG, c’est le trio **Markdown pur + sync multi-device fiable + IA qui écrit/modifie “autonomement”** sans casser la portabilité.
## Points de vigilance (ce qui va driver l’archi)
- “Markdown pur (fichiers .md)” et “sync temps réel sans conflit” poussent naturellement vers un vault de fichiers (type dossier Git/Sync) plutôt qu’une base interne.
- SiYuan est “local-first” et très bon en PKM, mais son stockage natif est en `.sy` (JSON), et le projet lui-même recommande *de ne pas* synchroniser via un disque de sync tiers (risque de corruption) et plutôt d’utiliser leurs mécanismes/export/import.[^1_1]
- Côté Open WebUI, tu as déjà un RAG intégré (upload/documents/knowledge bases) avec réglages de chunking, hybrid search (BM25 + rerank CrossEncoder), et une recommandation explicite d’augmenter le context length des modèles Ollama (8192+ voire 16000+) pour que le RAG soit réellement exploité.
## Solution A (recommandée): “Vault Markdown” + RAG/Qdrant + Agent d’écriture
Idée: tes notes restent des `.md` dans un dossier “vault” (futur-proof), synchronisé via un mécanisme fichier (Synology Drive / git / WebDAV/Nextcloud selon ton choix), et Effi opère dessus via un service “agent” qui (1) indexe en embeddings, (2) propose des PR/patchs, (3) applique automatiquement selon règles.
Évaluation vs cahier des charges
- Markdown pur: excellent (les `.md` sont la source de vérité).
- Sync mobile/desktop: excellent si tu choisis une techno de sync fiable pour fichiers.
- RAG sémantique: excellent avec embeddings locaux (nomic-embed-text) + Qdrant (ou équivalent) ; c’est un pattern très répandu en “local RAG”.[^1_2][^1_3]
- Autonomie/initiatives: très bon, mais il faut cadrer: je recommande un mode “propose → applique” par défaut + une liste blanche (daily note, auto-tag, correction orthographe), pour éviter de “réécrire” ton knowledge base de façon non désirée.
Où Open WebUI s’insère
- Open WebUI peut rester ton front-end chat + RAG interne pour des documents “uploadés”, mais pour ton “vault” il vaut mieux un pipeline dédié (indexation continue + Qdrant) et Open WebUI sert alors d’UI/agent.
- Tu peux aussi exploiter ses réglages RAG (chunking markdown headers, hybrid search, etc.) et surtout augmenter le context length des modèles Ollama côté Open WebUI pour améliorer les réponses RAG.
## Solution B: SiYuan comme base principale + MCP pour lecture/écriture
Idée: tu gardes SiYuan comme “source de vérité”, et Effi agit via siyuan-mcp (créer/modifier/rechercher). C’est la voie la plus directe avec ta stack actuelle.
Évaluation vs cahier des charges
- Mobile/desktop: très bon (apps iOS/Android, desktop, docker).[^1_1]
- IA autonome (créer notes, enrichir, lier): très bon via MCP (opérations programmatiques sur les notes).[^1_4]
- Markdown pur: moyen → SiYuan peut exporter en Markdown, mais sa donnée interne n’est pas un simple dossier `.md` et tu perds le “vault futur-proof” comme vérité unique.[^1_1]
- Sync self-hosted temps réel: dépend; SiYuan a ses propres mécanismes et services (une partie “cloud” est liée à une offre payante), et surtout il déconseille explicitement la sync via “sync disk” tiers.[^1_1]
Quand je la recommande
- Si tu privilégies “expérience PKM + mobile + édition riche” et que tu acceptes que le “Markdown pur” soit un format d’export, pas le stockage natif.[^1_1]
## Solution C: Open WebUI centré (RAG interne) + “knowledge bases” + MCP
Idée: tout passe par Open WebUI (knowledge bases/documents), et tu relies SiYuan (ou autre) via MCP.
Évaluation vs cahier des charges
- RAG: bon à très bon (hybrid search, chunking, citations).
- Mémoire multi-sessions: bon (historique de chats, et possibilité d’outiller la mémoire via MCP/serveur externe).
- Markdown pur + sync: faible si tu veux que l’état canonique soit un ensemble de fichiers `.md` synchronisés; Open WebUI est plutôt une couche “chat + docs indexés” qu’un gestionnaire de vault.
- Autonomie: dépend beaucoup des modèles et du “tooling”; Open WebUI distingue bien RAG “injecté” vs “tools on-demand” (File Context vs Builtin Tools), ce qui aide à contrôler l’agent.
Quand je la recommande
- Si tu veux une UX chat d’abord, et que la partie note-taking est secondaire ou déjà bien gérée ailleurs.
## Mon conseil concret (choix + prochaine étape)
1) Si “Markdown pur” est non négociable: pars sur **Solution A** (vault `.md` + sync fichiers) et utilise Open WebUI comme cockpit d’Effi, avec un service d’indexation (nomic-embed-text) + Qdrant.[^1_3][^1_2]
2) Si “mobile + PKM riche” est prioritaire et tu tolères un format interne: reste sur **Solution B** (SiYuan + MCP), en acceptant que l’export Markdown soit la portabilité.[^1_4][^1_1]
3) Dans tous les cas, règle tout de suite le “RAG quality floor”: augmente le context length côté modèles Ollama utilisés dans Open WebUI (sinon tu vas “récupérer” des infos que le modèle ne lira pas).
Question (pour trancher A vs B rapidement) : “Markdown pur” doit-il être **le stockage source de vérité** (un dossier de `.md`), ou un **format d’export** acceptable ?
<span style="display:none">[^1_10][^1_11][^1_12][^1_13][^1_14][^1_15][^1_5][^1_6][^1_7][^1_8][^1_9]</span>
<div align="center">⁂</div>
[^1_1]: https://github.com/open-webui/open-webui/discussions/16530
[^1_2]: https://www.elliotone.com/newsletter/2025-11-22-issue-3-local-rag-system-using-semantic-kernel-ollama-and-qdrant/
[^1_3]: https://gabrielmongeon.ca/en/2025/12/local-rag-ollama-litellm-qdrant/
[^1_4]: https://mcpmarket.com/server/siyuan
[^1_5]: https://terros.io/fr/blog/rag-guide-complet-2025
[^1_6]: https://openwebui.com/home
[^1_7]: https://blog.needle.app/p/enable-long-term-memory-in-any-llm
[^1_8]: https://docs.openwebui.com/features/chat-conversations/rag/
[^1_9]: https://www.reddit.com/r/OpenWebUI/comments/1k4e8jf/share_your_openwebui_setup_pipelines_rag_memory/
[^1_10]: https://www.juheapi.com/mcp-servers/onigeya/siyuan-mcp-server
[^1_11]: https://www.reddit.com/r/OpenWebUI/comments/1l9nkvk/im_the_maintainer_and_team_behind_open_webui_ama/
[^1_12]: https://github.com/uptonking/siyuan-go/
[^1_13]: https://gabrielmongeon.ca/2025/12/rag-local-ollama-litellm-qdrant/
[^1_14]: https://docs.openwebui.com/troubleshooting/rag/
[^1_15]: https://liuyun.io/article/1719212163338
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,847 @@
<img src="https://r2cdn.perplexity.ai/pplx-full-logo-primary-dark%402x.png" style="height:64px;margin-right:32px"/>
# je souhaite avoir de 'aide car je suis en train de creer une assistante ia Loca Effi. voici sa dexritpiton et son etat actuel :
"Objectifs avec Effi
Une assistante IA personnelle locale qui :
Retient les informations importantes sur Folzo, ses projets, ses préférences — de façon persistante entre les sessions
Note automatiquement les éléments importants des conversations dans SiYuan sans intervention manuelle
Recherche dans sa mémoire (SiYuan) avant de répondre pour avoir du contexte
Agit de façon semi-autonome — créer des notes, résumer des conversations, tenir un journal — sans que Folzo ait à tout déclencher explicitement
Architecture actuelle
text
Open WebUI (NAS:3000)
├─ Inférence → WOL Proxy (NAS:3011) → Ollama PC (11434)
│ Modèle : qwen2.5:14b
└─ Outils → mcpo (NAS:8000) → siyuan-mcp → SiYuan (NAS:6806)
15 outils : create, search, append, daily_note...
Limitations actuelles
Ce qu'Effi ne peut pas faire seule aujourd'hui :
❌ Noter automatiquement sans commande explicite — elle réagit, n'anticipe pas
❌ Accéder à l'historique des sessions passées d'Open WebUI
❌ Résumer plusieurs conversations d'un coup de façon fiable
⚠️ Function calling encore fragile sur demandes ambiguës ou multi-étapes — fiable uniquement sur commandes directes ("Note SiYuan : …")
Ce qui fonctionne :
✅ Créer/lire des notes sur commande directe
✅ Rechercher dans SiYuan avant de répondre
✅ Personnalité et contexte Effi en session"
comment je pourrais l'ameliorer, je suis pret a toute proposition tant que ca reste local (changer de llm, changer openwebui...)
Excellentes bases avec ton stack actuel ! Voici mes recommandations pour transformer Effi en assistante vraiment autonome :
## Améliorations du LLM
### Passer à un modèle plus performant
Le qwen2.5:14b est bon, mais pour du function calling fiable et du raisonnement multi-étapes, je te recommande :
- **Qwen2.5:32b** (si ton PC le supporte) : bien meilleur sur le function calling et les tâches complexes[^1_1][^1_2]
- **Qwen3:14b** (si disponible) : nouvelle génération avec meilleur function calling natif[^1_3][^1_4]
- **Hermes 2 Theta Llama 3** : spécialement optimisé pour les agents et les workflows agentiques, avec JSON natif[^1_5]
Le 32b quantizé en Q4_K_M serait un sweet spot : meilleur raisonnement qu'un 14b en Q5, même avec quantization plus agressive.[^1_2][^1_1]
## Architecture agentique autonome
### Option 1 : Remplacer Open WebUI par un framework agent
**LibreChat** avec n8n pour l'autonomie :[^1_6][^1_7]
- LibreChat comme interface (plus stable qu'Open WebUI selon la communauté )[^1_8]
- **n8n en backend** pour workflows autonomes : triggers temporels, webhooks, agents qui s'exécutent sans intervention[^1_9][^1_10][^1_11]
- n8n peut appeler Ollama directement et déclencher des actions dans SiYuan de façon scheduled
### Option 2 : Garder Open WebUI + ajouter une couche autonome
**MCP Memory Server avec auto-triggers** :[^1_12][^1_13]
- Remplace ton siyuan-mcp par **mcp-memory-server v2.0** qui a un système d'auto-trigger intégré
- Détecte automatiquement quand sauvegarder des infos importantes via keywords
- Fonctionne en parallèle de ton workflow actuel
**Architecture proposée** :
```
Open WebUI (conversations manuelles)
↓
n8n (orchestration autonome)
├─ Cron jobs : résumés quotidiens auto
├─ Webhook : écoute événements SiYuan
├─ Agent workflows : analyse conversations passées
└─ Ollama (PC) via WOL Proxy
↓
SiYuan (via MCP)
```
## Accès à l'historique Open WebUI
### Solution technique
Open WebUI stocke les conversations dans une base SQLite ou PostgreSQL. Tu peux :[^1_14]
1. **Créer un MCP server custom** qui lit directement la DB d'Open WebUI
2. **Utiliser n8n** pour exporter périodiquement les conversations vers SiYuan
3. **Script Python scheduled** : parse la DB → crée notes SiYuan automatiquement
Exemple de workflow n8n autonome :
- Trigger : tous les soirs à 23h
- Action 1 : lire nouvelles conversations Open WebUI (depuis DB)
- Action 2 : appeler Ollama pour résumer
- Action 3 : créer note dans SiYuan automatiquement
- Action 4 : tagger par projet/contexte
## Autonomie accrue
### Mécanismes à implémenter
**1. System prompts améliorés dans Open WebUI** :
```
Tu es Effi. Après chaque conversation :
- Identifie automatiquement les infos à retenir
- Crée une note SiYuan si pertinent
- Tag selon projet/contexte
```
**2. Agent n8n "Daily Note Manager"** :
- Crée automatiquement la daily note chaque matin
- Récupère events du jour
- Prépare contexte pour Effi
**3. Mem0 MCP Server** :[^1_15]
- Alternative moderne à ton setup actuel
- Mémoire persistante multi-sessions native
- Pipeline intelligent en 2 phases pour la mémoire
## Stack recommandé (100% local)
```
Frontend : LibreChat OU Open WebUI
↓
Orchestration : n8n (Docker sur NAS)
↓
LLM : Ollama PC (Qwen2.5:32b ou Hermes 2 Theta)
↓
Mémoire : SiYuan + MCP Memory Server v2
↓
Triggers autonomes : n8n cron + webhooks
```
## Actions concrètes prioritaires
1. **Tester Qwen2.5:32b** (Q4_K_M) pour améliorer le function calling
2. **Déployer n8n** sur ton NAS (via Docker Compose)[^1_9]
3. **Créer workflow n8n** : export conversations Open WebUI → SiYuan (automatique, quotidien)
4. **Installer mcp-memory-server** avec auto-triggers[^1_12]
5. **Améliorer system prompt** d'Effi pour qu'elle note systématiquement les infos importantes
Tu veux que je te détaille l'implémentation d'un de ces points en particulier (config n8n, migration vers 32b, ou setup du MCP memory server) ?
<span style="display:none">[^1_16][^1_17][^1_18][^1_19][^1_20][^1_21][^1_22][^1_23][^1_24][^1_25][^1_26][^1_27][^1_28][^1_29][^1_30]</span>
<div align="center">⁂</div>
[^1_1]: https://www.reddit.com/r/LocalLLaMA/comments/1g6fa24/how_good_are_the_new_14b_and_32b_qwen25_models/
[^1_2]: https://www.reddit.com/r/LocalLLaMA/comments/1hbpr41/which_one_to_chose_for_local_coding_purpose/
[^1_3]: https://blog.galaxy.ai/compare/qwen-2-5-coder-32b-instruct-vs-qwen3-14b
[^1_4]: https://blog.galaxy.ai/compare/qwen2-5-vl-32b-instruct-vs-qwen3-14b
[^1_5]: https://www.reddit.com/r/LocalLLaMA/comments/1cvputo/best_local_model_for_agents/
[^1_6]: https://budibase.com/blog/alternatives/open-webui/
[^1_7]: https://sliplane.io/blog/5-awesome-open-webui-alternatives
[^1_8]: https://www.reddit.com/r/selfhosted/comments/1ioqkjm/are_ollama_and_open_webui_the_best_selfhosted/
[^1_9]: https://dev.to/dalenguyen/free-self-host-ai-agent-workflows-with-n8n-and-cloudflare-tunnel-h5d
[^1_10]: https://www.youtube.com/watch?v=gyn8bcOLdcA
[^1_11]: https://github.com/n8n-io/n8n
[^1_12]: https://lobehub.com/mcp/pigrieco-mcp-memory-server
[^1_13]: https://lobehub.com/pl/mcp/pigrieco-mcp-memory-server
[^1_14]: https://selfh.st/weekly/2026-02-13/
[^1_15]: https://skywork.ai/skypage/en/A-Comprehensive-Guide-to-the-Mem0-MCP-Server-Building-AI-with-Persistent-Memory/1971044006807793664
[^1_16]: https://toolquestor.com/alternative/open-webui
[^1_17]: https://naileru.com/ia/locale/solutions-chat-open-source/
[^1_18]: https://getstream.io/blog/multiagent-ai-frameworks/
[^1_19]: https://www.reddit.com/r/opensource/comments/1jk37vi/selfhosted_ai_agents_that_run_100_locally/
[^1_20]: https://www.helicone.ai/blog/open-webui-alternatives
[^1_21]: https://botpress.com/blog/ai-agent-frameworks
[^1_22]: https://sliplane.io/de-de/blog/5-awesome-open-webui-alternatives
[^1_23]: https://www.reddit.com/r/ollama/comments/1mujr2l/help_me_out_in_selecting_a_good_framework_for_ai/
[^1_24]: https://qwen.ai/blog?id=6da44b4d3b48c53f5719bab9cc18b732a7065647\&from=research.research-list
[^1_25]: https://arxiv.org/html/2409.12186v2
[^1_26]: https://airank.dev/models/compare/qwen-2.5-14b-instruct-vs-qwen-2.5-coder-32b-instruct
[^1_27]: https://dev.to/lightningdev123/top-5-local-llm-tools-and-models-in-2026-1ch5
[^1_28]: https://www.reddit.com/r/LocalLLaMA/comments/1qwgyrn/best_deep_research_for_local_llm_in_2026/
[^1_29]: https://llm-stats.com/models/compare/qwen-2.5-14b-instruct-vs-qwen-2.5-coder-32b-instruct
[^1_30]: https://pinggy.io/blog/top_5_local_llm_tools_and_models/
---
# sur mon pc j'ai une 7800xt 16go vram, un 5800x3d et 32go de ram pour t'adeir a m'infdiquer quels sont les models les plus adaptés. J'ai aussi besoin d'un outil pour la prise de note et qu'il soit en lien avec l'IA. Je veux que m'on assitant m'aide a remplir celui-ci le corrige si besoin et va chercher les infos dedans si il en a besoin. mais je doit aussi pouvoir tout consulter comme il faut. N'hesite pas a me poser des question pour affiner mes besoins
Excellente config ! Avec 16GB VRAM, tu peux faire tourner des modèles jusqu'à **24B quantizés** confortablement. Avant de te proposer des solutions, quelques questions :[^2_1][^2_2]
## Questions pour affiner tes besoins
### Sur la prise de notes
1. **Structure préférée** : tu aimes plus un système de notes **hiérarchique** (dossiers/sous-dossiers), **en graphe** (liens entre notes, type Zettelkasten), ou **outliner** (listes/bullets imbriqués comme Logseq) ?
2. **Mobilité** : tu as besoin d'accéder à tes notes depuis ton téléphone/tablette, ou c'est principalement desktop ?
3. **Format des données** : tu veux tes notes en **Markdown pur** (fichiers .md lisibles partout) ou tu acceptes une **base de données** (plus puissant mais propriétaire) ?
4. **Usage principal** : c'est plutôt pour du **journaling quotidien**, de la **gestion de projets**, une **base de connaissances** (wiki personnel), ou un mix ?
### Sur l'interaction IA ↔ Notes
5. **Niveau d'autonomie souhaité** :
- L'IA doit **proposer** des corrections/ajouts et tu valides ?
- Ou elle peut **modifier directement** et tu revois après ?
6. **Fréquence d'utilisation** :
- Tu interagis avec l'IA **pendant** que tu prends des notes (en temps réel) ?
- Ou plutôt en **asynchrone** (tu notes, puis l'IA enrichit plus tard) ?
7. **Recherche sémantique** : tu veux pouvoir demander "trouve-moi toutes les notes sur mes projets Docker avec des problèmes de réseau" et que l'IA comprenne le contexte, même si tu n'as jamais utilisé exactement ces mots ?
## Recommandations préliminaires selon ta config
### Modèles LLM optimaux pour ta 7800XT
Avec 16GB VRAM, voici ce que tu peux faire tourner :[^2_2][^2_1]
| Modèle | Quantization | VRAM utilisée | Performance | Usage recommandé |
| :-- | :-- | :-- | :-- | :-- |
| **Qwen2.5:32b** | Q4_K_M | ~14-15GB | 85-95% qualité du full | **OPTIMAL** - meilleur function calling [^2_1] |
| **Qwen3:14b** | Q5_K_M | ~9-10GB | 95% qualité | Bon compromis vitesse/qualité |
| **Hermes 2 Theta Llama 3 70B** | Q3_K_M | ~15GB | Variable | Spécialisé agents mais grosse quantization |
| **Mistral Small 22B** | Q4_K_M | ~12-13GB | 90% qualité | Bon pour code et raisonnement |
**Mon conseil** : **Qwen2.5:32b en Q4_K_M** → meilleur équilibre function calling + raisonnement pour ton use case.[^2_1][^2_2]
### Applications de notes avec intégration IA native
Selon tes réponses, je t'orienterai vers l'une de ces solutions :
**Option 1 : Obsidian** (si tu veux flexibilité max)[^2_3][^2_4][^2_5]
- Fichiers Markdown purs, portables à vie
- Énorme écosystème de plugins IA (Copilot, Smart Connections, Local GPT)
- Graph view excellent pour visualiser les connexions
- Plugin MCP possible pour connexion directe avec Ollama
**Option 2 : SiYuan** (ce que tu utilises déjà)[^2_4][^2_5][^2_3]
- Block-based : chaque paragraphe est un objet manipulable
- Base de données intégrée → recherches rapides
- Self-hosted nativement sur ton NAS
- MCP déjà configuré → tu gardes ton stack actuel
- Moins de plugins qu'Obsidian mais plus structuré
**Option 3 : Blinko** (nouveau, spécialement conçu pour IA locale)[^2_6][^2_7]
- **Intégration RAG native** : l'IA cherche automatiquement dans tes notes via embeddings
- Auto-tagging par IA
- Génération de résumés automatiques
- Support Ollama direct
- Léger (Next.js) → parfait pour self-host sur ton NAS
- **C'est peut-être LA solution pour toi si tu veux du "AI-first"**
**Option 4 : Logseq** (si tu aimes l'outliner)[^2_5][^2_3][^2_4]
- Outliner natif (comme Roam Research)
- Daily notes et task management intégrés
- Fichiers Markdown locaux
- Plugins IA disponibles
## Ce que je te propose
Réponds aux 7 questions ci-dessus, et je te donnerai :
1. **La stack complète** (modèle LLM + app de notes + architecture d'intégration)
2. **La config Docker Compose** pour ton NAS
3. **Les workflows d'automatisation** (comment l'IA remplit/corrige/recherche automatiquement)
4. **Les system prompts adaptés** à ton outil de notes
En attendant, si tu veux tester rapidement : **Blinko semble fait pour ton cas d'usage** → RAG intégré + Ollama direct + léger. Tu peux le déployer en 5 min sur ton NAS et tester avec ton Qwen2.5:14b actuel avant de passer au 32b.[^2_7][^2_6]
Qu'en penses-tu ? Quelles sont tes réponses aux questions ?
<span style="display:none">[^2_10][^2_11][^2_12][^2_13][^2_14][^2_15][^2_8][^2_9]</span>
<div align="center">⁂</div>
[^2_1]: https://www.techreviewer.com/tech-specs/amd-rx-7800-xt-gpu-for-llms/
[^2_2]: https://gigachadllc.com/amd-radeon-rx-7800-xt-ai-benchmarks-breakdown/
[^2_3]: https://www.youtube.com/watch?v=Kbqzv7wUoro
[^2_4]: https://www.youtube.com/watch?v=v1FNc727toM
[^2_5]: https://www.youtube.com/watch?v=wjBdmgk6XR4
[^2_6]: https://noted.lol/blinko/
[^2_7]: https://www.xda-developers.com/obsidian-free-self-hosted-alternative-blinko/
[^2_8]: https://www.reddit.com/r/radeon/comments/1qnrfcu/rx_7800_xt_in_2026/
[^2_9]: https://pausehardware.com/classement-des-cartes-graphiques/
[^2_10]: https://univers-pc.fr/quelle-carte-graphique-choisir-en-2026-guide-complet/
[^2_11]: https://www.sitepoint.com/vram-requirements-70b-models-16gb-gpu-minimum-2026/
[^2_12]: https://dev.to/zackriya/best-self-hosted-ai-meeting-note-taker-app-open-source-2p9k
[^2_13]: https://versus.com/fr/amd-radeon-rx-7800-xt-vs-nvidia-geforce-rtx-5060-ti-16gb
[^2_14]: https://www.reddit.com/r/selfhosted/comments/1getg9o/note_app_with_ai_integration/?tl=ko
[^2_15]: https://www.reddit.com/r/LocalLLM/comments/1mzvkwo/should_i_get_an_rt_7800_xt_for_llms/
---
# pour les notes je ne sais pas trop, j'en prennais pas beaucoup jusqu'a maintenant mais je dois commencer a vraiement utiliser ce genre d'outil. J'ai trop de chose en tete il faut que j'organise et que je note tout ca. oui la mobilité est importante, il faut que j'y a acces partout. J'ai un nom de dommaine et un reverse proxy sur mon nas, alors je peux facilement ouvrir cette applicationd e note sur l'exterieur. je pense que la base de donne en md est plus imple et futur prouf. j'ai pas non plus besoin d'une base de donne pour le moment. pour l'usage s'est un mix vie perso et vie pro. Vie perso pour organiser ma vie quotidienne, mes rdv, ma to do liste mes idee de voyage mes films a regarder, mes test ia sur mon infrastucture perso, et pour le boulot c'est le suivi de quelques projet une to do liste un petit wiki perso ou je note des aides perso
L'ia doit etre le plus autonome possible et j'aimerais avoir confiance en elle et qu'elle me connaisse bien. La prise de note se ferai par moi principalement avec une correction/amelioration de l'ia, mais j'aimerais aussi que l'ia rajoute automatiquement des note de nos echange ia si c'est pertinant. "tu veux pouvoir demander "trouve-moi toutes les notes sur mes projets Docker avec des problèmes de réseau" et que l'IA comprenne le contexte, même si tu n'as jamais utilisé exactement ces mots ?" Clairement oui j'aimerai bien meme si je sais qu'une ia est limité.
Avec toute ces information peux tu me redigé un cahier des charge ou un plan pour que je note tout ca et que je n'ai pas besoin de le reecrire stp
Parfait, j'ai tout ce qu'il me faut ! Voici ton cahier des charges complet pour ton projet "Effi - Assistante IA Personnelle Locale".
***
# 📋 CAHIER DES CHARGES - PROJET EFFI v2.0
**Assistant IA Personnel Local avec Prise de Notes Intelligente**
***
## 🎯 OBJECTIFS GÉNÉRAUX
Créer une assistante IA locale nommée **Effi** qui :
1. Gère automatiquement une base de connaissances personnelle (notes)
2. Connaît parfaitement Folzo et son contexte (vie pro + perso)
3. Prend des initiatives autonomes (noter, corriger, enrichir, résumer)
4. Recherche intelligemment dans la mémoire avec compréhension sémantique
5. Accessible partout (desktop + mobile) via reverse proxy sécurisé
***
## 💻 INFRASTRUCTURE EXISTANTE
### Matériel disponible
- **PC Gaming** : AMD Ryzen 5800X3D, 32GB RAM, AMD Radeon 7800XT 16GB VRAM
- **NAS Synology** : hébergement applications, reverse proxy configuré, nom de domaine
- **Réseau** : reverse proxy fonctionnel pour accès externe sécurisé
### Stack actuelle à faire évoluer
```
Open WebUI (NAS:3000) → WOL Proxy (NAS:3011) → Ollama PC (11434)
└─ mcpo (NAS:8000) → siyuan-mcp → SiYuan (NAS:6806)
```
***
## 📝 BESOINS FONCTIONNELS - PRISE DE NOTES
### Types de contenus à gérer
**Vie Personnelle** :
- Organisation quotidienne (agenda, tâches)
- To-do liste personnelle
- Idées de voyages
- Liste films/séries à regarder
- Documentation tests IA et infrastructure perso
- Journal personnel (optionnel)
**Vie Professionnelle** :
- Suivi de projets (quelques projets actifs)
- To-do liste professionnelle
- Wiki personnel (aide-mémoires techniques, procédures)
- Notes de réunions/échanges
### Caractéristiques techniques requises
- **Format** : Markdown pur (fichiers .md) → futur-proof et portable[^3_1][^3_2]
- **Structure** : flexible (pas encore d'habitudes établies)
- **Mobilité** : accès desktop + mobile (iOS/Android) obligatoire[^3_3][^3_1]
- **Synchronisation** : temps réel ou quasi temps réel entre appareils[^3_4][^3_1]
- **Sécurité** : self-hosted, accessible via reverse proxy existant
***
## 🤖 BESOINS FONCTIONNELS - INTERACTION IA
### Niveau d'autonomie
**Maximum souhaité avec confiance** :
- L'IA doit **corriger automatiquement** (orthographe, formulation, structure)
- L'IA doit **enrichir automatiquement** (ajout contexte, liens entre notes)
- L'IA doit **créer des notes spontanément** si échange pertinent détecté
- L'IA doit **proposer des améliorations** visibles/validables
- L'IA doit **connaître profondément** Folzo (préférences, projets, historique)
### Workflows d'interaction
**Mode 1 - Prise de note assistée** (principal) :
1. Folzo écrit une note brute
2. Effi corrige/améliore en temps réel ou à la demande
3. Validation/ajustement par Folzo
4. Sauvegarde finale
**Mode 2 - Capture automatique** (autonome) :
1. Conversation Folzo ↔ Effi
2. Effi détecte information importante
3. Effi crée note automatiquement (avec notification)
4. Folzo peut consulter/modifier après
**Mode 3 - Recherche sémantique** :
- Requête en langage naturel : *"trouve mes problèmes Docker avec réseau"*
- Effi comprend contexte même sans mots-clés exacts[^3_5][^3_6][^3_7]
- Résultats pertinents avec extraits contextuels
***
## 🔍 FONCTIONNALITÉS TECHNIQUES CRITIQUES
### 1. Recherche Avancée (RAG Sémantique)
- **Embeddings locaux** pour recherche par sens, pas par mots-clés[^3_8][^3_6][^3_5]
- **Modèle d'embedding** : nomic-embed-text ou similaire (léger, performant)[^3_8]
- **Vector store** : Qdrant ou intégré à l'app de notes[^3_8]
- **Compréhension contextuelle** : "projets Docker réseau" = trouve notes avec "container networking issues", "bridge problems", etc.[^3_7]
### 2. Mémoire Persistante Multi-Sessions
- Historique complet conversations Folzo ↔ Effi accessible
- Base de connaissances sur Folzo enrichie automatiquement
- Contexte long-terme (projets en cours, préférences, historique décisions)
### 3. Synchronisation Multi-Devices
- **Desktop** : Linux (Fedora/Bazzite) + Windows si nécessaire
- **Mobile** : iOS/Android via app native
- **Sync method** : self-hosted, temps réel, sans conflit[^3_1][^3_4][^3_3]
### 4. Actions Autonomes
- Auto-tagging intelligent des notes (par projet, type, urgence)
- Détection automatique informations à noter
- Résumés automatiques de conversations longues
- Création daily notes automatique chaque matin
***
## 🛠️ ARCHITECTURE TECHNIQUE RECOMMANDÉE
### Stack Complète Proposée
```
┌─────────────────────────────────────────────────────────┐
│ FRONTEND │
│ Obsidian (Desktop + Mobile) OU Blinko (web app) │
│ ↓ sync via LiveSync (CouchDB) ou Syncthing │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ ORCHESTRATION │
│ n8n (NAS Docker) - Workflows autonomes │
│ ├─ Cron : daily notes, résumés auto │
│ ├─ Webhooks : détection nouvelles conversations │
│ └─ RAG pipeline : embeddings + search │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ LLM INFERENCE │
│ Ollama (PC) via WOL Proxy │
│ Modèle : Qwen2.5:32b (Q4_K_M) - 14-15GB VRAM │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ MÉMOIRE & EMBEDDINGS │
│ ├─ Notes : Obsidian vault (Markdown files) │
│ ├─ Embeddings : nomic-embed-text via LM Studio │
│ └─ Vector DB : Qdrant (Docker NAS) │
└─────────────────────────────────────────────────────────┘
```
### Composants Détaillés
#### **App de Notes : 2 options**
**Option A - Obsidian** (recommandé si tu veux écosystème mature) :[^3_2][^3_3][^3_1]
- ✅ Fichiers Markdown purs dans dossier local
- ✅ Apps mobiles natives (iOS/Android)
- ✅ Plugins IA nombreux (Smart Connections, Copilot, Local GPT)
- ✅ Sync self-hosted via LiveSync + CouchDB[^3_4][^3_1]
- ✅ Graph view pour visualiser connexions notes
- ⚠️ Setup sync initial un peu technique
**Option B - Blinko** (recommandé si tu veux simplicité + IA native) :[^3_9][^3_10][^3_11][^3_12]
- ✅ RAG intégré nativement (recherche sémantique built-in)[^3_10][^3_9]
- ✅ Support Ollama direct via API OpenAI-compatible[^3_10]
- ✅ Auto-tagging par IA natif
- ✅ Web app légère (Next.js) → accessible reverse proxy
- ✅ Apps mobiles PWA (fonctionne bien mobile)
- ⚠️ Moins mature qu'Obsidian (projet récent)
- ⚠️ Markdown mais stockage base de données (export possible)
#### **LLM : Qwen2.5:32b (Q4_K_M)**
- VRAM utilisée : ~14-15GB (confortable sur ta 7800XT)[^3_13][^3_14]
- Function calling fiable pour actions autonomes
- Raisonnement multi-étapes solide
- Alternative : Qwen3:14b si 32b trop lourd
#### **Embeddings : nomic-embed-text**
- Modèle léger (~500MB)[^3_8]
- Excellente qualité recherche sémantique
- Déployable via LM Studio sur NAS[^3_10][^3_8]
#### **Synchronisation**
**Pour Obsidian** :[^3_3][^3_1][^3_4]
- **LiveSync plugin** + CouchDB (Docker sur NAS)
- Sync temps réel desktop ↔ mobile
- Chiffrement bout-en-bout possible
**Pour Blinko** :[^3_12][^3_9]
- Web app accessible via reverse proxy
- PWA mobile (pas d'app native nécessaire)
- Sync automatique (architecture client-serveur)
***
## 📊 WORKFLOWS AUTONOMES (n8n)
### Workflow 1 : Capture Auto Conversations
**Trigger** : Webhook déclenché fin conversation Open WebUI
1. Récupérer conversation complète
2. Appeler Qwen2.5:32b pour analyse
3. Si pertinent → générer note Markdown
4. Sauvegarder dans vault Obsidian/Blinko
5. Notifier Folzo (optionnel)
### Workflow 2 : Daily Note Matinale
**Trigger** : Cron 7h00 chaque jour
1. Créer note quotidienne (template)
2. Récupérer météo Paris (optionnel)
3. Lister tâches en cours (depuis notes)
4. Résumer projets actifs
5. Sauvegarder dans vault
### Workflow 3 : Enrichissement Notes
**Trigger** : Cron 23h00 chaque jour
1. Scanner nouvelles notes journée
2. Détecter notes incomplètes/brouillons
3. Générer suggestions enrichissement
4. Créer note "Suggestions Effi" avec liens
### Workflow 4 : Backup \& Résumés Hebdo
**Trigger** : Cron dimanche 20h00
1. Backup complet vault
2. Générer résumé semaine (projets avancés)
3. Créer note hebdomadaire
4. Exporter stats (optionnel)
***
## 🔐 SÉCURITÉ \& ACCÈS
### Exposition externe
- **Reverse proxy** existant sur NAS (déjà configuré)
- **HTTPS** obligatoire avec certificat Let's Encrypt
- **Authentification** :
- Obsidian : chiffrement vault LiveSync
- Blinko : auth intégrée à l'app
- **Firewall** : limiter accès IP si possible (VPN Tailscale recommandé)
### Données sensibles
- **Toutes données restent locales** (NAS + PC)
- **Aucun cloud tiers** (respect vie privée)
- **Backups réguliers** vault notes (automatisé n8n)
***
## 📈 PHASES DE DÉPLOIEMENT
### Phase 1 - Fondations (Semaine 1)
1. ✅ Choisir app notes finale (Obsidian vs Blinko)
2. ✅ Déployer app sur NAS (Docker Compose)
3. ✅ Configurer sync desktop + mobile
4. ✅ Migrer notes SiYuan existantes si nécessaire
5. ✅ Tester accès reverse proxy
### Phase 2 - IA \& Embeddings (Semaine 2)
1. ✅ Installer Qwen2.5:32b Q4_K_M sur PC
2. ✅ Déployer LM Studio sur NAS pour embeddings
3. ✅ Configurer Qdrant (si Obsidian) ou RAG Blinko natif
4. ✅ Indexer notes existantes (créer embeddings)
5. ✅ Tester recherche sémantique
### Phase 3 - Autonomie (Semaine 3)
1. ✅ Déployer n8n sur NAS (Docker)
2. ✅ Créer workflow "Daily Note"
3. ✅ Créer workflow "Capture Conversations"
4. ✅ Configurer system prompt Effi v2
5. ✅ Tester boucle complète autonome
### Phase 4 - Optimisation (Semaine 4+)
1. ✅ Ajuster prompts selon comportements Effi
2. ✅ Créer templates notes récurrentes
3. ✅ Affiner triggers autonomes
4. ✅ Monitorer performance LLM
5. ✅ Itérer selon usage réel
***
## 🎯 CRITÈRES DE SUCCÈS
### Fonctionnels
- ✅ Effi crée ≥1 note pertinente/jour automatiquement
- ✅ Recherche sémantique trouve infos même avec mots différents
- ✅ Sync mobile fonctionne < 5 secondes délai
- ✅ Corrections orthographiques automatiques fiables
- ✅ Accès notes mobile fluide (< 2 sec chargement)
### Techniques
- ✅ Inference LLM < 30 tokens/sec (Qwen2.5:32b sur 7800XT)
- ✅ Recherche embeddings < 1 sec pour query
- ✅ Uptime services > 99% (NAS + PC via WOL)
- ✅ Backup automatique quotidien fonctionnel
- ✅ Zero perte données sur 1 mois test
### Subjectifs
- ✅ Folzo utilise naturellement notes quotidiennement
- ✅ Confiance en Effi pour corrections auto
- ✅ Réduction charge mentale (moins "à retenir")
- ✅ Plaisir d'utilisation interface notes
***
## 🛠️ STACK DOCKER COMPOSE (NAS)
### Services à déployer
```yaml
# À créer : docker-compose.yml sur NAS
services:
# App notes (choisir UN des deux)
# OPTION A - Blinko
blinko:
image: blinkoteam/blinko:latest
ports:
- "5555:5555"
volumes:
- ./blinko-data:/app/data
environment:
- OLLAMA_URL=http://nas-ip:3011 # Via WOL proxy
# OPTION B - CouchDB pour Obsidian LiveSync
couchdb:
image: couchdb:latest
ports:
- "5984:5984"
volumes:
- ./couchdb-data:/opt/couchdb/data
environment:
- COUCHDB_USER=admin
- COUCHDB_PASSWORD=[générer_mot_de_passe_fort]
# Orchestration autonome
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
volumes:
- ./n8n-data:/home/node/.n8n
environment:
- N8N_ENCRYPTION_KEY=[générer_clé]
# Vector DB pour RAG
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
volumes:
- ./qdrant-data:/qdrant/storage
# Embeddings (optionnel si LM Studio desktop)
lm-studio:
# Utiliser LM Studio desktop OU conteneur custom
```
***
## 📚 RESSOURCES \& RÉFÉRENCES
### Documentation technique
- Obsidian LiveSync : [GitHub vrtmrz/obsidian-livesync](https://github.com/vrtmrz/obsidian-livesync)[^3_1]
- Blinko : [Documentation officielle](https://docs.blinko.ai)[^3_9][^3_12]
- n8n Automation : [n8n.io/docs](https://n8n.io/docs)[^3_15]
- RAG Local : [Tutorial embeddings Qdrant](https://www.youtube.com/watch?v=JRLiZxjIr-o)[^3_8]
### Communauté \& Support
- r/selfhosted : support infrastructure
- r/ObsidianMD : si choix Obsidian[^3_16]
- r/LocalLLaMA : optimisation modèles[^3_5]
***
## ✅ PROCHAINES ÉTAPES IMMÉDIATES
### Décisions à prendre MAINTENANT
1. **Obsidian ou Blinko ?**
- Obsidian = écosystème mature, setup complexe
- Blinko = simplicité, IA native, moins features
2. **Tester Qwen2.5:32b** sur ton PC
```bash
ollama pull qwen2.5:32b-instruct-q4_K_M
ollama run qwen2.5:32b-instruct-q4_K_M
```
3. **Prototyper recherche sémantique**
- Installer LM Studio
- Charger nomic-embed-text
- Tester sur 10-20 notes brouillons
### Questions ouvertes pour toi
- Combien de notes par jour tu vises ? (pour dimensionner)
- Tu veux un système de tags/catégories prédéfini ou organique ?
- Préférence interface : minimaliste ou riche en features ?
***
**Prêt à démarrer ? Dis-moi quelle partie tu veux implémenter en premier et je te donne les commandes exactes ! 🚀**
<span style="display:none">[^3_17][^3_18][^3_19]</span>
<div align="center">⁂</div>
[^3_1]: https://www.reddit.com/r/selfhosted/comments/1eo7knj/guide_obsidian_with_free_selfhosted_instant_sync/
[^3_2]: https://www.stephanmiller.com/sync-obsidian-vault-across-devices/
[^3_3]: https://www.youtube.com/watch?v=J-YO7rn8ZEQ
[^3_4]: https://pinggy.io/blog/self_hosting_obsidian/
[^3_5]: https://www.reddit.com/r/LocalLLM/comments/1ct8kwv/suggestions_for_semantic_retrieval_of_my_markdown/
[^3_6]: https://dev.to/simranshaikh20_50/rag-semantic-search-12gd
[^3_7]: https://www.thinktecture.com/en/ai/improved-rag-more-effective-semantic-search-with-content-transformations/
[^3_8]: https://www.youtube.com/watch?v=JRLiZxjIr-o
[^3_9]: https://www.newsminimalist.com/articles/blinko-note-app-challenges-obsidian-with-ai-privacy-350370ec
[^3_10]: https://www.xda-developers.com/obsidian-free-self-hosted-alternative-blinko/
[^3_11]: https://toolquestor.com/vs/blinko-vs-obsidian
[^3_12]: https://noted.lol/blinko/
[^3_13]: https://www.techreviewer.com/tech-specs/amd-rx-7800-xt-gpu-for-llms/
[^3_14]: https://gigachadllc.com/amd-radeon-rx-7800-xt-ai-benchmarks-breakdown/
[^3_15]: https://github.com/n8n-io/n8n
[^3_16]: https://www.reddit.com/r/ObsidianMD/comments/1hrdbf7/what_are_your_selfhosted_syncing_options/
[^3_17]: https://www.youtube.com/watch?v=KVZmLjt270c
[^3_18]: https://www.reddit.com/r/selfhosted/comments/1nkkqbk/there_is_any_simple_way_to_self_host_obsidian/
[^3_19]: https://github.com/vrtmrz/obsidian-livesync/issues/385
+25 -3
View File
@@ -80,10 +80,32 @@ comfyui/
| Modèle | Taille | VRAM | Usage |
|--------|--------|------|-------|
| SDXL Base 1.0 | 6.9GB | 8-10GB | Usage général |
| SDXL Lightning | 6.9GB | 8-10GB | Génération rapide |
| RealVisXL | 6.9GB | 8-10GB | Photoréalisme |
| SDXL Lightning | 6.9GB | 8-10GB | Génération rapide (8 étapes) |
| RealVisXL V4.0 | 6.9GB | 8-10GB | Portraits ultra-réalistes |
| Juggernaut XL | 6.9GB | 8-10GB | Polyvalent |
| DreamShaper XL | 6.9GB | 8-10GB | Art/Fantasy |
### Commandes de téléchargement
### 📚 Documentation complète
Voir **[docs/MODELS.md](docs/MODELS.md)** pour :
- Description détaillée de chaque modèle
- Réglages optimaux par modèle
- Conseils de prompts
- Cas d'usage recommandés
### Téléchargement automatique (recommandé)
```bash
# Menu interactif avec tous les modèles
./download-more-models.sh
```
Ce script permet de :
- Télécharger un modèle spécifique
- Télécharger tous les modèles (~35GB)
- Voir les descriptions et conseils
### Commandes manuelles
```bash
# SDXL Base
+9 -15
View File
@@ -1,5 +1,6 @@
# ComfyUI avec ROCm pour RX 7800 XT
# Architecture: gfx1101 (Navi 32)
# CORRIGÉ: utilise /root/ComfyUI (pas /home/user/ComfyUI)
services:
comfyui:
@@ -9,25 +10,25 @@ services:
ports:
- "8188:8188"
volumes:
- ./models/checkpoints:/home/user/ComfyUI/models/checkpoints:Z
- ./models/vae:/home/user/ComfyUI/models/vae:Z
- ./models/loras:/home/user/ComfyUI/models/loras:Z
- ./output:/home/user/ComfyUI/output:Z
- ./input:/home/user/ComfyUI/input:Z
- ./custom_nodes:/home/user/ComfyUI/custom_nodes:Z
- ./workflows:/home/user/ComfyUI/workflows:Z
- ./models/checkpoints:/root/ComfyUI/models/checkpoints:Z
- ./models/vae:/root/ComfyUI/models/vae:Z
- ./models/loras:/root/ComfyUI/models/loras:Z
- ./output:/root/ComfyUI/output:Z
- ./input:/root/ComfyUI/input:Z
- ./custom_nodes:/root/ComfyUI/custom_nodes:Z
- ./workflows:/root/ComfyUI/workflows:Z
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
group_add:
- video
- render
environment:
- HIP_VISIBLE_DEVICES=0
- HSA_OVERRIDE_GFX_VERSION=11.0.1
- PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
- COMFYUI_PORT=8188
- COMFYUI_EXTRA_ARGS=--listen 0.0.0.0 --port 8188
privileged: true
security_opt:
- seccomp:unconfined
cap_add:
@@ -35,13 +36,6 @@ services:
shm_size: '8gb'
stdin_open: true
tty: true
deploy:
resources:
reservations:
devices:
- driver: amd
count: 1
capabilities: [gpu]
networks:
default:
+398
View File
@@ -0,0 +1,398 @@
# 🎨 Catalogue des Modèles SDXL pour ComfyUI
Guide complet des modèles disponibles avec réglages optimaux et cas d'usage.
---
## 📋 Table des matières
- [Installation des modèles](#installation-des-modèles)
- [Modèles Photoréalistes](#-modèles-photoréalistes)
- [Modèles Art/Stylisés](#-modèles-artstylisés)
- [Modèles Rapides](#-modèles-rapides)
- [Configuration OpenWebUI](#configuration-openwebui)
- [Conseils de prompts](#conseils-de-prompts)
---
## Installation des modèles
### Téléchargement rapide
```bash
# Lancer le script interactif
cd ~/Documents/OpenCode/Projets/Effi/comfyui
./download-more-models.sh
# Ou télécharger manuellement avec wget
wget -O models/checkpoints/NOM_DU_MODELE.safetensors \
"URL_DU_MODELE"
```
### Espace disque nécessaire
| Configuration | Taille | Usage VRAM |
|--------------|--------|-----------|
| 1 modèle | ~7 GB | 8-10 GB |
| 3 modèles | ~21 GB | 8-10 GB (1 à la fois) |
| Tous les modèles | ~35 GB | 8-10 GB (1 à la fois) |
**Note** : La VRAM utilisée reste la même quel que soit le nombre de modèles installés (on ne charge qu'un modèle à la fois).
---
## 📸 Modèles Photoréalistes
### 1. RealVisXL V4.0 ⭐ (Recommandé portraits)
**Fichier** : `RealVisXL_V4.0.safetensors`
**Description** : Le meilleur pour les portraits ultra-réalistes. Excellent rendu de la peau, des yeux et des détails faciaux.
**Cas d'usage** :
- Portraits professionnels
- Photos de personnes
- Headshots LinkedIn
- Retouches réalistes
**Réglages optimaux** :
```yaml
Étapes: 40-50
Guidance Scale (CFG): 7-8
Sampler: dpmpp_2m_sde
Résolution: 1024x1024 (portrait) ou 896x1152
```
**Prompts conseillés** :
```
# Portrait professionnel
professional photo of a person, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3
# Portrait détaillé
raw photo, detailed skin texture, professional lighting, sharp focus, 8k uhd, dslr
```
**Prompts négatifs** :
```
(worst quality, low quality, normal quality:2), blurry, (text, watermark, signature:1.5), deformed, mutated, disfigured
```
---
### 2. Juggernaut XL v9 ⭐ (Recommandé polyvalent)
**Fichier** : `Juggernaut-XL-v9.safetensors`
**Description** : Très polyvalent, excellent compromis entre qualité et vitesse. Fonctionne bien pour tous les types d'images.
**Cas d'usage** :
- Usage général
- Paysages
- Objets produits
- Concepts variés
**Réglages optimaux** :
```yaml
Étapes: 30-40
Guidance Scale (CFG): 7-8
Sampler: dpmpp_2m
Résolution: 1024x1024
```
**Prompts conseillés** :
```
# Paysage
beautiful landscape, mountains at sunset, dramatic clouds, cinematic lighting, 8k, highly detailed
# Produit
product photography, sleek modern laptop on wooden desk, professional lighting, commercial style
```
---
### 3. Proteus V0.4
**Fichier** : `ProteusV0.4.safetensors`
**Description** : Alternative à RealVisXL avec un excellent photoréalisme. Très bon pour la texture de la peau.
**Cas d'usage** :
- Portraits
- Mode/Fashion
- Architecture intérieure
**Réglages optimaux** :
```yaml
Étapes: 30-40
Guidance Scale (CFG): 6-7
Sampler: dpmpp_2m
Résolution: 1024x1024
```
**Prompts conseillés** :
```
raw photo, realistic, detailed skin texture, professional lighting, sharp focus, fashion photography
```
---
## 🎨 Modèles Art/Stylisés
### 4. DreamShaper XL 1.0 ⭐ (Recommandé art/fantasy)
**Fichier** : `DreamShaperXL1.0.safetensors`
**Description** : Excellent pour l'art numérique, les illustrations et la fantasy. Style artistique très marqué.
**Cas d'usage** :
- Art conceptuel
- Fantasy
- Illustrations
- Book covers
- Jeux vidéo assets
**Réglages optimaux** :
```yaml
Étapes: 30-40
Guidance Scale (CFG): 7-8
Sampler: dpmpp_2m
Résolution: 1024x1024 ou 1216x832 (paysage)
```
**Prompts conseillés** :
```
# Fantasy épique
epic fantasy scene, dragon flying over castle, dramatic lighting, highly detailed, digital art, artstation
# Art style
oil painting style, portrait of a wizard, mystical atmosphere, rich colors, masterpiece, 8k
# Illustration
children book illustration, cute forest animals, watercolor style, soft colors, whimsical
```
**Prompts négatifs** :
```
photograph, realistic, 3d render, photography, (text, signature, watermark:1.5), bad anatomy, bad proportions
```
---
### 5. SDXL Base 1.0 (Modèle de base)
**Fichier** : `sd_xl_base_1.0.safetensors`
**Description** : Le modèle officiel Stability AI. Très stable et prévisible. Bon point de départ.
**Cas d'usage** :
- Tests
- Benchmarks
- Usage général
**Réglages optimaux** :
```yaml
Étapes: 30-40
Guidance Scale (CFG): 7-8
Sampler: euler
Résolution: 1024x1024
```
---
## ⚡ Modèles Rapides
### 6. SDXL Lightning 8-step
**Fichier** : `sdxl_lightning_8step.safetensors`
**Description** : Génération ultra-rapide en seulement 8 étapes ! Qualité légèrement inférieure mais 4x plus rapide.
**Cas d'usage** :
- Tests rapides
- Prototypage
- Génération en masse
- Quand la vitesse est prioritaire
**⚠️ Réglages SPÉCIAUX obligatoires** :
```yaml
Étapes: 8 (OBLIGATOIRE - pas plus, pas moins)
Guidance Scale (CFG): 1.0-2.0 (IMPORTANT : garder bas)
Sampler: euler
Résolution: 1024x1024
```
**Prompts conseillés** :
```
# Fonctionne avec tous les styles
a beautiful landscape, mountains, sunset
a cute cat, sitting on a table
professional portrait of a person
```
**Note** : N'utilisez PAS de CFG élevé (7-8) avec ce modèle, ça détruit la qualité.
---
## 🔧 Configuration OpenWebUI
### Changement de modèle
1. **Admin Panel** → **Settings** → **Images**
2. Modifie le champ **"Modèle"** avec le nom exact du fichier :
- `RealVisXL_V4.0.safetensors`
- `Juggernaut-XL-v9.safetensors`
- `DreamShaperXL1.0.safetensors`
- `sdxl_lightning_8step.safetensors`
3. Sauvegarde
### Paramètres selon le modèle
| Modèle | Étapes | CFG | Usage |
|--------|--------|-----|-------|
| RealVisXL | 40-50 | 7-8 | Portraits |
| Juggernaut | 30-40 | 7-8 | Polyvalent |
| DreamShaper | 30-40 | 7-8 | Art/Fantasy |
| Lightning | 8 | 1-2 | Rapide |
---
## 💡 Conseils de Prompts
### Traduction automatique
**Important** : SDXL est entraîné principalement en **anglais**. Les prompts en français donnent des résultats imprévisibles.
**Solution** : Ajoutez dans le prompt système d'Effi :
```
# Génération d'images
- Traduire TOUJOURS les demandes d'image en anglais
- Exemple : "chat astronaute" → "cute cat astronaut in space suit"
- Ajouter des détails : style, éclairage, qualité
```
### Structure d'un bon prompt
```
[Sujet principal], [détails], [style], [éclairage], [qualité]
Exemple :
a cute orange cat wearing astronaut suit, fluffy fur, sitting on moon surface, earth in background, Pixar 3D style, soft cinematic lighting, highly detailed, 8k, masterpiece
```
### Prompts négatifs efficaces
**Générique (fonctionne pour tout)** :
```
(worst quality, low quality, normal quality:2), blurry, (text, watermark, signature:1.5), deformed, mutated, disfigured, bad anatomy, bad proportions
```
**Pour photoréalisme** :
```
painting, drawing, illustration, cartoon, anime, 3d render, cg, sketch, (text, signature, watermark:1.5)
```
**Pour art stylisé** :
```
photograph, realistic, 3d render, photography, (text, signature, watermark:1.5), bad anatomy
```
### Renforcer des mots-clés
Utilisez des parenthèses pour donner plus de poids :
- `((chat))` → poids x1.21
- `(((chat)))` → poids x1.33
- `(chat:1.5)` → poids x1.5
Exemple :
```
((cute cat)) astronaut, ((fluffy fur)), space suit, moon background
```
---
## 🖼️ Résolutions recommandées
| Format | Dimensions | Usage |
|--------|-----------|-------|
| Carré | 1024x1024 | Standard, polyvalent |
| Portrait | 832x1216 ou 896x1152 | Personnes, portraits |
| Paysage | 1216x832 ou 1152x896 | Paysages, scènes larges |
| Panoramique | 1344x768 | Paysages très larges |
**Note** : SDXL fonctionne mieux avec des multiples de 64.
---
## 🚀 Workflows avancés
### Img2img (Modification d'image)
Pour modifier une image existante, utilisez **l'interface ComfyUI directement** (pas OpenWebUI) :
1. Chargez une image avec le node **"Load Image"**
2. Connectez-la à un workflow img2img
3. Réglez le **denoise** :
- `0.3-0.4` : Légères modifications (style, couleurs)
- `0.5-0.6` : Modifications modérées
- `0.7-1.0` : Transformations majeures
### Utiliser le VAE séparé
Pour de meilleures couleurs avec tous les modèles :
1. Téléchargez le VAE : `./download-more-models.sh` → option 7
2. Dans le workflow ComfyUI, utilisez le node **"Load VAE"**
3. Connectez-le au node **"VAEDecode"**
---
## 📊 Comparaison rapide
| Besoin | Modèle recommandé | Pourquoi |
|--------|------------------|----------|
| Portrait photo réaliste | **RealVisXL** | Meilleur rendu peau |
| Usage quotidien | **Juggernaut XL** | Polyvalent, stable |
| Art/Fantasy | **DreamShaper** | Style artistique |
| Tests rapides | **Lightning** | 4x plus rapide |
| Premier essai | **SDXL Base** | Stable, prévisible |
---
## 🆘 Dépannage
### Le modèle n'apparaît pas dans OpenWebUI
1. Vérifier le nom exact du fichier (sensible à la casse)
2. Redémarrer ComfyUI : `sudo docker restart comfyui`
3. Vérifier que le fichier est bien dans `models/checkpoints/`
### Images déformées/moches
- Augmenter les étapes (30 → 40)
- Vérifier le CFG (pas trop élevé avec Lightning)
- Améliorer le prompt avec plus de détails
- Utiliser des prompts négatifs
### Pas assez de VRAM
- Réduire la résolution (1024→896)
- Fermer Ollama temporairement : `docker stop ollama`
- Utiliser Lightning (moins gourmand)
### Images floues
- Augmenter les étapes
- Ajouter "sharp focus, highly detailed" au prompt
- Réduire le denoise en img2img
---
## 🔗 Ressources
- **CivitAI** : https://civitai.com (modèles communautaires)
- **HuggingFace** : https://huggingface.co/models (modèles officiels)
- **ComfyUI Examples** : https://comfyanonymous.github.io/ComfyUI_examples/
---
*Document mis à jour le 6 avril 2026*
*Pour Effi - Configuration RX 7800 XT*
+209
View File
@@ -0,0 +1,209 @@
#!/bin/bash
# Script de téléchargement des meilleurs modèles SDXL
# Pour ComfyUI avec RX 7800 XT
set -e
MODELS_DIR="$(dirname "$0")/models/checkpoints"
VAE_DIR="$(dirname "$0")/models/vae"
mkdir -p "$MODELS_DIR" "$VAE_DIR"
echo "🎨 Téléchargement des modèles SDXL recommandés"
echo "================================================"
echo ""
echo "Espace disque requis : ~25-35 GB au total"
echo ""
# Fonction de téléchargement avec barre de progression
download_model() {
local url=$1
local output=$2
local name=$3
local size=$4
if [ -f "$output" ]; then
echo "✓ $name déjà présent ($(du -h "$output" | cut -f1))"
return 0
fi
echo ""
echo "📥 Téléchargement de $name ($size)..."
echo " Destination: $output"
echo ""
wget --progress=bar:force -O "$output" "$url" 2>&1 | tail -f -n +6
if [ $? -eq 0 ]; then
echo "✓ $name téléchargé avec succès"
else
echo "✗ Erreur lors du téléchargement de $name"
rm -f "$output"
return 1
fi
}
# Menu de sélection
echo "Quels modèles souhaitez-vous télécharger ?"
echo ""
echo "=== MODÈLES PHOTORÉALISTES ==="
echo "1) RealVisXL V4.0 (6.9GB) - Portraits ultra-réalistes, peau détaillée"
echo "2) Juggernaut XL (6.9GB) - Polyvalent, excellent pour tout type d'image"
echo "3) Proteus XL (6.9GB) - Photoréalisme amélioré, excellente qualité"
echo ""
echo "=== MODÈLES ART/STYLISÉS ==="
echo "4) DreamShaper XL (6.9GB) - Art fantastique, peinture, illustration"
echo "5) SDXL Base 1.0 (6.9GB) - Modèle de base (déjà installé)"
echo ""
echo "=== MODÈLES RAPIDES ==="
echo "6) SDXL Lightning (6.9GB) - Génération 4x plus rapide, qualité légèrement inférieure"
echo ""
echo "=== VAE (Optionnel mais recommandé) ==="
echo "7) SDXL VAE (335MB) - Meilleure qualité de couleurs et détails"
echo ""
echo "=== INSTALLATION COMPLETE ==="
echo "8) Tout télécharger (⚠️ 35GB) - Tous les modèles ci-dessus"
echo ""
echo "0) Annuler"
echo ""
read -p "Votre choix (0-8): " choice
case $choice in
1)
echo ""
download_model \
"https://huggingface.co/SG161222/RealVisXL_V4.0/resolve/main/RealVisXL_V4.0.safetensors" \
"$MODELS_DIR/RealVisXL_V4.0.safetensors" \
"RealVisXL V4.0" \
"6.9GB"
echo ""
echo "💡 Conseil : Excellent pour les portraits et photos réalistes"
echo " Prompt tip: 'professional photo, 8k uhd, dslr, soft lighting'"
;;
2)
echo ""
download_model \
"https://huggingface.co/RunDiffusion/Juggernaut-XL-v9/resolve/main/Juggernaut-XL-v9.safetensors" \
"$MODELS_DIR/Juggernaut-XL-v9.safetensors" \
"Juggernaut XL v9" \
"6.9GB"
echo ""
echo "💡 Conseil : Très polyvalent, bon compromis qualité/vitesse"
echo " Prompt tip: Fonctionne bien avec tous les styles"
;;
3)
echo ""
download_model \
"https://huggingface.co/dathudehenry/ProteusV0.4/resolve/main/ProteusV0.4.safetensors" \
"$MODELS_DIR/ProteusV0.4.safetensors" \
"Proteus V0.4" \
"6.9GB"
echo ""
echo "💡 Conseil : Alternative à RealVisXL, excellent pour la peau"
echo " Prompt tip: 'raw photo, realistic, detailed skin texture'"
;;
4)
echo ""
download_model \
"https://huggingface.co/Lykon/DreamShaper/resolve/main/DreamShaperXL1.0.safetensors" \
"$MODELS_DIR/DreamShaperXL1.0.safetensors" \
"DreamShaper XL 1.0" \
"6.9GB"
echo ""
echo "💡 Conseil : Parfait pour l'art, la fantasy et les illustrations"
echo " Prompt tip: 'digital art, concept art, highly detailed, fantasy'"
;;
5)
echo ""
download_model \
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors" \
"$MODELS_DIR/sd_xl_base_1.0.safetensors" \
"SDXL Base 1.0" \
"6.9GB"
echo ""
echo "💡 Conseil : Modèle de base Stability AI, très stable"
;;
6)
echo ""
download_model \
"https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_8step.safetensors" \
"$MODELS_DIR/sdxl_lightning_8step.safetensors" \
"SDXL Lightning 8-step" \
"6.9GB"
echo ""
echo "💡 Conseil : Utilise seulement 8 étapes (au lieu de 30-40)"
echo " ⚠️ Configurez 'steps: 8' dans OpenWebUI pour ce modèle"
echo " Parfait pour les tests rapides !"
;;
7)
echo ""
download_model \
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/diffusion_pytorch_model.safetensors" \
"$VAE_DIR/sdxl_vae.safetensors" \
"SDXL VAE" \
"335MB"
echo ""
echo "💡 Conseil : Utilisez ce VAE avec tous les modèles SDXL pour de meilleures couleurs"
;;
8)
echo ""
echo "⚠️ Cela va télécharger ~35GB de modèles"
read -p "Êtes-vous sûr ? (oui/non): " confirm
if [ "$confirm" = "oui" ]; then
download_model \
"https://huggingface.co/SG161222/RealVisXL_V4.0/resolve/main/RealVisXL_V4.0.safetensors" \
"$MODELS_DIR/RealVisXL_V4.0.safetensors" \
"RealVisXL V4.0" \
"6.9GB"
download_model \
"https://huggingface.co/RunDiffusion/Juggernaut-XL-v9/resolve/main/Juggernaut-XL-v9.safetensors" \
"$MODELS_DIR/Juggernaut-XL-v9.safetensors" \
"Juggernaut XL v9" \
"6.9GB"
download_model \
"https://huggingface.co/Lykon/DreamShaper/resolve/main/DreamShaperXL1.0.safetensors" \
"$MODELS_DIR/DreamShaperXL1.0.safetensors" \
"DreamShaper XL 1.0" \
"6.9GB"
download_model \
"https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_8step.safetensors" \
"$MODELS_DIR/sdxl_lightning_8step.safetensors" \
"SDXL Lightning 8-step" \
"6.9GB"
download_model \
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/diffusion_pytorch_model.safetensors" \
"$VAE_DIR/sdxl_vae.safetensors" \
"SDXL VAE" \
"335MB"
echo ""
echo "✅ Tous les modèles ont été téléchargés !"
else
echo "Annulation..."
fi
;;
0)
echo "Annulation..."
exit 0
;;
*)
echo "Choix invalide"
exit 1
;;
esac
echo ""
echo "=========================================="
echo "✅ Téléchargement terminé !"
echo ""
echo "Prochaines étapes :"
echo " 1. Redémarrer ComfyUI : sudo docker restart comfyui"
echo " 2. Choisir le modèle dans OpenWebUI (Admin → Settings → Images)"
echo " 3. Consulter docs/MODELS.md pour les réglages optimaux"
echo ""
echo "Espace disque utilisé :"
du -sh "$MODELS_DIR" "$VAE_DIR" 2>/dev/null | head -2
View File
View File
+59
View File
@@ -0,0 +1,59 @@
{
"3": {
"inputs": {
"seed": 0,
"steps": 30,
"cfg": 8.0,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1.0,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0]
},
"class_type": "KSampler"
},
"4": {
"inputs": {
"ckpt_name": "sd_xl_base_1.0.safetensors"
},
"class_type": "CheckpointLoaderSimple"
},
"5": {
"inputs": {
"width": 1024,
"height": 1024,
"batch_size": 1
},
"class_type": "EmptyLatentImage"
},
"6": {
"inputs": {
"text": "",
"clip": ["4", 1]
},
"class_type": "CLIPTextEncode"
},
"7": {
"inputs": {
"text": "text, watermark, blurry, low quality",
"clip": ["4", 1]
},
"class_type": "CLIPTextEncode"
},
"8": {
"inputs": {
"samples": ["3", 0],
"vae": ["4", 2]
},
"class_type": "VAEDecode"
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": ["8", 0]
},
"class_type": "SaveImage"
}
}
+74
View File
@@ -0,0 +1,74 @@
{
"3": {
"inputs": {
"seed": 0,
"steps": 30,
"cfg": 8.0,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1.0,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0]
},
"class_type": "KSampler"
},
"4": {
"inputs": {
"ckpt_name": "sd_xl_base_1.0.safetensors"
},
"class_type": "CheckpointLoaderSimple",
"_meta": {
"title": "Load Checkpoint"
}
},
"5": {
"inputs": {
"width": 1024,
"height": 1024,
"batch_size": 1
},
"class_type": "EmptyLatentImage",
"_meta": {
"title": "Empty Latent Image"
}
},
"6": {
"inputs": {
"text": "beautiful scenery nature glass bottle landscape, purple galaxy bottle",
"clip": ["4", 1]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"7": {
"inputs": {
"text": "text, watermark",
"clip": ["4", 1]
},
"class_type": "CLIPTextEncode",
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"8": {
"inputs": {
"samples": ["3", 0],
"vae": ["4", 2]
},
"class_type": "VAEDecode"
},
"9": {
"inputs": {
"filename_prefix": "ComfyUI",
"images": ["8", 0]
},
"class_type": "SaveImage",
"_meta": {
"title": "Save Image"
}
}
}
+45
View File
@@ -0,0 +1,45 @@
# Configuration STT (speaches) pour Fedora
services:
speaches:
image: ghcr.io/speaches-ai/speaches:latest
container_name: speaches-stt
restart: unless-stopped
user: "0:0"
ports:
- "8200:8000"
environment:
- WHISPER__MODEL=deepdml/faster-whisper-large-v3-turbo-ct2
- WHISPER__LANGUAGE=fr
- WHISPER__COMPUTE_TYPE=int8
- WHISPER__DEVICE=cpu
- WHISPER__CPU_THREADS=4
volumes:
- speaches-models:/home/user/.cache/huggingface:Z
# Si ROCm fonctionne un jour, ajouter:
# devices:
# - /dev/kfd
# - /dev/dri
# group_add:
# - "44"
# - "991"
# environment:
# - HSA_OVERRIDE_GFX_VERSION=11.0.0
speaches-init:
image: curlimages/curl:latest
container_name: speaches-init
restart: "no"
depends_on:
- speaches
entrypoint: >
sh -c "echo 'Attente du démarrage de speaches...' &&
sleep 15 &&
curl -sf -X POST http://speaches:8000/v1/models \
-H 'Content-Type: application/json' \
-d '{\"model\":\"deepdml/faster-whisper-large-v3-turbo-ct2\"}' &&
echo ' ✅ Modèle enregistré avec succès' ||
echo ' ⚠️ Erreur enregistrement modèle - vérifier manuellement'"
volumes:
speaches-models:
+141
View File
@@ -0,0 +1,141 @@
# 🎙️ Installation de la voix masculine Tom (français)
## Problème
La voix "gilles" n'existe pas dans les repos Piper (erreur 404).
## Solution
Utiliser la voix **Tom** qui existe vraiment et est disponible.
## Installation
```bash
# Sur folzo-Corp
cd ~/openedai-speech/tts-voices
# Télécharger la voix masculine Tom
echo "🎙️ Téléchargement voix masculine Tom..."
wget -q --show-progress https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/fr/fr_FR/tom/medium/fr_FR-tom-medium.onnx
wget -q --show-progress https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/fr/fr_FR/tom/medium/fr_FR-tom-medium.onnx.json
# Vérifier les fichiers
ls -lh fr_FR-tom-medium*
# Modifier la configuration
cat > ~/openedai-speech/tts-config/voice_to_speaker.yaml << 'CONFIGEOF'
# Configuration XTTS v2
tts-1-hd:
alloy:
model: xtts
speaker: voices/alloy.wav
language: auto
echo:
model: xtts
speaker: voices/echo.wav
language: auto
fable:
model: xtts
speaker: voices/fable.wav
language: auto
onyx:
model: xtts
speaker: voices/onyx.wav
language: auto
nova:
model: xtts
speaker: voices/nova.wav
language: auto
shimmer:
model: xtts
speaker: voices/shimmer.wav
language: auto
# Configuration standard - Voix Piper
tts-1:
# Voix anglaises
alloy:
model: voices/en_US-libritts_r-medium.onnx
speaker: 79
echo:
model: voices/en_US-libritts_r-medium.onnx
speaker: 134
fable:
model: voices/en_GB-northern_english_male-medium.onnx
speaker: 0
onyx:
model: voices/en_US-libritts_r-medium.onnx
speaker: 159
nova:
model: voices/en_US-libritts_r-medium.onnx
speaker: 107
shimmer:
model: voices/en_US-libritts_r-medium.onnx
speaker: 163
# Voix françaises
siwis:
model: voices/fr_FR-siwis-medium.onnx
speaker: 0
effi:
model: voices/fr_FR-siwis-medium.onnx
speaker: 0
tom:
model: voices/fr_FR-tom-medium.onnx
speaker: 0
papa:
model: voices/fr_FR-tom-medium.onnx
speaker: 0
assistant:
model: voices/fr_FR-tom-medium.onnx
speaker: 0
CONFIGEOF
# Redémarrer le service TTS
echo "🔄 Redémarrage du service TTS..."
sudo docker compose -f ~/openedai-speech/docker-compose.yml restart
# Attendre
sleep 10
# Tester la voix
echo ""
echo "🧪 Test voix Tom..."
curl -s http://localhost:8100/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model":"tts-1","input":"Bonjour, je suis ton assistant","voice":"tom"}' \
--output /tmp/test_tom.mp3
if [ -f /tmp/test_tom.mp3 ]; then
echo "✅ Voix Tom créée avec succès !"
ls -lh /tmp/test_tom.mp3
else
echo "❌ Erreur lors de la création"
fi
```
## Configuration Open WebUI
Pour l'assistant du fils :
```yaml
TTS:
Engine: OpenAI
URL: http://192.168.1.11:8100/v1
Model: tts-1
Voice: tom # ou papa, ou assistant
```
## Résumé des voix disponibles
| Nom | Type | Langue | Fichier |
|-----|------|--------|---------|
| siwis | Féminine | Français | fr_FR-siwis-medium.onnx |
| effi | Féminine | Français | fr_FR-siwis-medium.onnx (alias) |
| tom | Masculine | Français | fr_FR-tom-medium.onnx |
| papa | Masculine | Français | fr_FR-tom-medium.onnx (alias) |
| assistant | Masculine | Français | fr_FR-tom-medium.onnx (alias) |
## Notes
- La voix **siwis** est parfaitement fonctionnelle ✅
- La voix **tom** remplace **gilles** qui n'existe pas
- Toutes les voix sont en qualité "medium"
- Taille des fichiers : ~60MB chacun
+56
View File
@@ -0,0 +1,56 @@
#!/usr/bin/env python3
"""
Proxy OpenAI API pour whisper-asr-webservice
Traduit les requêtes OpenAI (/v1/audio/transcriptions) vers /asr
"""
from flask import Flask, request, jsonify
import requests
import tempfile
import os
app = Flask(__name__)
WHISPER_URL = "http://localhost:9000/asr" # URL interne du container
@app.route('/health', methods=['GET'])
def health():
return jsonify({"status": "healthy"})
@app.route('/v1/audio/transcriptions', methods=['POST'])
def transcribe():
try:
# Récupérer le fichier audio
if 'file' not in request.files:
return jsonify({"error": "No file provided"}), 400
audio_file = request.files['file']
language = request.form.get('language', 'fr')
# Sauvegarder temporairement
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as tmp:
audio_file.save(tmp.name)
# Appeler whisper-asr-webservice
with open(tmp.name, 'rb') as f:
response = requests.post(
WHISPER_URL,
files={'audio_file': f},
params={'language': language, 'output': 'json'}
)
os.unlink(tmp.name)
if response.status_code == 200:
result = response.json()
# Format OpenAI : { "text": "..." }
return jsonify({"text": result.get('text', '')})
else:
return jsonify({"error": "Transcription failed"}), 500
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
print("🎙️ Proxy STT démarré sur http://0.0.0.0:8201")
print(" Redirige vers whisper-asr-webservice sur http://localhost:9000/asr")
app.run(host='0.0.0.0', port=8201, threaded=True)