postkitty belgeleri

Eklentiyi kurun ve nasıl isteyeceğinizi öğrenin. Her aracı, yerleşimi, sınırı ve API uç noktasını burada bulursunuz.

Başlangıç

postkitty bir Hermes Agent eklentisidir. Bir kez kurun, yeni bir sohbet açın ve istediğinizi sade bir dille söyleyin.

Kurulum

Bunu terminalde çalıştırın. Eklenti resmî Hermes eklenti kataloğundan gelir.

hermes plugins install postkitty

Hermes, Python bağımlılıklarını ve eklentinin etkinleştirilmesini sorduğunda evet deyin. Komutun şu biçimi iki soruyu da atlar:

hermes plugins install postkitty --yes-deps --enable

Sonra yeni bir sohbet açın. Hermes bir eklentinin araçlarını bir sonraki sohbet başlarken yükler.

Kurulumu Hermes'e de yaptırabilirsiniz. Şu mesajı gönderin:

postkitty eklentisini benim için kur: terminalde `hermes plugins install postkitty --yes-deps --enable` komutunu çalıştır. Bitince, araçlarının yüklenmesi için yeni bir sohbet açmamı söyle.

Gerekenler

GerekenNe içinNasıl edinilir
Hermes Agent 0.22.7 veya üstü
Her şey
Sürümünüz daha eskiyse Hermes'i güncelleyin.
Beş Python paketi: OpenCV, NumPy, Pillow, regex ve ruamel.yaml
Fotoğraf, video ve sayım
Eklentiyle birlikte kurulur. Bir şey yapmanız gerekmez.
ffmpeg ve ffprobe
Yalnızca video
Hermes kendi ffmpeg'iyle gelir. Windows'ta ve çoğu Linux sisteminde video için başka bir şey kurmanız gerekmez. macOS'te bu kopyada ffprobe bulunmaz: bir kez brew install ffmpeg çalıştırın.
YuNet yüz algılama modeli
Fotoğraf ve video
postkitty modeli OpenCV Zoo'dan bir kez indirir ve sağlama toplamını doğrular.
libass içeren bir ffmpeg derlemesi
Yalnızca altyazı
Hermes'le gelen ffmpeg'de libass vardır. Kendi ffmpeg'inizi kullanıyorsanız /postkitty doctor çıktısındaki Captions satırına bakın.
Makinede kurulu bir yazı tipi
Yalnızca altyazı
Masaüstü bilgisayarlarda zaten vardır. Masaüstü ortamı olmayan bir sunucuda ya da konteynerde bir tane kurun: Ubuntu'da örneğin fonts-dejavu-core.

postkitty API anahtarı ya da hesap gerektirmez. Metin için medya araçlarının hiçbiri gerekmez: postkitty ffmpeg olmadan da metninizi yazar ve sayar.

Hepsini bir kerede denetlemek için Hermes sohbetine şunu yazın:

/postkitty doctor

Python, ffmpeg ve ffprobe, altyazı desteği, OpenCV, Pillow, yüz modeli ve çıktı klasörünün durumunu bildirir. Her sorunun yanında, nasıl giderileceğini anlatan tek bir satır bulunur. Son satır şu anda nelerin çalıştığını söyler: metin, fotoğraf, video, altyazı.

İlk isteğiniz

Yeni sohbette platformların adını yazın ve Hermes'e taslağınızı ya da her dosyanın tam yolunu verin.

postkitty ile bunu X, LinkedIn ve Instagram için gönderilere çevir, yazımı da düzelt: [taslağınız ya da bir fotoğrafın veya videonun yolu]

Bir iş tek bir fotoğraf ya da tek bir video alır; ikisinden birer tane de olabilir. Yanında metin bulunur. Birden çok fotoğrafınız varsa Hermes postkitty'yi her fotoğraf için ayrı çalıştırır. postkitty kaydırmalı gönderi oluşturmaz.

Hermes bir iş klasörünün yoluyla yanıt verir. Tüm denetimlerden geçen dosyalar ready/ içinde, her platform için ayrı bir klasörde durur. Her dosyayı metni, alternatif metni ve denetim sonuçlarıyla yan yana görmek için board.html dosyasını açın.

postkitty/<job>/
  ready/
    instagram/
    linkedin/
    x/
  board.html
  advice.md

İş klasörü, Hermes oturumunuzun çalıştığı klasördeki ./postkitty altında oluşturulur. Bunu Ayarlar bölümünden değiştirebilirsiniz.

Nasıl istenir

Hermes'e sade bir dille yazarsınız, Hermes de postkitty'yi çağırır. Platformları, dosyaları ve istediğiniz sonucu belirten bir istek ilk seferde doğru sonuç verir. Aşağıdaki her çift, belirsiz bir isteği net bir istekle yan yana gösterir.

Platformların adını verin

Platform adı vermezseniz postkitty dosyalarınıza uyan her platform için dosya üretir. Adlarını yazarsanız iş kısa sürer.

Belirsiz Bunu sosyal medyaya hazırla.

Net

[videonun yolu] dosyasını postkitty ile TikTok, Instagram Reels ve YouTube Shorts için hazırla.

