Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse files- __pycache__/armazenamento.cpython-314.pyc +0 -0
- __pycache__/nucleo.cpython-314.pyc +0 -0
- modelos/__pycache__/__init__.cpython-314.pyc +0 -0
- modelos/__pycache__/ace_step.cpython-314.pyc +0 -0
- modelos/__pycache__/base.cpython-314.pyc +0 -0
- modelos/__pycache__/escolha.cpython-314.pyc +0 -0
- modelos/__pycache__/qwen3_tts.cpython-314.pyc +0 -0
- modelos/__pycache__/qwen_image.cpython-314.pyc +0 -0
- modelos/__pycache__/wan22.cpython-314.pyc +0 -0
- nucleo.py +31 -2
__pycache__/armazenamento.cpython-314.pyc
CHANGED
|
Binary files a/__pycache__/armazenamento.cpython-314.pyc and b/__pycache__/armazenamento.cpython-314.pyc differ
|
|
|
__pycache__/nucleo.cpython-314.pyc
CHANGED
|
Binary files a/__pycache__/nucleo.cpython-314.pyc and b/__pycache__/nucleo.cpython-314.pyc differ
|
|
|
modelos/__pycache__/__init__.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/__init__.cpython-314.pyc and b/modelos/__pycache__/__init__.cpython-314.pyc differ
|
|
|
modelos/__pycache__/ace_step.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/ace_step.cpython-314.pyc and b/modelos/__pycache__/ace_step.cpython-314.pyc differ
|
|
|
modelos/__pycache__/base.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/base.cpython-314.pyc and b/modelos/__pycache__/base.cpython-314.pyc differ
|
|
|
modelos/__pycache__/escolha.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/escolha.cpython-314.pyc and b/modelos/__pycache__/escolha.cpython-314.pyc differ
|
|
|
modelos/__pycache__/qwen3_tts.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/qwen3_tts.cpython-314.pyc and b/modelos/__pycache__/qwen3_tts.cpython-314.pyc differ
|
|
|
modelos/__pycache__/qwen_image.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/qwen_image.cpython-314.pyc and b/modelos/__pycache__/qwen_image.cpython-314.pyc differ
|
|
|
modelos/__pycache__/wan22.cpython-314.pyc
CHANGED
|
Binary files a/modelos/__pycache__/wan22.cpython-314.pyc and b/modelos/__pycache__/wan22.cpython-314.pyc differ
|
|
|
nucleo.py
CHANGED
|
@@ -98,8 +98,36 @@ _carregado: Optional[str] = None
|
|
| 98 |
# declarados são 120 reservados: cabem até no chamador anônimo. O Wan cabe
|
| 99 |
# nisso porque o pedido também encolheu (3 s, 20 passos, 480p — ver
|
| 100 |
# `wan22.gerar`). Quem tiver mais cota sobe `VIDEO_GPU_SECONDS` no Space.
|
| 101 |
-
|
| 102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
_VAR_DURACAO = {"image": "IMAGE_GPU_SECONDS", "speech": "TTS_GPU_SECONDS",
|
| 104 |
"voice": "TTS_GPU_SECONDS", "music": "MUSIC_GPU_SECONDS",
|
| 105 |
"video": "VIDEO_GPU_SECONDS"}
|
|
@@ -236,6 +264,7 @@ def gerar(tipo: str, params_json: str) -> Iterator[Dict]:
|
|
| 236 |
saida, mime = modulo.gerar(params, progresso)
|
| 237 |
|
| 238 |
yield {"etapa": "Finalizando…", "progress": 97}
|
|
|
|
| 239 |
resultado = armazenamento.como_url_ou_base64(saida, mime)
|
| 240 |
resultado["mock"] = mbase.modo_mock()
|
| 241 |
_log(tipo, "completed")
|
|
|
|
| 98 |
# declarados são 120 reservados: cabem até no chamador anônimo. O Wan cabe
|
| 99 |
# nisso porque o pedido também encolheu (3 s, 20 passos, 480p — ver
|
| 100 |
# `wan22.gerar`). Quem tiver mais cota sobe `VIDEO_GPU_SECONDS` no Space.
|
| 101 |
+
def _audio_leve(dado: bytes, mime: str):
|
| 102 |
+
"""O WAV grande sai em MP3 (ou AAC). Medido em 14/10/2026: uma música de
|
| 103 |
+
48 s em WAV são ~9 MB (12 MB em base64), e o resultado nunca chegou ao
|
| 104 |
+
backend — o Space mostrou "Finalizando…" e o evento final não veio. O
|
| 105 |
+
MP3 da mesma música tem ~1 MB. Falhou a conversão, vai o WAV de antes."""
|
| 106 |
+
if mime != "audio/wav" or len(dado) < 1_500_000:
|
| 107 |
+
return dado, mime
|
| 108 |
+
try:
|
| 109 |
+
import subprocess, tempfile
|
| 110 |
+
import imageio_ffmpeg
|
| 111 |
+
exe = imageio_ffmpeg.get_ffmpeg_exe()
|
| 112 |
+
with tempfile.TemporaryDirectory() as d:
|
| 113 |
+
ent = os.path.join(d, "a.wav")
|
| 114 |
+
with open(ent, "wb") as f:
|
| 115 |
+
f.write(dado)
|
| 116 |
+
for args, ext, novo in ((["-c:a", "libmp3lame", "-b:a", "192k"], "mp3", "audio/mpeg"),
|
| 117 |
+
(["-c:a", "aac", "-b:a", "192k"], "m4a", "audio/mp4")):
|
| 118 |
+
sai = os.path.join(d, "a." + ext)
|
| 119 |
+
r = subprocess.run([exe, "-y", "-loglevel", "error", "-i", ent, *args, sai],
|
| 120 |
+
capture_output=True, timeout=60)
|
| 121 |
+
if r.returncode == 0 and os.path.exists(sai) and os.path.getsize(sai) > 1000:
|
| 122 |
+
with open(sai, "rb") as f:
|
| 123 |
+
return f.read(), novo
|
| 124 |
+
except Exception as e:
|
| 125 |
+
logger.warning("áudio leve: %s", str(e)[:160])
|
| 126 |
+
return dado, mime
|
| 127 |
+
|
| 128 |
+
|
| 129 |
+
_DURACAO_PADRAO = {"image": 80, "speech": 60, "voice": 60,
|
| 130 |
+
"music": 80, "video": 80} # 80 x 1,5 = 120 s: o teto medido do plano gratuito (14/10/2026)
|
| 131 |
_VAR_DURACAO = {"image": "IMAGE_GPU_SECONDS", "speech": "TTS_GPU_SECONDS",
|
| 132 |
"voice": "TTS_GPU_SECONDS", "music": "MUSIC_GPU_SECONDS",
|
| 133 |
"video": "VIDEO_GPU_SECONDS"}
|
|
|
|
| 264 |
saida, mime = modulo.gerar(params, progresso)
|
| 265 |
|
| 266 |
yield {"etapa": "Finalizando…", "progress": 97}
|
| 267 |
+
saida, mime = _audio_leve(saida, mime)
|
| 268 |
resultado = armazenamento.como_url_ou_base64(saida, mime)
|
| 269 |
resultado["mock"] = mbase.modo_mock()
|
| 270 |
_log(tipo, "completed")
|