habulaj commited on
Commit
75a50e3
·
verified ·
1 Parent(s): 5807f65

Update routers/editor.py

Browse files
Files changed (1) hide show
  1. routers/editor.py +24 -14
routers/editor.py CHANGED
@@ -1,5 +1,5 @@
1
  from fastapi import APIRouter, HTTPException, UploadFile, File, Form
2
- from fastapi.responses import StreamingResponse
3
  from pydantic import BaseModel
4
  from typing import Optional, List, Dict, Any, AsyncGenerator, Tuple
5
  import os
@@ -45,6 +45,12 @@ class SmartCutRequest(BaseModel):
45
  window_end: float
46
  instruction: str
47
 
 
 
 
 
 
 
48
  # analyze_media has no request model — unlike every other endpoint here, it
49
  # takes a direct multipart upload (UploadFile + Form fields), not a JSON
50
  # body, precisely to avoid needing a hosted `media_url` at all (see
@@ -291,19 +297,23 @@ CATÁLOGO DE AÇÕES DISPONÍVEIS (campos entre colchetes são opcionais):
291
  "remove o silêncio desse vídeo", "corta as pausas", "tira os momentos
292
  sem fala", "deixa o vídeo mais dinâmico cortando o silêncio". Diferente
293
  de smart_cut_video: essa ação NÃO julga o CONTEÚDO da fala (não escolhe
294
- "as melhores partes") é puramente mecânico, mede o volume do áudio e
295
- corta os trechos abaixo de um limiar, então NÃO precisa de um campo
296
- "instruction" pra explicar o que manter. use "minSilenceSeconds"
297
- quando o usuário der um número explícito (ex: "remove pausas de mais de
298
- 1 segundo" `"minSilenceSeconds": 1`); sem isso, omita o campo e deixe o
299
- editor usar o padrão dele. "elementId" tem que ser um elemento de vídeo
300
- real do arquivo anexado (nunca um `refId` de um elemento que você acabou
301
- de criar). Essa ação roda inteiramente no navegador do usuário (sem
302
- round-trip de rede), mas ainda assim NÃO é aplicada na hora o editor
303
- ainda precisa decodificar o áudio do clipe primeiro. Por isso, quando
304
- usar essa ação, o texto da sua resposta deve deixar isso claro (ex: "Vou
305
- analisar o áudio e cortar os silêncios."), nunca afirmar que o corte
306
- foi feito.
 
 
 
 
307
 
308
  No máximo UMA ação assíncrona (smart_cut_video, analyze_media OU
309
  remove_silence_video — nunca duas ou mais na mesma resposta) por resposta —
 
1
  from fastapi import APIRouter, HTTPException, UploadFile, File, Form
2
+ from fastapi.responses import StreamingResponse, JSONResponse
3
  from pydantic import BaseModel
4
  from typing import Optional, List, Dict, Any, AsyncGenerator, Tuple
5
  import os
 
45
  window_end: float
46
  instruction: str
47
 
48
+ class DetectPausesRequest(BaseModel):
49
+ video_url: str
50
+ # Same window convention as SmartCutRequest above.
51
+ window_start: float
52
+ window_end: float
53
+
54
  # analyze_media has no request model — unlike every other endpoint here, it
55
  # takes a direct multipart upload (UploadFile + Form fields), not a JSON
56
  # body, precisely to avoid needing a hosted `media_url` at all (see
 
297
  "remove o silêncio desse vídeo", "corta as pausas", "tira os momentos
298
  sem fala", "deixa o vídeo mais dinâmico cortando o silêncio". Diferente
299
  de smart_cut_video: essa ação NÃO julga o CONTEÚDO da fala (não escolhe
300
+ "as melhores partes", não tem `instruction`) ela transcreve o clipe e
301
+ corta qualquer trecho SEM PALAVRA RECONHECIDA. Isso é deliberadamente
302
+ diferente de medir o volume do áudio: uma pausa de um palestrante pra
303
+ receber aplausos/risadas da plateia não é SILENCIOSA (a plateia faz
304
+ barulho), mas também não tem fala reconhecida então essa ação corta
305
+ isso corretamente, o que um limiar de volume sozinho não conseguiria.
306
+ use "minSilenceSeconds" quando o usuário der um número explícito (ex:
307
+ "remove pausas de mais de 1 segundo" `"minSilenceSeconds": 1`); sem
308
+ isso, omita o campo e deixe o editor usar o padrão dele (~0.6s).
309
+ "elementId" tem que ser um elemento de vídeo real do arquivo anexado
310
+ (nunca um `refId` de um elemento que você acabou de criar). Essa ação
311
+ NÃO é aplicada na hora o editor ainda precisa transcrever o áudio do
312
+ clipe primeiro (mais rápido que smart_cut_video, que ainda por cima
313
+ precisa de uma segunda passada do Gemini pra decidir o que manter — aqui
314
+ não há essa segunda passada). Por isso, quando usar essa ação, o texto da
315
+ sua resposta deve deixar isso claro (ex: "Vou ouvir o áudio e cortar as
316
+ pausas."), nunca afirmar que o corte já foi feito.
317
 
318
  No máximo UMA ação assíncrona (smart_cut_video, analyze_media OU
319
  remove_silence_video — nunca duas ou mais na mesma resposta) por resposta —