Karede kimin kalacağını söyleyin

postkitty bulduğu her yüzü karede tutar. Bir kişi daha önemliyse ya da kimsenin kesilmemesi gerekiyorsa bunu söyleyin. Kişiler soldan sayılır.

Belirsiz Bu fotoğrafı kırp.

Net

[fotoğrafın yolu] dosyasını postkitty ile Instagram akışı için kırp. Beş kişinin hepsi fotoğrafta kalsın, soldan ikinci kişi ortada olsun.

Yerleşim sözcüklerini kullanın

Geniş bir videonun dikeye nasıl çevrileceğini dört sözcük belirler: crop, split, speaker ve geniş plan, yani pad yerleşimi. Her birini Yerleşimler bölümünde görebilirsiniz.

Belirsiz Bunu dikey yap.

Net

[videonun yolu] dosyasında iki kişi konuşuyor. Reels için ekranı böl, TikTok için o an konuşana geç, Shorts için geniş planın tamamını koru.

Kısaltma ve kapak zamanlarını verin

Zamanları saniye olarak ya da dakika ve saniye olarak verin. Vermezseniz postkitty klibi yalnızca platformun kesin bir süre sınırı varsa kısaltır ve kapak karesini kendisi seçer.

Belirsiz Kısalt, güzel bir kapak da seç.

Net

Reel'i ilk 45 saniyeye kısalt ve kapak olarak 0:12'deki kareyi kullan.

Tonu ve dili belirleyin

Metni Hermes'inizin kullandığı model yazar. Siz aksini söylemedikçe üslubunuzu ve dilinizi korur.

Belirsiz Bunun için güzel bir şeyler yaz.

Net

LinkedIn gönderisini resmi, X gönderisini samimi bir tonda yaz. İkisi de Almanca olsun. Verdiğim bilgileri olduğu gibi bırak.

Flood mu, tek gönderi mi istediğinizi söyleyin

X, Threads ya da Bluesky'de sınırı aşan metin numaralı bir flooda dönüşebilir. Hangisini istediğinizi söyleyin.

Belirsiz Bunu X'te paylaş.

Net

Bunu postkitty ile X'te bir flooda çevir, üslubumu koru. Bluesky sürümü tek gönderi olarak kalsın: [uzun gönderiniz]

Altyazıyı dosya olarak verin

postkitty altyazıları bir .srt ya da .vtt dosyasından alıp videoya gömer. Ekranda aynı anda en fazla iki satır gösterir ve altyazıyı platformun güvenli altyazı alanının içinde tutar. Sesi yazıya dökmediği için dosyayı sizin vermeniz gerekir.

Belirsiz Videoya altyazı ekle.

Net

[.srt dosyasının yolu] dosyasındaki altyazıları postkitty ile TikTok ve Reels kliplerine göm.

Değişiklik isteyin

Platformu ve neyin değişeceğini söyleyin. postkitty yalnızca o metni ya da dosyayı yeniden üretir ve yeniden denetler.

Belirsiz Beğenmedim, bir daha dene.

Net

LinkedIn gönderisini kısalt ve daha resmi yap, başka hashtagler kullan ve Instagram fotoğrafında soldaki kişiyi odağa al.

Dosyanın yüklenip yüklenmeyeceğini sorun

postkitty kendi üretmediği bir dosyayı da tek bir platformun sınırlarına göre denetleyebilir. Dosyayı ve platformu söyleyin.

Belirsiz Bu video olur mu?

Net

[dosyanın yolu] TikTok'a olduğu gibi yüklenir mi? postkitty ile kontrol et.

Araçlar

Hermes beş araç çağırır. Sıra şöyledir: scan, write, make, sonra değişiklikler için redo. check ise postkitty'nin üretmediği dosyalar içindir. Bu araçları kendiniz çağırmazsınız. Bu bölüm, Hermes'in ne yaptığını okumanıza ve eklentinin üzerine geliştirme yapmanıza yardım eder.

postkitty_scan

Girdileri okur ve işi planlar

Girdileri okur ve işi planlar. İş klasörünü oluşturduktan sonra kişileri, çekimleri ve sahneleri bulur ve her platform hedefi için kadrajı planlar. Hiçbir dosya üretmez, yalnızca metinle de çalışır.

ArgümanTürAçıklama
inputs
string[]
Tek bir fotoğrafın ya da tek bir videonun yolu; ikisinden birer tane de olabilir. Göreli bir yol, oturumunuzun çalıştığı klasörden başlar.
text
string
Varsa taslağınız.
platforms
string[]
Platform adları (instagram, tiktok, youtube, x, linkedin, threads, bluesky, facebook) ya da hedef kimlikleri. Verilmezse girdilere uyan her hedef seçilir.
job
string
Var olan bir işi sürdürmek için o işin kimliği.

Döndürdükleri. İş kimliği, her girdinin bilgileri (tür, boyut, süre, kişiler, çekimler), her hedefin planı (yerleşim, kısaltma, kapak karesi), her platformun koyduğu sınırlar, metninizin sayımları ve bir önizleme görselinin yolu.

