feat: emoji support in subtitles and clear stabilization UI

This commit is contained in:
Michael committed 2026-01-29 12:58:53 +01:00
1 parent eee6e65c94
commit 817bd2a980
3 files changed
+25 -8

No files matched your search

+2 -3
View File
@@ -84,7 +84,6 @@ export default function MobileNewReel() {
const [isPlaying, setIsPlaying] = useState<string | null>(null);
const [musicOffset, setMusicOffset] = useState(0);
const [stabilize, setStabilize] = useState(true); // Activé par défaut pour les Reels
const [force1080p, setForce1080p] = useState(true); // Activé par défaut
const { data: pages = [] } = useQuery<SocialPage[]>({
@@ -277,9 +276,9 @@ export default function MobileNewReel() {
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<div className="text-sm font-medium flex items-center gap-2">
<Sparkles className="w-4 h-4 text-primary" /> Stabilisation & Qualité 1080p
<Sparkles className="w-4 h-4 text-primary" /> Stabilisation Vidéo (Anti-tremblements)
</div>
<div className="text-xs text-muted-foreground">Application automatique après capture</div>
<div className="text-xs text-muted-foreground">Corrige les secousses (Recommandé main levée). Désactiver sur trépied.</div>
</div>
<Switch
checked={stabilize}
+21 -5
View File
@@ -122,7 +122,11 @@ def clean_text_for_tts(text: str) -> str:
async def generate_tts_with_subs(
text: str, voice: str, audio_path: Path, ass_path: Path
text: str,
voice: str,
audio_path: Path,
ass_path: Path,
display_text: Optional[str] = None,
):
"""Generate TTS audio with subtitles, with retry and fallback voices."""
import asyncio
@@ -185,7 +189,11 @@ async def generate_tts_with_subs(
audio_duration = None
# Generate a high-quality ASS file with sync
generate_simple_ass(text, ass_path, total_duration=audio_duration)
# Use display_text (with emojis) if provided, otherwise standard text
text_to_display = display_text if display_text else text
generate_simple_ass(
text_to_display, ass_path, total_duration=audio_duration
)
print(f"✅ TTS success with voice: {attempt_voice}")
return # Success!
@@ -410,8 +418,13 @@ async def process_reel(request: ReelRequest, x_api_key: str = Header(None)):
if tts_clean_text:
print(f"🔊 Generating TTS audio to: {tts_audio_path}")
# Pass original text (with emojis) for subtitles, cleaned text for audio
await generate_tts_with_subs(
tts_clean_text, voice, tts_audio_path, tts_ass_path
tts_clean_text,
voice,
tts_audio_path,
tts_ass_path,
display_text=request.text,
)
# Verify files were created
@@ -421,7 +434,7 @@ async def process_reel(request: ReelRequest, x_api_key: str = Header(None)):
)
has_tts = True
else:
print(f"❌ TTS audio file missing or empty!")
print("❌ TTS audio file missing or empty!")
else:
print("⚠️ TTS text is empty after cleaning, skipping.")
except Exception as e:
@@ -739,7 +752,10 @@ async def preview_tts(request: ReelRequest, x_api_key: str = Header(None)):
elif not voice or "Neural" not in voice:
voice = "fr-FR-VivienneMultilingualNeural"
await generate_tts_with_subs(clean_text, voice, tts_audio_path, tts_srt_path)
# Pass original text for subtitles (implied in SRT for preview too if needed, though mostly audio)
await generate_tts_with_subs(
clean_text, voice, tts_audio_path, tts_srt_path, display_text=request.text
)
if not tts_audio_path.exists():
raise Exception("TTS generation failed (file missing)")
+2
View File
@@ -112,10 +112,12 @@ Ajout d'une fonctionnalité complète de création de Reels Facebook permettant
- [x] Fix: Synchronisation parfaite Texte/Voix (TTS dynamique)
- [x] Fix: Stabilisation optimisée (Zoom adaptatif + Single Pass)
- [x] Amélioration: Stabilisation Aggressive (Smoothing 30, Shakiness 10)
- [x] Fix: Emojis supportés dans le texte (mais ignorés par TTS)
- [x] **Phase 11: Clarification UX Mobile** ✅
- [x] Modifier l'alerte iOS pour prévenir que les réglages se font après
- [x] Ajouter une flèche ou une animation pour attirer l'œil sur le Switch de stabilisation
- [x] S'assurer que le bouton "Suivant" est bien visible sous le Switch
- [x] Renommer toggle stabilisation pour clarté (Anti-tremblements)
- [x] **Phase 12: Optimisation Safari (Bypass Compression)** ✅
- [x] Ajouter l'attribut `multiple` à l'input file pour forcer l'envoi du fichier original (Bypass Safari downscaling)
- [x] Mettre à jour les MIME types pour inclure `video/quicktime` (iPhone natif)