feat: mvp
This commit is contained in:
71
dubbing/pipeline.py
Normal file
71
dubbing/pipeline.py
Normal file
@@ -0,0 +1,71 @@
|
||||
from rich.console import Console
|
||||
from dubbing.models import ProjectPaths, StepStatus, Language
|
||||
from dubbing.steps import (
|
||||
ExtractAudioStep,
|
||||
ASRStep,
|
||||
TranslateStep,
|
||||
TTSStep,
|
||||
MixStep,
|
||||
FinalizeStep,
|
||||
)
|
||||
|
||||
console = Console()
|
||||
|
||||
|
||||
class Pipeline:
|
||||
def __init__(
|
||||
self,
|
||||
project_name: str,
|
||||
model_name: str = "gemini-2.0-flash-lite",
|
||||
language: Language = Language.RU,
|
||||
):
|
||||
from dubbing.config import settings
|
||||
|
||||
project_dir = settings.projects_dir / project_name
|
||||
self.paths = ProjectPaths.from_project(project_dir, language)
|
||||
self.model_name = model_name
|
||||
self.language = language
|
||||
self.steps = self._create_steps()
|
||||
|
||||
def _create_steps(self) -> list:
|
||||
return [
|
||||
ExtractAudioStep(self.paths),
|
||||
ASRStep(self.paths),
|
||||
TranslateStep(self.paths, self.model_name, self.language),
|
||||
TTSStep(self.paths, self.language),
|
||||
MixStep(self.paths),
|
||||
FinalizeStep(self.paths),
|
||||
]
|
||||
|
||||
def get_cache_status(self) -> list[StepStatus]:
|
||||
return [
|
||||
StepStatus(
|
||||
name=step.name,
|
||||
cached=step.is_cached(),
|
||||
output_exists=step.is_cached(),
|
||||
)
|
||||
for step in self.steps
|
||||
]
|
||||
|
||||
def clean_from_step(self, step_index: int) -> None:
|
||||
for step in self.steps[step_index:]:
|
||||
step.clean()
|
||||
|
||||
async def run(self, rebuild_from: int = -1) -> None:
|
||||
if rebuild_from >= 0:
|
||||
console.print(
|
||||
f"[yellow]Cleaning from step: {self.steps[rebuild_from].name}[/]"
|
||||
)
|
||||
self.clean_from_step(rebuild_from)
|
||||
|
||||
for i, step in enumerate(self.steps):
|
||||
if step.is_cached():
|
||||
console.print(f"[dim]Skipping {step.name} (cached)[/]")
|
||||
continue
|
||||
|
||||
console.print(
|
||||
f"\n[bold cyan]Step {i + 1}/{len(self.steps)}: {step.name}[/]"
|
||||
)
|
||||
await step.run()
|
||||
|
||||
console.print("\n[bold green]Pipeline completed![/]")
|
||||
Reference in New Issue
Block a user