postkitty_write

Her platformun metnini sayar ve metin dosyalarını yazar

Her platformun metnini o platformun gerçek kuralıyla sayar ve metin dosyalarını yazar. X, Threads ya da Bluesky'de sınırı aşan metin numaralı bir flooda bölünür. Hermes, her platform ok bildirene kadar bu aracı yeniden yazılmış bir taslakla tekrar çağırır. Metinde sonradan yapılan her değişiklikte de yeniden çağırır.

ArgümanTürAçıklama
jobzorunlu
string
postkitty_scan aracının döndürdüğü iş kimliği.
advice
object
Hermes'in gönderi hakkında çıkardıkları: topic, audience, tone, key_message, platformları gerekçeleriyle sıralayan ranking ve tips.
drafts
object
Her platform adı ya da hedef kimliği için bir taslak. String listesi verilirse flood olur.
alt_text
object
Hedef kimliğine, girdi dosyasının adına ya da hazır dosyanın yoluna göre alternatif metin. Yalnızca görüneni anlatır.
split_threads
boolean
Sınırı aşan metni flooda böler. Varsayılan: true.

Döndürdükleri. Her platform için sayım, birim, sınır, ok, taşan kısım ve akışın metni kestiği yere kadar görünen bölüm. advice.md dosyasını iş klasörüne yazar. post.txt, thread.txt ve alt.txt dosyalarını ready/ içine koyar.

postkitty_make

Üretir, denetler, onarır ve inceleme panosunu oluşturur

Planlanan her hedefi üretir, her dosyayı platformun yayımladığı sınırlara göre denetler, geçemeyeni onarır ve yalnızca denetimden geçen dosyaları ready/ içine koyar. İnceleme panosunu da yazar. Yalnızca metin içeren bir işte üretilecek dosya yoktur.

ArgümanTürAçıklama
jobzorunlu
string
postkitty_scan aracının döndürdüğü iş kimliği.
targets
string[]
Yalnızca bu hedef kimlikleri ya da platformlar. Verilmezse planlanan her hedef üretilir.
overrides
object
Hedef kimliği başına layout, focus, trim, cover_at ve captions değerlerinden istenenler. Açıklamaları postkitty_redo altındadır.

Döndürdükleri. Her hedef için bir satır içeren bir tablo. Bir dosya ancak durumu ready ya da repaired olduğunda yüklenmeye hazırdır. failed satırları neyin yanlış olduğunu, skipped satırları makinenizde hangi programın eksik olduğunu söyler.

postkitty_redo

Tek bir fotoğraf ya da video çıktısını değiştirir

Siz bir değişiklik istediğinizde tek bir fotoğraf ya da video hedefini yeniden üretir: başka bir yerleşim, odakta başka bir kişi, kısaltma, başka bir kapak karesi ya da altyazı. Taramayı yeniden kullandığı için hızlıdır. Yeni dosya denetimden geçemezse, daha önce geçmiş olan dosya yerinde kalır.

ArgümanTürAçıklama
jobzorunlu
string
postkitty_scan aracının döndürdüğü iş kimliği.
targetzorunlu
string
Yeniden üretilecek hedef, örneğin tiktok ya da instagram_feed.
layout
crop | split | speaker | seam | pad | auto
Karenin nasıl kurulacağı. Bkz. Yerleşimler.
focus
string
Karenin kimi ya da neyi tutacağı. Bkz. Odak.
trim
[number, number]
Saniye cinsinden başlangıç ve bitiş. Yalnızca video.
cover_at
number
Kapak karesinin saniye cinsinden zamanı. Yalnızca video.
captions
string
Videoya gömülecek .srt ya da .vtt dosyasının yolu. none daha önce verilen altyazıyı kaldırır. Yalnızca video.

Döndürdükleri. postkitty_make ile aynı tablo, yalnızca o hedef için.

postkitty_check

postkitty'nin üretmediği bir dosyayı denetler

postkitty'nin üretmediği bir dosyayı, hiçbir şey üretmeden tek bir platform hedefine göre denetler. make ve redo ile üretilen dosyalar zaten denetlenmiştir.

ArgümanTürAçıklama
path
string
Denetlenecek dosyanın yolu.
target
string
x_image gibi bir hedef kimliği. Platformun o dosya türü için tek hedefi varsa platform adı da olur, örneğin tiktok.
job
string
Bir işin hazır dosyalarını yeniden denetlemek için o işin kimliği.

Döndürdükleri. Dosyanın geçip geçmediği ve geçemediği her denetim, uymadığı sınırla birlikte.

/postkitty komutu

Bunları Hermes sohbetine yazın. Hemen yanıt verirler ve modeli kullanmazlar.

KomutNe yapar
/postkitty
postkitty'nin ne yaptığını, örnek istekleri ve boyutu ile başlıca sınırlarıyla birlikte her hedefi gösterir.
/postkitty tiktok
Bir platformun hedeflerini ve sınırlarını gösterir. Herhangi bir platform adını yazabilirsiniz.
/postkitty doctor
Kurulumunuzu denetler ve her sorunun nasıl giderileceğini tek satırla söyler.
/postkitty check <file> [target]
Bir dosyayı bir hedefe göre denetler ve sonucu yazdırır. Hedef vermezseniz hangisini istediğinizi sorar.

