mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-11 17:26:45 +02:00
Service ffmpeg-api réécrit (ffmpeg-service/app/) : - Appels FFmpeg asynchrones : le service ne se fige plus pendant un rendu - Vidéo récupérée par téléchargement (GET /files/…) au lieu de base64 en JSON - Vraies erreurs HTTP ; échec explicite si la voix demandée est impossible - 30 voix Gemini + ton de lecture (dynamique, chaleureux, promo, calme), clé en en-tête, modèle configurable avec repli - Edge TTS 7 (minutage des mots restauré), secours en voix françaises - Voix traitée : filtre, compression, niveau constant ; musique bouclée et baissée automatiquement sous la voix ; mix final à -14 LUFS - Sous-titres calés mot à mot (Whisper pour Gemini et la voix d'origine, à la place de ffsubsync), style Montserrat, placés hors des boutons Reels - Vidéo : plus de retouche luminosité forcée, scaling lanczos, HDR iPhone converti, BT.709, AAC 48 kHz 192k ; la vidéo s'allonge si la voix dépasse - Grand logo de fin affiché après la voix ; FFmpeg 7.0.2 épinglé, polices et modèle Whisper intégrés à l'image ; tests pytest et ruff Application : - Sélecteur de voix partagé (4 pages) : moteur, 30 voix, ton, écoute - Reel images : minutage réel des mots, interrupteur voix respecté - sync-info ne génère plus de voix à chaque frappe (estimation locale) - Stabilisation désactivée par défaut, route /reels/preview inutilisée retirée - Log « [ReelQueue] Worker démarré » pour vérifier la version déployée Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Ze4bs7tpF1KGWUk6ZZSZ4
127 lines
4.9 KiB
Bash
127 lines
4.9 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=
|
|
#
|
|
# 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
|