========== YENİ KOMUT | 16.09.2026 15:34:45 ==========
=== SKILL ASSET/DISCOVERY ===
25-**Kullanma:** Yatay uzun video, salt ses dosyası, carousel veya statik görsel teslimlerinde.
26-
27-## Hazır Araçlar ve Tekrar Kullanım
28-
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.
30-
31-- Önce mevcut Montaj, Edge TTS ve FFmpeg kurulumunu kullan; yeniden kurma.
32-- Montaj şeması belirsiz değilse kaynak kod/doküman taraması yapma.
33-- Yalnızca gerçek bir hata veya yeni bir Montaj özelliği gerekiyorsa ilgili yerel belgeyi oku.
34-- Uzun komutlarda PATH’e güvenme; referanstaki mutlak Montaj launcher’ını kullan.
35:- Değişmeyen source-sheet, shot, annotation ve deterministic QA çıktısını yeniden üretme; içerik/parametre imzasına dayalı cache kullan.
36-- Hazır 1080×1920 görsel master yalnız ses ile birleşecekse Montaj re-encode varsayma; önce FFmpeg direct mux yolunu kullan.
37-
38-## Temel Standartlar
39-
40-### 1. Gerçek dikey kadraj
41-
42-- Çıktı **1080×1920**, **9:16**, tercihen **30 fps** olmalı.
43-- Tüm ekran aktif içerikle dolmalı. Siyah bant, boş üst/alt alan veya yatay görseli küçük bir kart gibi ortalama yok.
44-- Yatay kaynakları `cover` mantığıyla crop et; özneyi koruyan focal point seç ve gerektiğinde zoom/pan uygula.
45-- Bulanık dolgu ancak özneyi korumak için zorunluysa kullanılabilir; varsayılan tam ekran crop’tur.
46-
47-### 2. Visual Direction / Gerçek Video Önceliği
48-
49-**Varsayılan prensip: GERÇEK FOOTAGE ÖNCE, AÇIKLAYICI ANİMASYON GEREKTİĞİNDE.** Bunu sabit yüzde veya her videoda aynı reçete olarak değil, konunun doğasına göre uygula.
50-
51:- Hareketli grafik, pan/zoom yapılan fotoğraf veya kayan kart tek başına video kabul edilmez. Gerçek dünyada görüntülenebilen konularda ana görsel malzeme gerçek hareketli footage/B-roll olmalı.
52:- Gerçek bir davranış, olay, nesne veya ortam görüntülenebiliyorsa önce gerçek footage kullan. “Söylemek yerine göster”: anlatılan fiziksel davranış gerçekten görüntülenebiliyorsa onu göster.
53-- Animasyonu görünmeyen mekanizma, süreç, karşılaştırma, sıralama veya neden-sonuç açıklaması için kullan. Grafik gerçek görüntünün yerine geçmemeli; onu açıklamalı.
54-- Fotoğraf destekleyici malzemedir. Sırf zoom/pan vererek videonun ana omurgasına dönüştürme; gerektiğinde annotation, belge, harita veya bağlamla belirli bir anlatı görevi ver.
55-- Aynı grid, yuvarlatılmış kart, ortalanmış başlık, easing, kamera açısı ve kompozisyon sistemini videolar arasında veya aynı videoda mekanik biçimde tekrarlama.
56:- Gerçek footage, yakın plan, POV, ekran görüntüsü/kaydı, gerçek fotoğraf üzerine annotation, tipografi, infografik ve gerektiğinde 2D animasyonu konuya göre karıştır. Her sahneyi aynı görsel dilin varyasyonu yapma.
57:- Gerçek footage ile grafik/animasyon arasında anlamlı geçiş kur: görüntüdeki nesne, hareket, şekil, renk veya ses grafik açıklamaya köprü olmalı.
58-- Büyük vurgu metni veya grafik etiketi altyazıyla aynı cümleyi gereksiz yere tekrar etmemeli; biri bağlamı, diğeri anahtar bilgiyi taşımalı.
59-- Animasyonların açı, hareket eğrisi, kompozisyon ve ritmini bilinçli çeşitlendir; mekanik şablon varyasyonu görünümünden kaçın.
60:- Shot map’te her beat’i `footage | close-up | POV | screen | photo | annotation | typography | infographic | animation` olarak etiketle ve neden seçildiğini yaz.
61-
62-### 3. Güvenli altyazı
63-
64-- Her kenarda en az **%8 güvenli boşluk** bırak: 1080 genişlikte en az 86 px; 1920 yükseklikte en az 154 px.
65-- Altyazı **en fazla 2 satır** olmalı. Üçüncü satır oluşuyorsa fontu küçült, kelimeleri iki satıra yeniden dengele veya segmenti böl.
66-- Metin kutusunun tamamı güvenli alanda kalmalı; yalnızca harflerin değil arka plan kutusunun da taşmadığını doğrula.
67-- Türkçe karakterleri koru. Kaynak transkript hatalıysa altyazıya taşımadan önce senaryo metniyle düzelt.
68-- Shorts arayüzünü düşünerek altyazıyı alt kenara yapıştırma; alt güvenli alandan belirgin biçimde yukarıda tut.
69-
70-### 4. Doğal Türkçe TTS
--
73-- Mevcut ücretsiz Türkçe seslerden en az iki uygun adayı aynı kısa örnekle karşılaştır; konu ve anlatım tonuna en doğal gelen sesi seç. `tr-TR-AhmetNeural` yalnızca varsayılan adaydır, zorunlu değildir.
74-- Doğal perdeye yakın kullan; aşırı pitch değişimi yapma.
75-- Konuşma hızını içerik yoğunluğuna göre ayarla; sırf süreye sığdırmak için gereksiz hızlandırma yapma. Belgesel/anlatı için genellikle `+0%`–`+8%` doğal aralıktır.
76-- Önce TTS’yi üret, sonra gerçek VTT zamanlarını sahne ve altyazı planının kaynağı yap.
77-- İlk kelime/heceyi korumak için sesin başına en az **150–200 ms**, sonuna **200 ms** sessizlik ekle. TTS’nin kendi sessizliği olsa bile padding’i doğrula.
78-- Padding sonrası altyazı ve sahne zamanlarını aynı miktarda kaydır.
79-- TTS’yi tekrar sıkıştırmak yerine mümkünse padding’li WAV’ı Montaj’a ver.
80-
81-### 5. Statik slayt hissini engelle
82-
83:- Pan/zoom verilmiş fotoğrafı gerçek footage yerine koyma. Fotoğraf zorunluysa destekleyici ve kısa kullan; annotation, belge detayı veya gerçek footage ile bağlantı kur.
84-- Aynı görsel kompozisyonunu yaklaşık **2–3 saniyeden uzun** kesintisiz tutmayı QA uyarısı say; fakat otomatik kesme reçetesi yapma. Uzun cümleyi anlamlı alt beat’lere böl ve gerçek hareket varsa planı yalnız süre doldu diye kesme.
85-- Rastgele hızlı kesme yapma. Kesme noktaları cümle, yan cümle, vurgu veya anlatı beat’iyle eşleşmeli.
86-- Aynı kaynak görsel yeniden kullanılacaksa farklı crop, focal point, zoom yönü veya renk tonu ile yeni bir kompozisyon oluştur.
87-- Hareketin gerçekten var olduğunu `freezedetect` ve farklı zamanlardan kareler ile doğrula.
88-
89-### 6. Anlamlı grafik ve animasyon
90-
91-- Anlatımda **süreç, sıralama, karşılaştırma, mekanizma veya neden-sonuç** varsa yalnızca fotoğraf gösterme; sesle senkron açıklayıcı grafik/animasyon üret.
92-- Grafik yalnızca estetik süs değil, cümlenin anlamını görünür kılmalı.
93-- Örnek eşlemeler:
--
142-
143-Creative Director'a şu sınırlar ve hedefler ver:
144-
145-**IMMUTABLE TECHNICAL BASELINE**
146-- Ana executor `gpt-5.6-sol` olarak kalır.
147-- Current Golden TTS yolu değişmez: Google `tr-TR-Chirp3-HD-Algieba`, rate `0.90`.
148-- Mevcut v0.5 pipeline/helper/QA yolu, model/provider, config, kod ve servisler değiştirilemez veya alternatiflenemez.
149-- TTS/voice/rate, model/provider, pipeline/helper, QA mimarisi veya teknik orchestration önerme.
150-
151-**KNOWN FAILURE LESSONS — çözüm yöntemi dayatma, problemi çöz**
152:- repeated / same-family footage
153-- uzun generic infographic veya card blokları
154-- cross-video template smell
155-- zayıf shot progression
156-- payoff'ın görsel olarak kapanmaması
157-- gereksiz tool / method churn
158-
159-**CREATIVE AUTHORITY**
160-- konuya özgü hook ve visual thesis
161:- real-footage-first omurga
162-- yaklaşık 6–8 anlamlı shot ile güçlü progression
163:- asset çeşitliliği ve batch asset discovery hedefleri
164-- yalnız görünmeyen mekanizma için kısa grafik/annotation
165-- net, görünür payoff
166-- narration'ın içerik/dramatik akışı
167-
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.
169-
170-Tek çıktı kısa ve uygulanabilir bir contract olsun:
171-`creative_thesis -> hook -> narration_arc -> shot progression -> mechanism -> payoff -> batch_asset_targets -> creative_donts`
172-
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.
--
215-### Faz 3 — Tek görsel QA geçidi
216-
217-Deterministic pipeline PASS verdikten sonra yalnız final contact sheet'i `vision_analyze` ile değerlendir.
218-
219-Kontrol et:
220-
221-- gerçek 9:16 tam ekran;
222-- siyah/boş bant veya yanlış crop;
223-- en fazla iki satır altyazı ve safe area;
224-- Türkçe yazım/karakterler;
225:- gerçek footage önceliği ve shot çeşitliliği;
226-- render bozulması;
227-- anlatım ile görselin semantik uyumu.
228-
229-PASS ise yeniden render veya ikinci contact sheet üretme.
230-
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.
232-
233-### Faz 4 — Teslim
234-
235-Tek final MP4 teslim et. Son raporu kısa tut ve yalnız doğrulanmış metrikleri yaz.
--
247-## Kaçınılacak Hatalar
248-
249-- 1080×1920 canvas içinde küçük yatay fotoğraf veya siyah bant bırakmak.
250-- Altyazıyı üç satıra zorlamak ya da kenara kadar uzatmak.
251-- Whisper’ın yanlış Türkçe kelimelerini altyazıya aynen taşımak.
252-- TTS hızını agresif artırmak veya ilk heceyi fade/padding olmadan kesmek.
253-- Tek fotoğrafı 5–10 saniye küçük bir zoom bile olmadan göstermek.
254-- Anlamlı bir mekanizmayı yalnızca dekoratif parçacıklarla geçiştirmek.
255-- Bbox/preflight guardrail geçmeden pahalı final render’a girmek.
256-- Hazır video master’ı yalnız ses eklemek için Montaj’da yeniden encode etmek.
257:- Değişmeyen source-sheet, shot, annotation veya QA çıktısını cache varken yeniden üretmek.
258-- Bilinen workspace varken tüm home dizininde tekrar asset aramak veya üretim içinde tek-seferlik bbox/QA scriptleri yeniden yazmak.
259-- Background süreçte PATH’e güvenip `montaj: command not found` hatasına düşmek.
260-- Başarılı tool çıkışını teslim başarısı saymak; final MP4’ü yeniden probe ve görsel QA ile doğrulamak.
261-
262-## Doğrulama Geçidi
263-
264-Teslimden önce bunların tamamı doğru olmalı:
265-
266-- [ ] Video 1080×1920, 9:16 ve tüm kare aktif içerikle dolu.
267-- [ ] Siyah/boş üst-alt alan yok.
268-- [ ] Bütün altyazılar en fazla 2 satır ve %8 safe area içinde.
269-- [ ] Hiçbir metin veya kutu kırpılmıyor.
270-- [ ] Türkçe TTS doğal hızda; ilk/son kelime kesilmiyor; padding doğrulandı.
271:- [ ] Gerçek dünyada görüntülenebilen ana beat’lerde gerçek hareketli footage/B-roll kullanılıyor; pan/zoom fotoğraf videonun omurgası değil.
272-- [ ] Fotoğraf yalnız destekleyici görevde; gereksiz statik sahne veya yalnız kayan kartlardan oluşan bölüm yok.
273-- [ ] Sahne grameri konuya uygun çeşitleniyor; grid/kart/easing/kompozisyon mekanik biçimde tekrarlanmıyor.
274-- [ ] Grafik ve animasyon görünmeyen mekanizmayı açıklıyor; gerçek görüntünün yerine geçmiyor ve ona anlamlı geçişle bağlanıyor.
275-- [ ] Büyük vurgu metni altyazıyı gereksiz yere tekrar etmiyor.
276-- [ ] TTS metni konuşma dilinde; en az iki ücretsiz Türkçe ses karşılaştırılmış, ritim/durak/vurgu doğal ve ilk/son hece kesilmiyor.
277-- [ ] İlk kare/cümle anlaşılır vaat ve bilgi açığı kuruyor; final payoff bu vaadi karşılıyor.
278-- [ ] Her kesmenin anlatısal görevi var; aşırı bilişsel yük veya rastgele hızlandırma yok.
279-- [ ] Sahne değişimleri ve grafikler anlatım zamanlarıyla eşleşiyor; bakış yönü korunuyor.
280-- [ ] Süreç/sıralama/karşılaştırma/neden-sonuç anlatımı anlamlı animasyonla destekleniyor.
281-- [ ] Müzik konuşmayı bastırmıyor; her beat’te ses odağı belirgin ve clipping yok.
=== GUARD PROOF/CASTING ===
return _block(
"Shorts production guard: shorts-core is the sole production authority "
"for this footage-based Shorts/Reels turn. Do not load another production, "
"debug, installation, or QA skill. Continue with shorts-core and the canonical pipeline."
)
# Vision policy: do not impose arbitrary call counts.
# The agent may re-evaluate when the evidence or question genuinely changes.
# Only exact no-progress repetition of the same visual evidence + question is blocked.
if tool_name in {"browser_vision", "computer_use"} and not alternate_method:
return _block(
"Shorts production guard: this QA fallback is disabled during normal production. "
"Use vision_analyze as the primary visual QA path; if Vision is unavailable after "
"the permitted retry, continue with controlled QA_UNAVAILABLE rather than inventing a fallback."
)
if tool_name == "vision_analyze":
image_url = str(args.get("image_url") or "")
question = str(args.get("question") or "").strip()
raw = image_url[7:] if image_url.startswith("file://") else image_url
image_path = Path(raw).expanduser()
# Normal production gets exactly the two canonical visual judgment surfaces:
# proof/casting before render and final semantic QA after render. Source-sheet,
# range-sheet and ad-hoc asset-sheet inspections duplicate evidence and create
# expensive main-agent loops. This block does not abort the job; the agent
# continues with deterministic discovery and the canonical proof sheet.
if (
not alternate_method
and not explicit_system_change
and image_path.name not in {"proof_contact_sheet.jpg", "final_contact_sheet.jpg"}
):
return _block(
"Shorts production guard: AD_HOC_VISION_SKIPPED_FOR_TURN_ECONOMY — "
"do not open a separate source/range/asset Vision review. Select candidates "
"from metadata and the creative contract, build the manifest, then use the "
"single canonical proof_contact_sheet which already reviews hook, proof, "
"setup, insert and payoff casting. Continue the production; do not stop."
)
if image_path.name == "proof_contact_sheet.jpg":
pending_path = image_path.parent / "proof_pending.json"
current_fingerprint = None
pending = {}
try:
if pending_path.exists():
pending = json.loads(pending_path.read_text(encoding="utf-8"))
current_fingerprint = pending.get("fingerprint")
except Exception:
pending = {}
proof_state = _read_proof_attempt_state(image_path, pending)
if (
int(proof_state.get("failed_attempts") or 0) >= 2
and current_fingerprint
and proof_state.get("last_fingerprint") == current_fingerprint
):
return _block(
"Shorts production guard: PROOF_STRATEGY_EXHAUSTED — this proof strategy "
"already failed initial review plus one repair. Do not retry Vision on the "
"same accepted candidates/casting. Materially change the proof footage or "
"casting, rerun proof-check, and continue the production autonomously."
)
# Content identity matters more than filename: a repaired final_contact_sheet
# at the same path is new evidence and must be allowed to be judged again.
try:
image_identity = _sha_file(image_path.resolve())
except Exception:
image_identity = str(image_path)
normalized_question = re.sub(r"\s+", " ", question).strip()
sig_raw = json.dumps(
{
"session": session_id,
"image": image_identity,
"question": normalized_question,
},
ensure_ascii=False,
sort_keys=True,
)
signature = hashlib.sha256(sig_raw.encode("utf-8")).hexdigest()
with _LOCK:
if signature in _VISION_SEEN:
return _block(
"Shorts production guard: this exact visual evidence has already been "
"asked the same question. Reuse the existing result. If evidence was repaired "
"or the verification question genuinely needs correction, change the evidence "
"or question rather than repeating the same call."
)
return None
# During a production turn the agent may USE the installed toolchain, but may not redesign it.
if not explicit_system_change:
if tool_name == "skill_manage":
return _block(
"Shorts production guard: do not modify skills during a production job. "
"Use the current canonical pipeline and finish the artifact."
)
if tool_name in {"write_file", "patch"}:
path = str(
args.get("path")
or args.get("file_path")
or ""
)
if path.endswith("proof_receipt.json") or path.endswith("proof_pending.json"):
return _block(
"Shorts production guard: proof state is runtime-owned. "
"Do not write or patch proof receipts/pending attestations manually; "
"only a real vision_analyze PASS may issue the receipt."
)
if any(path.startswith(prefix) for prefix in _PROTECTED_PREFIXES):
return _block(
"Shorts production guard: production-time mutation of Hermes core/tools/skills "
root@213-238-170-219:~#