Aynı motor, betikler ve cron işleri için terminalden de çalışır:

KomutNe yapar
hermes postkitty doctor
Kurulum denetimini çalıştırır.
hermes postkitty platforms [name]
Tüm hedefleri ve sınırlarını ya da tek bir platformunkileri gösterir.
hermes postkitty check FILE [--target ID]
Bir dosyayı bir hedefe göre denetler. Dosya geçemezse çıkış kodu 1 olur.
hermes postkitty make [FILES] [options]
Tek bir gönderinin bütün dosyalarını üretir, denetler ve durum tablosunu yazdırır. Metni verildiği gibi sayar ve böler, yeniden yazmaz. Seçenekler: --text, --text-file, --platforms, --layout, --focus, --captions, --out. Çıkış kodu yalnızca her dosya hazır olduğunda 0 olur.

Ayarlar

Üç ayar vardır ve hepsi isteğe bağlıdır. Hermes'te eklentinin ayarlarından değiştirebilirsiniz.

AyarAçıklamaVarsayılan
output_dirÇıktı klasörü
İş klasörlerinin yazıldığı yer.
Oturumunuzun çalıştığı klasördeki ./postkitty
default_platformsVarsayılan platformlar
Platform adı vermediğinizde postkitty'nin dosya ürettiği platformlar.
Girdiye uyan her platform
loudness_lufsSes yüksekliği hedefi (LUFS)
Video sesinin ayarlandığı ses yüksekliği.
-14

Yerleşimler

Yerleşim, geniş bir görüntünün platformun istediği biçime nasıl getirileceğini belirler. postkitty her hedef için bir yerleşim seçer. Dilediğiniz zaman başkasını isteyebilirsiniz.

crop

kırp, kişiyi izle

Kareyi yeni biçime göre keser ve konuyu karede tutar. Videoda kare, hareket eden kişiyi izler.

Geniş bir fotoğrafın sol kenarında duran bir çömlekçi. Merkez kırpma boş bir pencere gösterir. postkitty kırpması çömlekçiyi karede tutar. Görseli büyüt

split

ekranı böl, alt alta koy

İki kişiyi tek bir dikey karede alt alta dizer, her biri kendi yarısında kalır. İki kişi birbirinden uzak oturduğunda işe yarar.

Geniş bir planda birbirinden uzak oturan iki podcast sunucusu. Merkez kırpma aralarındaki boş masayı gösterir. postkitty iki sunucuyu tek bir dikey karede alt alta dizer. Görseli büyüt

speaker

o an konuşana geç

Her seferinde tek bir kişiyi gösterir ve o an konuşana geçer. Yalnızca video.

seam

arka planı daralt

İki kişinin arasındaki arka planı çıkarır. Böylece ikisi de kesilmeden kareye sığar. Yalnızca fotoğraf.

pad

geniş planın tamamı, her şey kalsın

Görüntünün tamamını korur ve karenin kalanını görüntünün bulanık bir kopyasıyla doldurur. Hiçbir şey kesilmez.

Geniş bir ekip fotoğrafında beş kişi. Merkez kırpma kenardaki iki kişiyi keser. postkitty beşini de korur ve karenin üstünü ve altını bulanık bir bantla doldurur. Görseli büyüt

Odak

Odak, karenin kimin ya da neyin çevresinde kurulacağını söyler. Sade bir dille: “soldaki kadını ortaya al”. Kendi hâline bırakıldığında postkitty kimseyi kesmez. Sizin verdiğiniz odak, biri kare dışında kalsa bile korunur ve sonuç kimin dışarıda kaldığını söyler.

DeğerAçıklama
auto
postkitty bulduğu yüzlere göre karar verir. Varsayılan değer budur.
person:N
Soldan sayılan tek bir kişi: person:1 en soldaki kişidir.
left
Görüntünün sol bölümü.
center
Görüntünün ortası.
right
Görüntünün sağ bölümü.
x:0.0-1.0
Genişlik boyunca bir nokta: x:0.0 sol kenar, x:1.0 sağ kenardır.

Platformlar ve sınırlar

Bu tablolar, postkitty'nin denetimde kullandığı platforms.yaml dosyasından üretilir. Her sınır, alındığı sayfaya bağlantı verir.

Kontrol tarihi:

Metin sınırları

Her platform metni kendi yöntemiyle sayar. postkitty de aynı yöntemle sayar.

