Apunta los scripts de sync prod al Hetzner nuevo y suma trabajo pendiente
- sync_translations_to_prod.py / sync_audio_to_prod.py / sync_carta_from_prod.py: migran de FEA_PROD_HOST/PASS (CDMON, password) a FEA_PROD_SSH_HOST/PASS + FEA_PROD_DOCKER_CONTAINER (Hetzner/Coolify, auth por clave), con wrapping docker exec y el fix del bug de redirecciones (wc -c/cat) resuelto en el host en vez de dentro del contenedor. - fea_translate_helper.php: subcomando clone_new para clonar en ID local nuevo cuando el ID de prod ya está ocupado localmente. - translate_post.py: --dry-run. - tts_produce.py: --allow-default-voice (voz Nico solo si se permite explícitamente para autores sin voz clonada) + fix voice_for_author. - minimax_tts.py: parámetro speed en t2a/_synth_chunk. - mirror-antiguo/deploy/nginx-mirror.conf: redirects de URLs históricas de catálogo y vista imprimible EFFA. - Importaciones humanas de Pagola (carta 738) + scripts/manifest de la fase A Enrique, y release_issue181_prod.sh / cdmon-retire-fewp1.sh. - .gitignore: excluye docs/backups/ (dumps SQL, mismo motivo que backups/*). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+12
-2
@@ -29,7 +29,7 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import minimax_tts as mm # get_post_text, add_pauses, t2a, OUT
|
||||
import translate_post as tp # carta_article_ids
|
||||
|
||||
VOICE = "NicoFeadulta2026"
|
||||
VOICE = os.environ.get("FEA_TTS_VOICE", "NicoFeadulta2026")
|
||||
MODEL = "speech-2.8-hd"
|
||||
CONTAINER = "wordpress-web"
|
||||
PROD = Path(__file__).resolve().parent.parent / "wordpress/wp-content/uploads/tts"
|
||||
@@ -103,6 +103,8 @@ def main():
|
||||
help="para tras N audios OK en esta ejecución (0 = sin tope)")
|
||||
parser.add_argument("--dry-run", action="store_true",
|
||||
help="imprime la cola y sale, sin sintetizar ni gastar cuota")
|
||||
parser.add_argument("--allow-default-voice", action="store_true",
|
||||
help="permite Nico para autores sin voz digitalizada (desactivado por defecto)")
|
||||
args = parser.parse_args()
|
||||
if args.ids:
|
||||
os.environ["FEA_TTS_IDS"] = args.ids
|
||||
@@ -149,7 +151,15 @@ def main():
|
||||
i += 1
|
||||
continue
|
||||
|
||||
voice = mm.voice_for_author(author, VOICE)
|
||||
cloned_voice = mm.voice_for_author(author, "")
|
||||
if cloned_voice:
|
||||
voice = cloned_voice
|
||||
elif args.allow_default_voice:
|
||||
voice = VOICE
|
||||
else:
|
||||
log(f"#{pid}: autor sin voz digitalizada (author_id={author}); omitido")
|
||||
i += 1
|
||||
continue
|
||||
rc = mm.t2a(mm.add_pauses(text), voice, MODEL, f"prod-{pid}")
|
||||
if rc == 0:
|
||||
src = mm.OUT / f"prod-{pid}.mp3"
|
||||
|
||||
Reference in New Issue
Block a user