Files
InkFlow/backend/pyproject.toml
colgora ba1813c583 Voicebank : vraies voix françaises (CML-TTS) + pool anonyme + garde-fou Qwen3
Remplace la voicebank générée par Kokoro (timbre anglais sur français phonémisé
-> accent que Qwen3 clonait) par 41 vraies voix FR issues de CML-TTS (livres
audio studio) : 1 narrateur dédié, 18F/14M nommées, 4F/4M anonymes réservées.

- scripts/import_voices.py : import multi-shards parquet, 1 clip/locuteur (le
  plus propre via levenshtein), genre estimé par F0 (YIN, anti-octave), filtre
  débit de parole (ref_text aligné sur l'audio).
- VoiceEntry.anonymous + assign_voices : les figurants « anonyme (...) » tirent
  dans un pool réservé, jamais mélangé avec les voix nommées ; narrateur dédié
  (fr_narrator remplace fr_f_siwis).
- dedup._anon_attrs : genre/âge déduits du nom anonyme (bon genre de voix).
- tts/qwen3.py : garde-fou anti-dérive (rejette/réessaie les sorties en boucle
  ou coupées en estimant la durée plausible du chunk).

Limite connue : Qwen3 ne sait pas synthétiser les fragments d'1-2 mots (incises,
titres) -> trous ; à traiter (repli Kokoro ou fusion des incises).

Inclut aussi du travail en cours antérieur (refacto backend LLM pluggable
mlx/lmstudio, benchmark, ajustements frontend/API).

Claude-Session: https://claude.ai/code/session_01XSVvcy1mfb4k1xDgib9vVU
2026-06-21 21:32:31 +02:00

43 lines
1.1 KiB
TOML

[project]
name = "inkflow"
version = "0.1.0"
description = "EPUB -> livre audio, 100% local sur Mac (MLX). Analyse Gemma + TTS Qwen3/Kokoro."
requires-python = ">=3.11"
dependencies = [
# MLX (Apple Silicon)
"mlx",
"mlx-lm",
"mlx-audio",
"misaki", # phonemizer pour Kokoro (français inclus)
# Backend LLM alternatif : LM Studio via son API OpenAI locale (GGUF + MLX)
"openai",
# Parsing EPUB
"ebooklib",
"beautifulsoup4",
"lxml",
# Audio
"soundfile", # lecture/ecriture wav
"numpy", # concat audio + normalisation
"mutagen", # tags id3 + cover (encodage mp3 via ffmpeg CLI)
# API web
"fastapi",
"uvicorn[standard]",
"websockets",
"python-multipart", # upload de fichiers
# Divers
"pydantic>=2",
"rich", # logs CLI lisibles
"typer", # CLI
]
[project.scripts]
inkflow = "inkflow.cli:app"
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["."]
include = ["inkflow*"]