PlatformSınırKuralKaynak
Instagram
2.200 karakter
Denetlenir ve onarılır
Instagram
5 hashtag
Denetlenir ve onarılır
Instagram
20 bahsetme
Denetlenir ve onarılır
TikTok
2.200 UTF-16 birimi
Denetlenir ve onarılır
YouTube Shorts
100 karakter
Denetlenir ve onarılır
X
280 ağırlıklı karakter
Denetlenir ve onarılır
LinkedIn
3.000 karakter
Denetlenir ve onarılır
Threads
500 karakter
Denetlenir ve onarılır
Bluesky
300 grafem
Denetlenir ve onarılır
Bluesky
3.000 bayt
Denetlenir ve onarılır
Facebook
63.206 karakter
Yalnızca öneri
  • X: postkitty, X'in yayımladığı twitter-text kurallarının bir uyarlamasını kullanır. Bir bağlantı 23 karakter sayılır. README.md gibi bir dosya adı da bağlantı sayılır.
  • Threads bir emojiyi UTF-8 bayt sayısı kadar sayar.
  • Bluesky'ın 3.000 baytlık sınırı bir flooddaki her gönderi için ayrı ayrı geçerlidir.
  • YouTube'daki 100 karakter, Short'un başlığının sınırıdır.

Boyutlar ve dosya sınırları

Hedef, bir platforma yönelik tek bir dosya türüdür. Bir platformu açtığınızda postkitty'nin onun için ne ürettiğini ve denetlediği her sınırı görürsünüz.

Instagram

Reel, akış fotoğrafı, Hikâye

Reel instagram_reelvideo, 1080 × 1920 px

SınırDeğerKuralKaynak
Dosya türü
MP4, MOV
Denetlenir ve onarılır
Video kodeği
H.264, HEVC
Denetlenir ve onarılır
Ses örnekleme hızı
48 kHz
Denetlenir ve onarılır
En düşük kare hızı
23 fps
Denetlenir ve onarılır
En yüksek kare hızı
60 fps
Denetlenir ve onarılır
En kısa süre
3 sn
Denetlenir ve onarılır
En uzun süre
15 dk
Denetlenir ve onarılır
En büyük boyut
300 MB
Denetlenir ve onarılır
En yüksek video bit hızı
25 Mbit/s
Denetlenir ve onarılır
En yüksek ses bit hızı
128 kbit/s
Denetlenir ve onarılır
Boş bırakılacak alan
üst %14, alt %35, yanlar %6
Yalnızca öneri

akış fotoğrafı instagram_feedgörsel, 1080 × 1350 px

SınırDeğerKuralKaynak
Görsel biçimi
JPEG
Denetlenir ve onarılır
En büyük boyut
8 MB
Denetlenir ve onarılır
En-boy oranı aralığı
4:5, 1.91:1
Denetlenir ve onarılır

Hikâye instagram_storygörsel ya da video, 1080 × 1920 px

SınırDeğerKuralKaynak
En uzun süre
1 dk
Yalnızca öneri
Boş bırakılacak alan
üst %14, alt %35, yanlar %6
Yalnızca öneri

TikTok

video

video tiktokvideo, 1080 × 1920 px

SınırDeğerKuralKaynak
Dosya türü
MP4, WEBM, MOV
Denetlenir ve onarılır
Video kodeği
H.264, HEVC, VP8, VP9
Denetlenir ve onarılır
En düşük kare hızı
23 fps
Denetlenir ve onarılır
En yüksek kare hızı
60 fps
Denetlenir ve onarılır
En kısa kenar
360 px
Denetlenir ve onarılır
En uzun kenar
4.096 px
Denetlenir ve onarılır
En uzun süre
10 dk
Denetlenir ve onarılır
En büyük boyut
4 GB
Denetlenir ve onarılır
Boş bırakılacak alan
üst %12,5, alt %34,4, sol %11,1, sağ %27,8
Yalnızca öneri

YouTube Shorts

Short

Short youtube_shortsvideo, 1080 × 1920 px

SınırDeğerKuralKaynak
En uzun süre
3 dk
Denetlenir ve onarılır
En yüksek video bit hızı
8 Mbit/s
Yalnızca öneri
Boş bırakılacak alan
üst %15, alt %35, sol %4,4, sağ %17,8
Yalnızca öneri

X

video, görsel

video x_videovideo, 1920 × 1080 px

SınırDeğerKuralKaynak
En uzun süre
140 sn
Denetlenir ve onarılır
En büyük boyut
512 MB
Denetlenir ve onarılır

görsel x_imagegörsel, 1600 × 900 px

SınırDeğerKuralKaynak
Görsel biçimi
JPEG, PNG, GIF, WEBP
Denetlenir ve onarılır
En büyük boyut
5 MB
Denetlenir ve onarılır

LinkedIn

video, görsel

video linkedin_videovideo, 1080 × 1350 px

SınırDeğerKuralKaynak
En kısa süre
3 sn
Denetlenir ve onarılır
En uzun süre
15 dk
Denetlenir ve onarılır
En küçük boyut
75 kB
Denetlenir ve onarılır
En büyük boyut
5 GB
Denetlenir ve onarılır
En düşük kare hızı
10 fps
Denetlenir ve onarılır
En yüksek kare hızı
60 fps
Denetlenir ve onarılır
En yüksek video bit hızı
30 Mbit/s
Denetlenir ve onarılır
En dar en-boy oranı
1:2,4
Denetlenir ve onarılır
En geniş en-boy oranı
2,4:1
Denetlenir ve onarılır

