SkillAgentSearch skills...

AudioReader

Convertisseur de livres Markdown en audiobooks avec TTS multi-voix (MMS + Kokoro)

Install / Use

/learn @phuetz/AudioReader
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

AudioReader

Convertisseur de livres Markdown en audiobooks haute qualite

Propulse par Kokoro-82M - un modele TTS open-source qui rivalise avec ElevenLabs, 100% gratuit et local.

Python License Platform Docker

📸 Captures d'écran

Dashboard

Dashboard

Conversion de livre

Conversion livre

Gestion des personnages

Personnages

Clonage vocal

Clonage vocal

Paramètres

Paramètres


Table des matieres


Fonctionnalites

Synthese Vocale

  • Kokoro-82M: Modele a 82 millions de parametres, qualite proche d'ElevenLabs
  • Multilingue: Francais, anglais (US/UK), japonais, chinois, et plus
  • Voix naturelles: Intonation et prosodie realistes
  • Voice Blending: Melange de voix avec ponderation (ex: af_bella:60,am_adam:40)
  • Multi-voix automatique: Voix differentes par personnage detecte
  • Performance: ~5x temps reel sur CPU

Formats d'entree

  • Markdown: Fichier unique avec headers pour chapitres
  • Multi-fichiers: Repertoire avec un fichier .md par chapitre
  • EPUB: Extraction automatique des chapitres

Traitement du Texte

  • Chunking intelligent: Decoupage aux frontieres naturelles (phrases, paragraphes)
  • Pauses intelligentes: Pauses configurables entre phrases (0.3s) et paragraphes (0.8s)
  • Correction prononciation: Dictionnaire integre pour acronymes et termes techniques
  • Normalisation avancee: Nombres, dates, heures, monnaies, chiffres romains
  • Tags emotionnels: Support des tags [laugh], [sigh], [cough], etc.

Post-traitement Audio

  • Normalisation loudness: EBU R128, -19 LUFS (standard podcast/audiobook)
  • EQ automatique: Presence (3kHz) + Air (12kHz) + Low-cut (80Hz)
  • De-essing: Reduction des sibilantes
  • Compression: Compression douce pour voix
  • Limiteur: True peak a -1.5 dB

Export Professionnel

  • Metadonnees ID3: Titre, auteur, narrateur, couverture
  • Format M4B: Audiobook avec chapitres navigables (compatible Apple Books)
  • Export MP3: Fichiers separes ou combines

Interface

  • CLI complete: Scripts en ligne de commande avec options avancees
  • Interface Web: Application Gradio intuitive
  • Pipeline HQ: Script dedie pour qualite maximale

Nouveautes v5.0 - Detection Amelioree et Export Professionnel

1. Detection de Personnages Amelioree

Le systeme de detection de personnages a ete entierement repense pour eliminer les faux positifs :

Stop words etendus : Expansion de 25 a ~200 mots (participes passes, adverbes, noms communs post-verbe, negatifs).

Scoring de confiance : Chaque personnage detecte recoit un score de confiance (0.0-1.0) base sur :

  • Presence dans le dictionnaire de prenoms francais (+0.3)
  • Nombre d'occurrences dans le texte (+0.2)
  • Contexte syntaxique (apres verbe de parole, majuscule)

Dictionnaire de prenoms francais : ~1000 prenoms INSEE avec detection automatique du genre.

from src.french_names import is_french_name, get_gender_from_name

is_french_name("Marie")      # True
get_gender_from_name("Pierre") # "M"

Validation LLM optionnelle : Pour les cas ambigus (confiance 0.3-0.7), le systeme peut valider via Ollama/OpenAI.

2. Support GPU et Streaming Temps Reel

Configuration GPU unifiee :

from src.gpu_config import GPUConfig

config = GPUConfig(
    use_gpu=True,
    device="auto",  # "cuda", "mps", "cpu"
    memory_fraction=0.8
)
print(config.get_device())  # Auto-detect CUDA/MPS/CPU

Moteur Kokoro avec GPU :

from src.tts_kokoro_engine import KokoroTTSEngine
from src.gpu_config import GPUConfig

engine = KokoroTTSEngine(gpu_config=GPUConfig(use_gpu=True))
print(f"GPU actif: {engine.is_using_gpu}")

Streaming SSE temps reel :

# Endpoint streaming
curl -N -X POST http://localhost:8000/api/v2/streaming/synthesize-stream \
  -H "Content-Type: application/json" \
  -d '{"text": "Bonjour, ceci est un test de streaming."}'

