========== YENİ KOMUT | 16.09.2026 15:29:48 ==========
========== YENİ KOMUT | 16.09.2026 15:29:48 ==========
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-28-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-29-Ayrıntılı yerel yollar, Montaj proje iskeleti ve doğrulama komutları için `references/montaj-fast-path.md` dosyasını oku. Her görevde yeniden Montaj dokümantasyonu arama.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-30-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-31-- Önce mevcut Montaj, Edge TTS ve FFmpeg kurulumunu kullan; yeniden kurma.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-32-- Montaj şeması belirsiz değilse kaynak kod/doküman taraması yapma.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-33-- Yalnızca gerçek bir hata veya yeni bir Montaj özelliği gerekiyorsa ilgili yerel belgeyi oku.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-34-- Uzun komutlarda PATH’e güvenme; referanstaki mutlak Montaj launcher’ını kullan.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:35:- Değişmeyen source-sheet, shot, annotation ve deterministic QA çıktısını yeniden üretme; içerik/parametre imzasına dayalı cache kullan.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-36-- Hazır 1080×1920 görsel master yalnız ses ile birleşecekse Montaj re-encode varsayma; önce FFmpeg direct mux yolunu kullan.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-37-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-38-## Temel Standartlar
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-39-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-40-### 1. Gerçek dikey kadraj
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-41-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-42-- Çıktı **1080×1920**, **9:16**, tercihen **30 fps** olmalı.
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-134-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-135-## Faz Kapılı Hızlı Üretim Prosedürü
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-136-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-137-Amaç yalnız render süresini değil, ana model agent-loop sayısını da azaltmaktır. Aynı üretimde `ara → oku → yaz → çalıştır → tekrar ara` biçimindeki mikro turları çoğaltma.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-138-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-139-### Faz 1 — Tek planlama turu
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-140-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:141:Üretime başlamadan önce tam **bir kez** `delegate_task` çağır. `goal` mutlaka `HERMES_CREATIVE_DIRECTOR` ile başlasın. Bu delegation tamamlanıp creative contract geri dönmeden asset arama, terminal, pipeline, TTS, render veya başka production tool çağrısı başlatma.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-142-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-143-Creative Director'a şu sınırlar ve hedefler ver:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-144-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-145-**IMMUTABLE TECHNICAL BASELINE**
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-146-- Ana executor `gpt-5.6-sol` olarak kalır.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-147-- Current Golden TTS yolu değişmez: Google `tr-TR-Chirp3-HD-Algieba`, rate `0.90`.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-148-- Mevcut v0.5 pipeline/helper/QA yolu, model/provider, config, kod ve servisler değiştirilemez veya alternatiflenemez.
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-156-- payoff'ın görsel olarak kapanmaması
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-157-- gereksiz tool / method churn
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-158-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-159-**CREATIVE AUTHORITY**
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-160-- konuya özgü hook ve visual thesis
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-161-- real-footage-first omurga
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-162-- yaklaşık 6–8 anlamlı shot ile güçlü progression
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:163:- asset çeşitliliği ve batch asset discovery hedefleri
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-164-- yalnız görünmeyen mekanizma için kısa grafik/annotation
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-165-- net, görünür payoff
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-166-- narration'ın içerik/dramatik akışı
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-167-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-168-Astra çözüm yönteminde yaratıcı olarak serbesttir; yukarıdaki teknik baseline'a müdahale edemez. Web/terminal/browser/TTS/Vision veya production tool kullanmaz. Uzun manifesto, alternatif A/B/C planları, temporary helper, micro-loop veya ikinci re-plan üretmez.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-169-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-170-Tek çıktı kısa ve uygulanabilir bir contract olsun:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:171:`creative_thesis -> hook -> narration_arc -> shot progression -> mechanism -> payoff -> batch_asset_targets -> creative_donts`
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-172-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-173-Bu production request içinde ikinci Astra delegation yapma. Sol, dönen contract'ı yaratıcı yön olarak kullanır ve teknik execution'ı mevcut Golden kurallarıyla kendisi tamamlar.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-174-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-175-Tek ana-model turunda mümkün olduğunca birlikte çöz:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-176-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-177-- izleyici vaadi, hook, payoff ve kısa Türkçe narration;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-178-- seçilmiş TTS sesi ve hız/pitch değerleri;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-179-- VTT zamanlamasını kullanacak altyazı yaklaşımı;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:180:- her beat için shot manifesti ve mevcut yerel asset yolu;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-181-- final çıktı yolu ve kabul kriterleri.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-182-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:183:Mevcut workspace ve asset yolları biliniyorsa `/home/hermes` genelinde tekrar `search_files` taraması yapma. Bilinen proje dizinini ve mevcut manifest/cache bilgisini kullan.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-184-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-185-TTS sesi henüz seçilmemişse iki ücretsiz Türkçe sesi kısa aynı örnekle karşılaştır; seçim yapıldıktan sonra üretim fazında tekrar ses keşfi yapma.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-186-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-187-### Faz 2 — Deterministic fast pipeline
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-188-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-189-Narration, seçilmiş voice ve shot manifest kesinleşince tek seferlik medya işlemleri için:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-190-
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-202-- VTT tabanlı en fazla iki satır ASS altyazı;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-203-- full final encode öncesi gerçek glyph bbox guardrail;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-204-- seçilmiş shot'lardan tek 1080×1920 visual master;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-205-- hazır master + ses için FFmpeg direct mux ve `-c:v copy`;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-206-- video stream hash kontrolü;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-207-- probe, decode, black/freeze ve loudness QA;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-208-- tek final contact sheet;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:209:- TTS, bbox, visual master, final mux ve deterministic QA cache.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-210-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:211:Değişmeyen manifest ve girdilerde cache'i yeniden kullan. Aynı deterministic adımı doğrulama amacıyla tekrar üretme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-212-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-213-Helper için geçici tek-seferlik bbox scripti, yeni Python ortamı veya yeniden keşfedilmiş FFmpeg/Montaj yolları oluşturma. Helper teknik olarak başarısız olursa yalnız hatalı bileşeni teşhis et.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-214-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-215-### Faz 3 — Tek görsel QA geçidi
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-216-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-217-Deterministic pipeline PASS verdikten sonra yalnız final contact sheet'i `vision_analyze` ile değerlendir.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-218-
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-224-- Türkçe yazım/karakterler;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-225-- gerçek footage önceliği ve shot çeşitliliği;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-226-- render bozulması;
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-227-- anlatım ile görselin semantik uyumu.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-228-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-229-PASS ise yeniden render veya ikinci contact sheet üretme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-230-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:231:FAIL ise yalnız doğrulanmış kusuru etkileyen shot/overlay/altyazıyı değiştir ve pipeline'ı yeniden çalıştır. Cache sağlam kalan aşamaları yeniden üretmemelidir.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-232-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-233-### Faz 4 — Teslim
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-234-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-235-Tek final MP4 teslim et. Son raporu kısa tut ve yalnız doğrulanmış metrikleri yaz.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-236-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:237:Ana GPT için hedef, standart mevcut-asset Shorts üretiminde yaklaşık **12–18 agent-loop çağrısı veya daha azıdır**. Bu sayı kalite kriterlerini atlamak için değil, bağımsız tool çağrılarını aynı fazda toplamak ve deterministic işleri script'e taşımak için bir verimlilik guardrail'idir.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-238-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-239-## Montaj Kullanım Kararı
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-240-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-241-- **Hazır görsel master + yalnız ses/müzik:** FFmpeg direct mux varsayılandır. Video üzerinde değişiklik gerekmiyorsa `-c:v copy` ile video stream’i yeniden encode etme.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-242-- **Kısa, düzenlenebilir, zamanlı katman:** Montaj JSX overlay kullan.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-243-- **Gerçek timeline edit/composite:** Montaj kullan; validate sonrası yalnız gerekli final render’ı yap.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-244-- **Uzun ve her karede değişen JSX:** Puppeteer maliyetlidir; önceden render edilmiş görsel master daha az ajan turu ve yeniden render üretir.
--
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-250-- Altyazıyı üç satıra zorlamak ya da kenara kadar uzatmak.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-251-- Whisper’ın yanlış Türkçe kelimelerini altyazıya aynen taşımak.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-252-- TTS hızını agresif artırmak veya ilk heceyi fade/padding olmadan kesmek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-253-- Tek fotoğrafı 5–10 saniye küçük bir zoom bile olmadan göstermek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-254-- Anlamlı bir mekanizmayı yalnızca dekoratif parçacıklarla geçiştirmek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-255-- Bbox/preflight guardrail geçmeden pahalı final render’a girmek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-256-- Hazır video master’ı yalnız ses eklemek için Montaj’da yeniden encode etmek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:257:- Değişmeyen source-sheet, shot, annotation veya QA çıktısını cache varken yeniden üretmek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md:258:- Bilinen workspace varken tüm home dizininde tekrar asset aramak veya üretim içinde tek-seferlik bbox/QA scriptleri yeniden yazmak.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-259-- Background süreçte PATH’e güvenip `montaj: command not found` hatasına düşmek.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-260-- Başarılı tool çıkışını teslim başarısı saymak; final MP4’ü yeniden probe ve görsel QA ile doğrulamak.
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-261-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-262-## Doğrulama Geçidi
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-263-
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-264-Teslimden önce bunların tamamı doğru olmalı:
/home/hermes/.hermes/skills/media/shorts-core/SKILL.md-265-
--
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-117- score += 220
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-118- return score
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-119-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-120-def split_text(text, max_chars=29):
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-121- words = text.split()
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-122- lines, cur = [], []
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-123- for w in words:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:124: candidate = " ".join(cur + [w])
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:125: if cur and len(candidate) > max_chars:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-126- lines.append(" ".join(cur))
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-127- cur = [w]
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-128- else:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-129- cur.append(w)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-130- if cur:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-131- lines.append(" ".join(cur))
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-132- return lines
--
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-188- p = Path(path)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-189- if not p.exists() or p.read_text(encoding="utf-8") != content:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-190- p.write_text(content, encoding="utf-8")
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-191-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-192-def bbox_check(ass, work):
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-193- ass = Path(ass)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-194- raw = ass.read_text(encoding="utf-8")
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:195: cache = work / ".bbox.json"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-196- sig = hashlib.sha256(ass.read_bytes() + f"|bbox-v{VERSION}".encode()).hexdigest()
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:197: if cache.exists():
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-198- try:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:199: c = json.loads(cache.read_text(encoding="utf-8"))
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-200- if c.get("sig") == sig and c.get("pass") is True:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-201- return
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-202- except Exception:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-203- pass
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-204- head = raw.split("[Events]")[0] + (
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-205- "[Events]\n"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-206- "Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n"
--
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-256- report = {"pass": all(x["ok"] for x in rows), "rows": rows}
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-257- (work / "bbox_report.json").write_text(
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-258- json.dumps(report, ensure_ascii=False, indent=2),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-259- encoding="utf-8"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-260- )
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-261- if not report["pass"]:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-262- raise SystemExit("BBOX_FAIL")
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:263: cache.write_text(
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-264- json.dumps({"sig": sig, "pass": True}, indent=2),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-265- encoding="utf-8"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-266- )
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-267-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-268-def build_master(shots, duration, ass, out):
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-269- if not shots:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-270- raise SystemExit("NO_SHOTS")
--
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-403- "rate": google_rate,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-404- "pad_start": pad_start,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-405- "pad_end": pad_end,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-406- }, sort_keys=True, ensure_ascii=False).encode()
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-407- ).hexdigest()
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-408- tts_meta = work / ".tts.json"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-409-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:410: cached_tts = False
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-411- if tts_meta.exists() and raw_google_wav.exists() and raw_vtt.exists() and wav.exists():
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-412- try:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:413: cached_tts = json.loads(tts_meta.read_text()).get("sig") == tts_sig
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-414- except Exception:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-415- pass
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-416-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:417: if not cached_tts:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-418- run([
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-419- GOOGLE_TTS,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-420- "--voice", voice,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-421- "--text", narration,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-422- "--out", str(raw_google_wav),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-423- "--rate", str(google_rate),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-424- ])
--
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-447- visual_sig = stamp(
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-448- shot_paths + [ass],
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-449- json.dumps(shots, sort_keys=True, ensure_ascii=False) + f"|dur={audio_duration:.6f}"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-450- )
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-451- visual_meta = work / ".visual.json"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-452- master = work / "visual_master.mp4"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-453-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:454: cached_visual = False
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-455- if visual_meta.exists() and master.exists():
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-456- try:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:457: cached_visual = json.loads(visual_meta.read_text()).get("sig") == visual_sig
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-458- except Exception:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-459- pass
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-460-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:461: if not cached_visual:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-462- build_master(shots, audio_duration, ass, master)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-463- visual_meta.write_text(json.dumps({"sig": visual_sig}), encoding="utf-8")
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-464-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-465- final = Path(m.get("output", work / "final.mp4")).resolve()
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-466- final.parent.mkdir(parents=True, exist_ok=True)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-467-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-468- mux_extra = "loudnorm=-16,-1.5,11|aac=192k|ar=48000|shortest|copy-video"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-469- final_sig = stamp([master, wav], mux_extra)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-470- final_meta = work / ".final.json"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:471: cached_final = False
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-472- final_info = {}
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-473-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-474- if final_meta.exists() and final.exists():
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-475- try:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-476- final_info = json.loads(final_meta.read_text(encoding="utf-8"))
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:477: cached_final = final_info.get("sig") == final_sig
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-478- except Exception:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-479- pass
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-480-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:481: if not cached_final:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-482- run([
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-483- FFMPEG, "-y", "-v", "error",
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-484- "-i", str(master),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-485- "-i", str(wav),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-486- "-map", "0:v:0",
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-487- "-map", "1:a:0",
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-488- "-c:v", "copy",
--
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-520- encoding="utf-8"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-521- )
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-522- else:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-523- final_md5 = final_info["video_md5"]
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-524-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-525- qa_sig = stamp([final], "deterministic-final-qa-v1")
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-526- qa_meta = work / ".qa.json"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:527: cached_qa = False
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-528-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-529- if qa_meta.exists() and (work / "final_contact_sheet.jpg").exists():
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-530- try:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:531: cached_qa = json.loads(
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-532- qa_meta.read_text(encoding="utf-8")
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-533- ).get("sig") == qa_sig
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-534- except Exception:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-535- pass
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-536-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:537: if not cached_qa:
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-538- qa(final, work)
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-539- qa_meta.write_text(
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-540- json.dumps({"sig": qa_sig, "pass": True}, indent=2),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-541- encoding="utf-8"
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-542- )
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-543-
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-544- result = {
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-545- "pass": True,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-546- "version": VERSION,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:547: "cached_tts": cached_tts,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:548: "cached_visual": cached_visual,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:549: "cached_final": cached_final,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py:550: "cached_qa": cached_qa,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-551- "duration": probe_duration(final),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-552- "final": str(final),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-553- "contact_sheet": str(work / "final_contact_sheet.jpg"),
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-554- "video_md5": final_md5,
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-555- }
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-556- (work / "pipeline_result.json").write_text(
/home/hermes/.hermes/skills/media/shorts-core/scripts/shorts_fast_pipeline.py-557- json.dumps(result, ensure_ascii=False, indent=2),
root@213-238-170-219:~#