görsel linkedin_imagegörsel, 1080 × 1080 px

SınırDeğerKuralKaynak
En-boy oranları
1:1, 1.91:1, 4:5
Yalnızca öneri

Threads

video, görsel

video threads_videovideo, 1080 × 1920 px

SınırDeğerKuralKaynak
Dosya türü
MP4, MOV
Denetlenir ve onarılır
Video kodeği
H.264, HEVC
Denetlenir ve onarılır
En düşük kare hızı
23 fps
Denetlenir ve onarılır
En yüksek kare hızı
60 fps
Denetlenir ve onarılır
En uzun süre
5 dk
Denetlenir ve onarılır
En büyük boyut
1 GB
Denetlenir ve onarılır

görsel threads_imagegörsel, 1080 × 1350 px

SınırDeğerKuralKaynak
Görsel biçimi
JPEG, PNG
Denetlenir ve onarılır
En büyük boyut
8 MB
Denetlenir ve onarılır

Bluesky

video, görsel

video bluesky_videovideo, 1080 × 1920 px

SınırDeğerKuralKaynak
En büyük boyut
300 MB
Denetlenir ve onarılır
En uzun süre
10 dk
Yalnızca öneri

görsel bluesky_imagegörsel, 1080 × 1350 px

SınırDeğerKuralKaynak
En büyük boyut
2 MB
Denetlenir ve onarılır

Facebook

Reel, akış fotoğrafı

Reel facebook_reelvideo, 1080 × 1920 px

SınırDeğerKuralKaynak
En-boy oranları
9:16
Yalnızca öneri
Boş bırakılacak alan
üst %14, alt %35, yanlar %6
Yalnızca öneri

akış fotoğrafı facebook_feedgörsel, 1080 × 1350 px

SınırDeğerKuralKaynak
En-boy oranları
4:5
Yalnızca öneri

API

Web sitesi aynı motoru bir HTTP API'nin arkasında çalıştırır. Bu API'yi siz de çağırabilirsiniz. Dil modeli içermez: metni sayar, denetler ve böler, dosyaları üretir ve denetler. Metninizi yeniden yazmaz. Anahtar gerekmez.

https://postkitty.mertkayacs.com/api
YöntemUç noktaNe yapar
GET
/v1/health
Servisin çalışıp çalışmadığını ve sürümünü bildirir.
GET
/v1/limits
Servisin kendi sınırlarını sayı olarak verir: iş başına dosya sayısı, dosya boyutları, video süresi, metin uzunluğu ve saatlik istek sayısı.
GET
/v1/platforms
Her hedefi boyutu ve sınırlarıyla listeler.
POST
/v1/text
Bir metni her platform için sayar ve sınırı aştığı yerde flooda böler.
POST
/v1/check
Yüklenen bir dosyayı bir hedefe göre denetler.
POST
/v1/jobs
Yüklenen fotoğraflardan ya da tek bir videodan bir iş başlatır. İş kimliğiyle hemen yanıt verir.
GET
/v1/jobs/{id}
Bir işin durumunu verir: queued, running, done ya da failed. Hedefleri ve dosyaları da yanıtta yer alır.
GET
/v1/jobs/{id}/files/{path}
Hazır dosyalardan birini verir.
GET
/v1/jobs/{id}/download
Tüm hazır dosyaları tek bir zip olarak verir.
DELETE
/v1/jobs/{id}
İşi ve dosyalarını hemen siler.

Metni sayma ve bölme

text alanını içeren bir JSON gönderin. platforms isteğe bağlıdır, verilmezse sekiz platformun hepsi kullanılır. Flood yerine taşan kısmı almak için split_threads değerini false yapın.

curl -s https://postkitty.mertkayacs.com/api/v1/text \
  -H "Content-Type: application/json" \
  -d '{"text": "We shipped postkitty 1.0 today.", "platforms": ["x", "bluesky"]}'
import requests

reply = requests.post(
    "https://postkitty.mertkayacs.com/api/v1/text",
    json={"text": "We shipped postkitty 1.0 today.", "platforms": ["x", "bluesky"]},
    timeout=30,
)
reply.raise_for_status()
for platform, result in reply.json()["platforms"].items():
    print(platform, result["count"], "of", result["limit"], "ok" if result["ok"] else "too long")
const reply = await fetch("https://postkitty.mertkayacs.com/api/v1/text", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ text: "We shipped postkitty 1.0 today.", platforms: ["x", "bluesky"] }),
})
if (!reply.ok) throw new Error((await reply.json()).error.message)
const { platforms } = await reply.json()
for (const [platform, result] of Object.entries(platforms)) {
  console.log(platform, result.count, "of", result.limit, result.ok ? "ok" : "too long")
}

Yanıtta her platform için bir kayıt bulunur: count, limit, ok, taşan kısım, akışta görünür kalan bölüm ve flood parçaları.

Dosya denetleme

Dosyayı multipart/form-data olarak, bir target değeriyle birlikte gönderin. Bu değer örneğin tiktok ya da instagram_feed olabilir. Yanıt, dosyanın geçip geçmediğini söyler ve geçemediği denetimleri listeler.