Interface async pour integration :

from src.tts_async import AsyncKokoroWrapper

async def stream_audio():
    engine = AsyncKokoroWrapper()
    async for chunk in engine.synthesize_stream("Texte a synthetiser"):
        # chunk.audio contient les samples audio
        play_audio(chunk.audio)

3. Lecteur Web Integre

Floating Player global : Le frontend React dispose maintenant d'un lecteur audio flottant visible sur toutes les pages.

Playlist avec queue :

// Zustand store avec persistance
const { queue, addTrack, next, toggleShuffle } = usePlaylistStore()

addTrack({ url: '/output/chapitre1.mp3', title: 'Chapitre 1' })

Streaming playback avec Web Audio API :

const { startStreaming, isBuffering, progress } = useStreamingPlayback()

// Demarre le streaming SSE et joue en temps reel
await startStreaming("Texte a synthetiser", { voice: "ff_siwis" })

4. Effets Sonores Contextuels

Moteur d'effets proceduraux :

from src.soundfx_engine import SoundFXEngine, BUILTIN_EFFECTS

engine = SoundFXEngine()

# 12 effets disponibles
audio = engine.generate('whoosh', intensity=0.5, duration=0.3)
audio = engine.generate('impact', intensity=0.7, duration=0.2)
audio = engine.generate('suspense', intensity=0.4, duration=2.0)

Effets integres :

| Effet | Description | Usage typique | |-------|-------------|---------------| | whoosh | Balayage frequentiel | Transitions rapides | | impact | Burst de bruit | Moments dramatiques | | suspense | Drone basse frequence | Tension | | magic | Harmoniques + shimmer | Moments fantastiques | | page_turn | Bruit de page | Transitions | | chapter_start | Jingle d'ouverture | Debut de chapitre |

Integration dans le pipeline HQ :

python audio_reader.py livre.md --hq --sound-effects

5. Voix Francaises Additionnelles

21 voix Edge TTS francaises :

| Region | Voix feminines | Voix masculines | |--------|---------------|-----------------| | France | Denise, Eloise, Brigitte, Celeste, Coralie, Jacqueline, Josephine, Yvette | Henri, Alain, Claude, Jerome, Maurice, Remy, Yves | | Canada | Sylvie | Antoine, Jean, Thierry | | Belgique | Charline | Gerard | | Suisse | Ariane | Fabrice |

Voix MMS (Meta) :

# Voix MMS pour le francais
MMS_VOICES = {
    "fr": [
        {"id": "mms_fr_default", "name": "MMS Francais"},
        {"id": "mms_fr_male", "name": "MMS Homme FR"},
        {"id": "mms_fr_female", "name": "MMS Femme FR"}
    ]
}

6. Traitement par Lots et Profils

File d'attente de conversion :

from src.batch_processor import BatchProcessor, JobPriority

processor = BatchProcessor(max_concurrent=2)

# Ajouter des jobs avec priorites
processor.add_job(Path("livre1.md"), {"hq": True}, JobPriority.HIGH)
processor.add_job(Path("livre2.md"), {"hq": False}, JobPriority.NORMAL)

# Traiter tous les jobs
results = processor.process_all(
    on_job_progress=lambda job, pct: print(f"{job.id}: {pct}%")
)

7 profils de configuration predefinis :

| Profil | Style | Vitesse | Particularites | |--------|-------|---------|----------------| | podcast | conversational | 1.05x | -16 LUFS, decontracte | | audiobook | storytelling | 1.0x | Multi-voix, jingles chapitres | | dramatic | dramatic | 0.92x | Effets sonores, intense | | fast | conversational | 1.2x | Sans post-processing | | documentary | documentary | 0.95x | Neutre, informatif | | intimate | intimate | 0.9x | Proche, confidentiel | | energetic | energetic | 1.12x | Dynamique, enthousiaste |

Utilisation CLI :

# Utiliser un profil
python audio_reader.py livre.md --profile audiobook

# Lister les profils
python audio_reader.py --list-profiles

# Batch processing depuis fichier
python audio_reader.py --batch jobs.json

7. Export Multi-Plateformes

Export vers Spotify, YouTube, Podcast et ACX :

from src.platform_exporter import PlatformExporter, ExportMetadata

exporter = PlatformExporter()
metadata = ExportMetadata(
    title="Mon Audiobook",
    
View on GitHub
GitHub Stars7
CategoryDevelopment
Updated6d ago
Forks1

Languages

Python

Security Score

70/100

Audited on Mar 21, 2026

No findings