lazier

personal summarizer
Log | Files | Refs | README

commit 140a05669abf37e69850f24d9e84504346f1914f
parent 5bbcd6d69fd1b234f66583972fdb61fee345ec7c
Author: Pablo Murad <pablo@pablomurad.com>
Date:   Sat, 31 Jan 2026 15:44:52 -0300

changes

Diffstat:
Mlazier/api/routes.py | 18++++++++++++++++++
Mlazier/cli.py | 6++++++
Mlazier/core/formats.py | 6+++---
Mlazier/docx_generator.py | 2+-
4 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/lazier/api/routes.py b/lazier/api/routes.py @@ -528,6 +528,12 @@ def process_youtube_async(url: str, job_id: str, output_format: str, should_tran 'timestamp': datetime.now().isoformat(), }) + # Garantir link do vídeo no cabeçalho do documento + if metadata is None: + metadata = {} + if not metadata.get('webpage_url'): + metadata = {**metadata, 'webpage_url': url} + # Gera arquivo consolidado apenas se ambos foram solicitados OU se apenas transcrever (sem arquivo separado) should_generate_consolidated = False if should_transcribe and should_summarize: @@ -615,6 +621,7 @@ def process_video_url_async(url: str, job_id: str, output_format: str, should_tr should_summarize=should_summarize, cache_prefix='video', url_hash=calculate_url_hash(url), + url=url, ) except Exception as e: if jobs[job_id].get('status') != 'failed': @@ -632,6 +639,7 @@ def _run_video_pipeline( should_summarize: bool, cache_prefix: str, url_hash: str, + url: str = "", ): """Pipeline comum: transcrever, sumarizar, exportar, cache. Usado por YouTube e vídeo genérico.""" if 'transcription' not in jobs[job_id]: @@ -652,6 +660,11 @@ def _run_video_pipeline( transcription_internal = cached.get('transcription') summary = cached.get('summary') metadata = cached.get('metadata', metadata) + # Garantir link do vídeo no cabeçalho do documento + if metadata is None: + metadata = {} + if url and not metadata.get('webpage_url'): + metadata = {**metadata, 'webpage_url': url} if should_transcribe: transcription = transcription_internal if transcription_internal and (not should_summarize or summary): @@ -681,6 +694,11 @@ def _run_video_pipeline( 'metadata': metadata, 'timestamp': datetime.now().isoformat(), }) + # Garantir link do vídeo no cabeçalho do documento (também quando não veio do cache) + if metadata is None: + metadata = {} + if url and not metadata.get('webpage_url'): + metadata = {**metadata, 'webpage_url': url} should_generate_consolidated = (should_transcribe and should_summarize) or (should_transcribe and not should_summarize and not transcription_path) if should_generate_consolidated: broadcast_progress(job_id, 90, 'processing', 'Gerando arquivo de saída...') diff --git a/lazier/cli.py b/lazier/cli.py @@ -327,6 +327,12 @@ def process_input( # Gera arquivo de saída task6 = progress.add_task(f"[blue]Gerando arquivo {format_type.upper()}...", total=100) + # Garantir link do vídeo no cabeçalho quando o input é URL (YouTube ou vídeo genérico) + if metadata is None: + metadata = {} + if not metadata.get('webpage_url') and input_path.strip().startswith(('http://', 'https://')): + metadata = {**metadata, 'webpage_url': input_path.strip()} + if not output: output = get_output_filename(input_path) # Adiciona extensão correta diff --git a/lazier/core/formats.py b/lazier/core/formats.py @@ -57,7 +57,7 @@ def export_txt( lines.append(f"Canal/Criador: {metadata['uploader']}") if metadata.get('webpage_url'): - lines.append(f"URL: {metadata['webpage_url']}") + lines.append(f"Link do vídeo: {metadata['webpage_url']}") lines.append("") lines.append("-" * 80) @@ -145,7 +145,7 @@ def export_markdown( lines.append(f"- **Canal/Criador:** {metadata['uploader']}") if metadata.get('webpage_url'): - lines.append(f"- **URL:** [{metadata['webpage_url']}]({metadata['webpage_url']})") + lines.append(f"- **Link do vídeo:** [{metadata['webpage_url']}]({metadata['webpage_url']})") lines.append("") @@ -311,7 +311,7 @@ def export_pdf( if metadata.get('uploader'): meta_line += f" | Canal/Criador: {sanitize_xml_string(str(metadata['uploader']))}" if metadata.get('webpage_url'): - meta_line += f" | URL: {sanitize_xml_string(str(metadata['webpage_url']))}" + meta_line += f" | Link do vídeo: {sanitize_xml_string(str(metadata['webpage_url']))}" story.append(Paragraph(sanitize_xml_string(meta_line), body_style)) story.append(Spacer(1, 16)) diff --git a/lazier/docx_generator.py b/lazier/docx_generator.py @@ -62,7 +62,7 @@ def create_document( metadata_section.add_run(sanitize_xml_string(str(metadata['uploader']))) if metadata.get('webpage_url'): - metadata_section.add_run('\nURL: ').bold = True + metadata_section.add_run('\nLink do vídeo: ').bold = True metadata_section.add_run(sanitize_xml_string(str(metadata['webpage_url']))) # Espaçamento