curl -s https://postkitty.mertkayacs.com/api/v1/check \
  -F "[email protected]" \
  -F "target=tiktok"
import requests

with open("clip.mp4", "rb") as clip:
    reply = requests.post(
        "https://postkitty.mertkayacs.com/api/v1/check",
        files={"file": clip},
        data={"target": "tiktok"},
        timeout=120,
    )
reply.raise_for_status()
print(reply.json())
const form = new FormData()
form.append("file", fileInput.files[0])
form.append("target", "tiktok")

const reply = await fetch("https://postkitty.mertkayacs.com/api/v1/check", { method: "POST", body: form })
if (!reply.ok) throw new Error((await reply.json()).error.message)
console.log(await reply.json())

Dosya üretme

Bir fotoğrafı ya da bir videoyu files alanıyla yükleyin. Bir işin kaç dosya aldığını GET /v1/limits söyler. text, platforms, layout ve focus isteğe bağlıdır. Yalnızca metin içeren bir iş de geçerlidir. Çağrı, iş kimliği ve bağlantılarıyla hemen döner. status değeri done ya da failed olana kadar işi iki saniyede bir sorgulayın. Sonra dosyaları tek tek ya da zip olarak indirin. Zip, inceleme panosunu da içerir.

# 1. Start a job. The reply carries its id.
curl -s https://postkitty.mertkayacs.com/api/v1/jobs \
  -F "[email protected]" \
  -F "text=Meet the team behind the launch." \
  -F "platforms=instagram,bluesky"

# 2. Ask every two seconds until status is done or failed.
curl -s https://postkitty.mertkayacs.com/api/v1/jobs/JOB_ID

# 3. Download the finished files as one zip.
curl -s -o postkitty.zip https://postkitty.mertkayacs.com/api/v1/jobs/JOB_ID/download

# 4. Delete the job now instead of waiting.
curl -s -X DELETE https://postkitty.mertkayacs.com/api/v1/jobs/JOB_ID
import time
import requests

API = "https://postkitty.mertkayacs.com/api"

with open("team.jpg", "rb") as photo:
    reply = requests.post(
        f"{API}/v1/jobs",
        files={"files": photo},
        data={"text": "Meet the team behind the launch.", "platforms": "instagram,bluesky"},
        timeout=120,
    )
reply.raise_for_status()
job = reply.json()

while job["status"] in ("queued", "running"):
    time.sleep(2)
    job = requests.get(API + job["links"]["status"], timeout=30).json()

if job["status"] == "done":
    archive = requests.get(API + job["links"]["download"], timeout=120)
    with open("postkitty.zip", "wb") as out:
        out.write(archive.content)
else:
    print(job["error"]["message"], job["error"]["hint"])

requests.delete(API + job["links"]["status"], timeout=30)
const API = "https://postkitty.mertkayacs.com/api"

const form = new FormData()
form.append("files", fileInput.files[0])
form.append("text", "Meet the team behind the launch.")
form.append("platforms", "instagram,bluesky")

let job = await (await fetch(API + "/v1/jobs", { method: "POST", body: form })).json()
if (job.error) throw new Error(job.error.message)

while (job.status === "queued" || job.status === "running") {
  await new Promise((resolve) => setTimeout(resolve, 2000))
  job = await (await fetch(API + job.links.status)).json()
}

if (job.status === "done") {
  for (const file of job.files) console.log(file.path, API + file.url)
  console.log("Everything as one zip:", API + job.links.download)
} else {
  console.error(job.error.message, job.error.hint)
}

Hatalar

Her hatanın gövdesi aynıdır. Mesaj tek bir sade cümledir, ipucu da bundan sonra ne yapacağınızı söyler. İkisi de İngilizcedir. Çevirecekseniz hataları code değerine göre ayırt edin.

{
  "error": {
    "code": "...",
    "message": "one plain sentence",
    "hint": "what to do"
  }
}

İki kod beklemenizi ister: rate_limited (HTTP 429) ve queue_full (HTTP 503). İkisi de kaç saniye bekleyeceğinizi bildiren bir Retry-After başlığı gönderir.

Sınırlar ve silme

  • Yalnızca yükleme kabul edilir. API hiçbir URL'den içerik çekmez.
  • Fotoğraflar JPEG, PNG, WebP ya da GIF, video ise MP4, MOV, MKV ya da WebM olabilir. Hareketli görseller kabul edilmez. GET /v1/limits her sınırı sayı olarak döndürür: iş başına dosya sayısı, dosya boyutları, video süresi ve metin uzunluğu.
  • Çağrılar ziyaretçi başına saatlik olarak sınırlanır.
  • Yüklediğiniz dosyalar iş bitince silinir. Hazır dosyalar 60 dakika sonra, expires_at alanındaki zamanda silinir. DELETE isteği bunları hemen siler.
  • Hiçbir şey paylaşılmaz ya da yayımlanmaz.

Mimari

