feat: mvp

This commit is contained in:
h
2026-02-01 16:07:59 +01:00
commit 4ef769597a
20 changed files with 3566 additions and 0 deletions

61
main.py Normal file
View File

@@ -0,0 +1,61 @@
import asyncio
from rich.console import Console
from dubbing.cli import (
select_language,
select_model,
select_project,
display_cache_status,
select_cache_strategy,
confirm_run,
)
from dubbing.pipeline import Pipeline
console = Console()
TRANSLATE_STEP_INDEX = 2
def main():
console.print("[bold]Fucking Chinese Dramas Dubbing Pipeline[/]\n")
# 1. Select project first
project = select_project()
if not project:
return
console.print(f"[dim]Selected project: {project}[/]\n")
# 2. Select language
language = select_language()
console.print(f"[dim]Selected language: {language.value.upper()}[/]\n")
# 3. Create pipeline with dummy model to check cache
pipeline = Pipeline(project, "gemini-2.0-flash-lite", language)
statuses = pipeline.get_cache_status()
display_cache_status(statuses)
console.print()
# 4. Select cache strategy
rebuild_from = select_cache_strategy(statuses)
# 5. Only ask for model if translation needs to run
translate_cached = statuses[TRANSLATE_STEP_INDEX].cached
needs_translation = (
rebuild_from >= 0 and rebuild_from <= TRANSLATE_STEP_INDEX
) or (rebuild_from == -1 and not translate_cached)
if needs_translation:
model = select_model()
console.print(f"[dim]Selected model: {model}[/]\n")
pipeline = Pipeline(project, model, language)
if not confirm_run():
console.print("[yellow]Cancelled[/]")
return
console.print()
asyncio.run(pipeline.run(rebuild_from))
if __name__ == "__main__":
main()