Files
Claude fdace9d8d5 Qwen TTS : serveur GPU distant (Unraid) réglé dans les paramètres
- qwen-tts : GPU NVIDIA détecté automatiquement (bfloat16), image CUDA 12.8
  (RTX 50xx comprises) via TORCH_VARIANT=cu128, docker-compose.gpu.yml
  dédié (clé obligatoire, choix de la carte) et guide d'installation Unraid.
- Paramètres → « Qwen TTS (voix locale) » : adresse + clé du service, test
  de connexion (modèle et carte graphique affichés), stockés en base
  (app_config.qwen_tts_url / qwen_tts_api_key) et transmis à ffmpeg-api à
  chaque voix ; QWEN_TTS_URL reste un défaut.
- Le service qwen-tts CPU du docker-compose principal devient optionnel
  (profil qwen-local).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Upu97wMmsRkBoj6iVM4rH6
2026-09-29 09:57:32 +00:00

159 lines
6.5 KiB
Bash

# Configuration de la base de données PostgreSQL
PGDATABASE=socialflow
PGUSER=socialflow
PGPASSWORD=changeme
PGPORT=4523
PGHOST=postgres
# URL de connexion complète (générée automatiquement dans Docker)
DATABASE_URL=postgresql://socialflow:changeme@postgres:4523/socialflow
# Configuration de l'application
PORT=5555
NODE_ENV=production
# URL publique de l'application, telle que vue par le navigateur.
# En production, mettez le vrai domaine (ex. https://socialflow.exemple.fr) :
# les URI de redirection OAuth (Facebook/TikTok) en découlent.
# Laissée vide derrière un reverse proxy, elle est déduite des en-têtes
# X-Forwarded-Proto / X-Forwarded-Host.
APP_URL=http://localhost:5555
# Clé secrète pour les sessions (CHANGEZ CETTE VALEUR)
SESSION_SECRET=your-secret-key-change-me-to-random-string
# Clé de chiffrement pour les tokens Facebook/Instagram (OBLIGATOIRE en production)
# Générer avec: openssl rand -hex 32
ENCRYPTION_KEY=your-32-byte-hex-key-here
# Clé API OpenRouter pour la génération de texte IA
# Obtenez votre clé sur https://openrouter.ai/
OPENROUTER_API_KEY=your-openrouter-api-key-here
# Configuration MinIO (stockage des médias, remplace Cloudinary)
# MINIO_ENDPOINT = URL interne Docker (ex: http://minio:9000)
# MINIO_PUBLIC_URL = URL publique pour accéder aux fichiers (ex: https://media.example.com)
MINIO_ENDPOINT=http://minio:9000
MINIO_PUBLIC_URL=https://media.example.com
# ==========================================
# FACEBOOK (connexion des pages et renouvellement des jetons)
# ==========================================
# Identifiants de votre application sur https://developers.facebook.com
# Ils peuvent aussi être saisis dans l'application (Paramètres → Facebook),
# ce qui est prioritaire sur ces variables.
# Sans eux, les jetons de page doivent être collés et remplacés à la main.
# FACEBOOK_APP_ID=
# FACEBOOK_APP_SECRET=
#
# URI de redirection OAuth à déclarer chez Facebook.
# Par défaut : ${APP_URL}/api/facebook/callback, ou le domaine vu par le
# reverse proxy quand APP_URL n'est pas défini.
# FACEBOOK_REDIRECT_URI=
#
# Permissions demandées à l'autorisation. Défaut : pages_show_list,
# pages_manage_posts, pages_read_engagement, pages_manage_engagement,
# read_insights, business_management, instagram_basic, instagram_content_publish
# FACEBOOK_SCOPES=
#
# Version de la Graph API utilisée pour l'OAuth (défaut : v19.0).
# FACEBOOK_GRAPH_VERSION=
# Optionnel: Configuration Instagram API
# INSTAGRAM_APP_ID=
# INSTAGRAM_APP_SECRET=
# ==========================================
# TIKTOK (publication des reels)
# ==========================================
# Identifiants de votre application sur https://developers.tiktok.com
# Ils peuvent aussi être saisis dans l'application (Paramètres → TikTok),
# ce qui est prioritaire sur ces variables.
# TIKTOK_CLIENT_KEY=
# TIKTOK_CLIENT_SECRET=
#
# URL de redirection OAuth à déclarer chez TikTok.
# Par défaut : ${APP_URL}/api/tiktok/callback, ou le domaine vu par le
# reverse proxy quand APP_URL n'est pas défini.
# TIKTOK_REDIRECT_URI=
#
# Scopes demandés à l'autorisation (défaut : user.info.basic,video.publish).
# "video.publish" nécessite que l'application ait passé l'audit TikTok ;
# sans audit, les vidéos publiées restent privées.
# TIKTOK_SCOPES=
# ==========================================
# MENTIONS LÉGALES
# ==========================================
# Affichées sur les pages publiques /terms et /privacy, dont TikTok exige
# les URLs pour l'audit de l'application développeur.
#
# L'identité de la société exploitante est déjà la valeur par défaut : seule
# l'adresse de contact doit obligatoirement être renseignée ici, le RGPD
# imposant un point de contact pour l'exercice des droits.
LEGAL_CONTACT_EMAIL=
# Surcharges facultatives (utiles si l'outil est exploité par une autre société)
# LEGAL_COMPANY_NAME=
# LEGAL_TRADE_NAME=
# LEGAL_COMPANY_LEGAL_FORM=
# LEGAL_COMPANY_RCS=
# LEGAL_COMPANY_ADDRESS=
# ==========================================
# API EXTERNE
# ==========================================
# Clé d'accès pour l'API externe /api/v1/*
# Générer avec: openssl rand -hex 32
EXTERNAL_API_KEY=your-secure-random-key-here
# ==========================================
# REELS : VOIX ET RENDU VIDÉO (service ffmpeg-api)
# ==========================================
# Clé partagée entre l'application et le service FFmpeg (CHANGEZ CETTE VALEUR).
FFMPEG_API_KEY=change-me-ffmpeg-key
#
# Clé Google AI Studio pour les voix Gemini (sinon : voix Edge, gratuite).
# Peut aussi être saisie dans l'application, ce qui est prioritaire.
GEMINI_API_KEY=
#
# Modèle Gemini TTS (défaut : gemini-2.5-flash-preview-tts ; repli automatique
# sur celui-ci si le modèle choisi n'existe pas).
# GEMINI_TTS_MODEL=
#
# Stabilité de la voix Gemini : température basse et graine fixe donnent la
# même intonation d'une génération à l'autre ; chaque lecture est réécoutée et
# régénérée (jusqu'à GEMINI_TTS_ATTEMPTS fois) si des mots manquent.
# GEMINI_TTS_TEMPERATURE=0.3
# GEMINI_TTS_SEED=20260928
# GEMINI_TTS_ATTEMPTS=3
#
# Modèle Whisper utilisé pour caler les sous-titres mot à mot sur la voix
# (tiny, base, small). Choisi à la construction de l'image : changer la valeur
# demande de reconstruire ffmpeg-api.
# WHISPER_MODEL=base
#
# Voix Qwen3-TTS : gratuite, française, sans quota. Le plus simple : l'installer
# sur un serveur avec carte graphique NVIDIA (qwen-tts/docker-compose.gpu.yml,
# ex. Unraid) puis régler l'adresse dans Paramètres → Qwen TTS.
# Sinon, service CPU sur ce serveur (lent : 5 à 7 fois la durée de la voix) :
# docker compose --profile qwen-local up -d avec QWEN_TTS_URL=http://qwen-tts:8001
# QWEN_TTS_URL=
# Modèle choisi à la construction de l'image :
# - Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice (défaut) : ton et émotion pilotés ;
# - Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice : ~30 % plus rapide, moins expressif.
# QWEN_TTS_MODEL=Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
# Clonage des voix déposées dans qwen-tts/voices (vide pour désactiver).
# QWEN_TTS_CLONE_MODEL=Qwen/Qwen3-TTS-12Hz-0.6B-Base
# QWEN_TTS_THREADS=0
# QWEN_TTS_MEMORY=10g
#
# Moteur de rendu des Reels vidéo :
# - remotion (défaut) : sous-titres animés, logo et effet de fin identiques à
# l'aperçu affiché dans l'application ; ~30 à 60 s pour un Reel de 30 s ;
# - ffmpeg : plus rapide (~10 s), sous-titres karaoké classiques.
# REEL_RENDERER=remotion
#
# Onglets Chromium utilisés en parallèle par Remotion (défaut : moitié des cœurs).
# Réduisez-le si le serveur manque de mémoire.
# RENDER_CONCURRENCY=