Kodu okumak ya da değiştirmek isteyen geliştiriciler için.

  • plugin.yaml manifest dosyasıdır: ad, sürüm, araçlar, bağımlılıklar ve ayarlar.
  • __init__.py araçları, skill dosyasını ve /postkitty komutunu Hermes'e kaydeder.
  • schemas.py modelin gördüklerini tutar: araç adları, açıklamalar ve parametreler. tools.py argümanları doğrulayıp motoru çağıran ince işleyicileri tutar.
  • engine/, Hermes'ten hiçbir şey içe aktarmayan düz bir Python kütüphanesidir. Genel arayüzü engine/pipeline.py dosyasıdır: scan, write, make, redo ve check. Her biri bir dict alır ve bir dict döndürür. HTTP API de aynı fonksiyonları çağırır.
  • Motorun içinde detect/ yüzleri bulur, photo/ ve video/ planlar ve üretir, text/ sayar ve böler, verify/ denetler ve onarır, board/ inceleme panosunu oluşturur.
  • data/platforms.yaml her boyutu ve sınırı kaynağıyla birlikte tutar. Bir sınırı orada değiştirdiğinizde denetimler de ona uyar.
  • skills/postkitty/SKILL.md modele araçları nasıl kullanacağını anlatır.

Önerileri ve metni model yazar. Geri kalan her şey deterministik koddur: algılama, kadraj, üretim, sayım, denetim ve onarım. Bir dosyanın geçip geçmediğine yalnızca araçlar karar verir.

Depoda daha fazlası var: GitHub'daki geliştirici belgeleri, SKILL.md ve platforms.yaml.

Sorun giderme

Sık görülen sorunlar ve her birinin çözümü. Önce /postkitty doctor komutunu çalıştırın. Kurulum sorunlarının çoğunu bulur ve nasıl giderileceğini söyler.

Kurulumdan sonra Hermes postkitty'yi tanımıyor

Yeni bir sohbet açın. Hermes bir eklentinin araçlarını sohbet başlarken yükler. Bu yüzden kurulumu yaptığınız sohbette araçlar yoktur. Araçlar hâlâ görünmüyorsa eklenti etkin değildir: hermes plugins enable postkitty komutunu çalıştırın.

Video hedefleri atlanıyor

ffmpeg ya da ffprobe eksik. ffmpeg'i kurun, ffmpeg ve ffprobe komutlarının terminalinizde çalıştığından emin olun, sonra yeniden isteyin. macOS'te Hermes'le gelen ffmpeg'de ffprobe bulunmaz; brew install ffmpeg komutu onu ekler. Metin ve fotoğraflar bunlar olmadan da çalışır.

Fotoğraf ya da video, yüz algılayıcının kullanılamadığını bildiriyor

Yüz modeli ilk kullanımda bir kez indirilir ve bunun için ağ bağlantısı gerekir. İnternete bağlanın ve yeniden isteyin. Metin, model olmadan da çalışır.

ffmpeg'de libass olmadığı için altyazı reddediliyor

ffmpeg derlemeniz altyazı çizemiyor. libass içeren bir derleme kurun (macOS'te Homebrew ile bu ffmpeg-full paketidir) ya da altyazıyı isteğinizden çıkarın. /postkitty doctor bunu Captions satırında gösterir.

Makinede yazı tipi olmadığı için altyazı reddediliyor

ffmpeg altyazıyı makinede kurulu yazı tipleriyle çizer; masaüstü ortamı olmayan bir sunucuda ya da konteynerde hiç yazı tipi olmayabilir. Bir tane kurun (Ubuntu'da örneğin sudo apt install fonts-dejavu-core) ve yeniden isteyin. Mesaj belirli karakterleri sayıyorsa kurulu yazı tiplerinin hiçbirinde o karakterler yoktur: o yazı sistemi için bir yazı tipi kurun ya da karakterleri altyazı dosyasından çıkarın. Hiçbir yazı tipinde bulunmayan bir emoji altyazıya alınmaz ve sonuçta belirtilir. /postkitty doctor eksik yazı tipini Captions satırında gösterir.

Bir hedef failed gösteriyor

Satır, dosyanın hangi sınıra uymadığını ve onarımın bunu gideremediğini söyler. O hedef için başka bir yerleşim isteyin. pad görüntünün tamamını korur ve çoğu duruma uyar. Diğer hedeflerin denetimden geçen dosyaları yerinde kalır.

Karede yanlış kişi var

Kimi kastettiğinizi konumuyla söyleyin: “soldaki kişi”, “soldan ikinci kişi”. Bkz. Odak.

Bir metin sınırı aşıyor

Hermes metni kısaltır ve yeniden sayar. X, Threads ve Bluesky'de bunun yerine flood isteyebilirsiniz.

Hareketli bir GIF, WebP ya da PNG kabul edilmiyor

postkitty durağan fotoğraf ve video üretir. Tek bir kareyi JPEG ya da PNG olarak verin ya da klibi video dosyası olarak verin.

Bir dosyayı değiştirdiniz ama sonuçta hâlâ eskisi görünüyor

Değişen dosyayla yeni bir çalıştırma isteyin. postkitty dosyayı yeniden tarar ve yeni bir iş başlatır.