postkitty ist ein Plugin für Hermes Agent. Installieren Sie es einmal, öffnen Sie einen neuen Chat und fragen Sie in einfachen Worten.
Installieren
Führen Sie diesen Befehl in einem Terminal aus. Das Plugin kommt aus dem offiziellen Hermes-Plugin-Katalog.
hermespluginsinstallpostkitty
Antworten Sie mit Ja, wenn Hermes nach den Python-Abhängigkeiten und nach dem Aktivieren des Plugins fragt. Diese Variante überspringt beide Fragen:
hermespluginsinstallpostkitty--yes-deps--enable
Öffnen Sie danach einen neuen Chat. Hermes lädt die Tools eines Plugins erst, wenn der nächste Chat beginnt.
Sie können die Installation auch Hermes überlassen. Senden Sie diese Nachricht:
Installiere für mich das Plugin postkitty: Führe im Terminal `hermespluginsinstallpostkitty--yes-deps--enable` aus. Sag mir danach, dass ich einen neuen Chat öffnen soll, damit seine Tools geladen werden.
Was Sie brauchen
Sie brauchen
Wofür
So bekommen Sie es
Hermes Agent 0.22.7 oder neuer
Alles
Aktualisieren Sie Hermes, falls Ihre Version älter ist.
Fünf Python-Pakete: OpenCV, NumPy, Pillow, regex und ruamel.yaml
Fotos, Video und Zählen
Das Plugin installiert sie mit. Sie müssen nichts tun.
ffmpeg und ffprobe
Nur Video
Hermes bringt ein eigenes ffmpeg mit. Unter Windows und auf den meisten Linux-Systemen braucht Video sonst nichts. Unter macOS fehlt dieser Kopie ffprobe: Führen Sie einmal brew install ffmpeg aus.
Das YuNet-Modell zur Gesichtserkennung
Fotos und Video
postkitty lädt es einmal aus dem OpenCV Zoo herunter und gleicht die Prüfsumme ab.
Ein ffmpeg-Build mit libass
Nur Untertitel
Das ffmpeg, das Hermes mitbringt, enthält libass. Ob ein eigenes ffmpeg es enthält, zeigt die Zeile „Captions“ von /postkitty doctor.
Eine installierte Schriftart
Nur Untertitel
Ein Desktop hat reichlich davon. Auf einem Server ohne grafische Oberfläche oder in einem Container installieren Sie eine, unter Ubuntu zum Beispiel fonts-dejavu-core.
postkitty braucht keinen API-Schlüssel und kein Konto. Reiner Text kommt ohne die Medienwerkzeuge aus: Auch ohne ffmpeg schreibt und zählt postkitty Ihren Text.
Alles auf einmal prüfen Sie mit diesem Befehl in einem Hermes-Chat:
/postkittydoctor
Der Befehl meldet den Stand von Python, ffmpeg und ffprobe, Untertitel-Unterstützung, OpenCV, Pillow, Gesichtsmodell und Ausgabeordner. Zu jedem Problem nennt er in einer Zeile, wie Sie es beheben, und die letzte Zeile sagt, was jetzt funktioniert: Text, Fotos, Video, Untertitel.
Ihre erste Anfrage
Nennen Sie im neuen Chat die Plattformen und geben Sie Hermes Ihren Entwurf oder den vollständigen Pfad jeder Datei.
Mach mit postkitty aus diesem Beitrag Posts für X, LinkedIn und Instagram und korrigiere meine Formulierungen: [dein Entwurf oder der Pfad zu einem Foto oder Video]
Ein Job besteht aus einem Foto oder einem Video oder je einem von beiden, dazu der Text. Bei mehreren Fotos startet Hermes postkitty einmal pro Foto. Ein Karussell baut postkitty nicht.
Hermes antwortet mit dem Pfad eines Job-Ordners. Die Dateien, die jede Prüfung bestanden haben, liegen in ready/, ein Ordner pro Plattform. Öffnen Sie board.html: Dort steht jede Datei neben ihrem Text, ihrem Alt-Text und ihren Prüfergebnissen.
Sie schreiben Hermes in einfachen Worten, und Hermes ruft postkitty auf. Nennt eine Anfrage die Plattformen, die Dateien und das gewünschte Ergebnis, gelingt sie beim ersten Versuch. Jedes Paar unten zeigt eine vage und eine klare Anfrage.
Plattformen nennen
Ohne Angabe bedient postkitty jede Plattform, die zu Ihren Dateien passt. Mit Namen bleibt der Job klein.
Vage Mach das fertig für Social Media.
Klar
Mach [Pfad zum Video] mit postkitty fertig für TikTok, Instagram Reels und YouTube Shorts.
Sagen, wer im Bild bleiben muss
postkitty hält jedes Gesicht, das es findet, im Bild. Sagen Sie es dazu, wenn eine Person wichtiger ist oder wenn niemand abgeschnitten werden darf. postkitty zählt Personen von links.
Vage Schneide das Foto zu.
Klar
Schneide [Pfad zum Foto] mit postkitty für den Instagram-Feed zu. Behalte alle fünf Personen im Bild und stell die zweite Person von links in die Mitte.
Layout-Wörter nutzen
Vier Wörter legen fest, wie aus einem Querformat-Video ein Hochformat-Video wird: crop, split, speaker und Totale, also das Layout pad. Der Abschnitt Layouts zeigt jedes davon.
Vage Mach es hochkant.
Klar
In [Pfad zum Video] sprechen zwei Personen. Für Reels geteilter Bildschirm, für TikTok ein Schnitt auf die Person, die gerade spricht, für Shorts die ganze Totale.
Zeiten für Kürzen und Cover nennen
Nennen Sie Zeiten in Sekunden oder als Minuten und Sekunden. Ohne Angabe kürzt postkitty einen Clip nur, wenn die Plattform ein hartes Längenlimit hat, und wählt das Coverbild selbst.
Vage Mach es kürzer und such ein schönes Thumbnail aus.
Klar
Kürze das Reel auf die ersten 45 Sekunden und nimm das Bild bei 0:12 als Cover.
Ton und Sprache festlegen
Die Formulierungen kommen von dem Modell, das Ihr Hermes nutzt. Es behält Ihren Ton und Ihre Sprache bei, solange Sie nichts anderes sagen.
Vage Schreib was Gutes dazu.
Klar
Schreib den LinkedIn-Post in förmlichem Ton und den X-Post in lockerem, beide auf Englisch. Lass meine Fakten, wie sie sind.
Thread oder einzelnen Post wählen
Text über dem Limit kann auf X, Threads oder Bluesky zu einem nummerierten Thread werden. Sagen Sie, was Sie wollen.
Vage Poste das auf X.
Klar
Mach daraus mit postkitty einen Thread auf X und behalte meinen Ton. Die Bluesky-Version soll ein einzelner Post bleiben: [dein langer Beitrag]
Untertitel als Datei mitbringen
postkitty brennt Untertitel aus einer .srt- oder .vtt-Datei ein, höchstens zwei Zeilen gleichzeitig und im sicheren Bereich der Plattform für Untertitel. Ton transkribiert es nicht, bringen Sie die Datei also mit.
Vage Füg dem Video Untertitel hinzu.
Klar
Brenne die Untertitel aus [Pfad zur .srt-Datei] mit postkitty in die Clips für TikTok und Reels ein.
Änderungen verlangen
Nennen Sie die Plattform und was sich ändern soll. postkitty erstellt nur diesen Text oder diese Datei neu und prüft erneut.
Vage Gefällt mir nicht, mach es noch mal.
Klar
Mach den LinkedIn-Post kürzer und förmlicher, nimm andere Hashtags und stell im Instagram-Foto die Person links in den Fokus.
Eine Datei vor dem Upload prüfen
postkitty prüft auch eine fremde Datei gegen die Limits einer Plattform. Nennen Sie die Datei und die Plattform.
Vage Ist das Video okay?
Klar
Kann ich [Pfad zur Datei] so auf TikTok hochladen? Prüf das mit postkitty.
Hermes ruft fünf Tools auf, in dieser Reihenfolge: scan, write, make und für Änderungen redo. Das Tool check ist für Dateien da, die nicht von postkitty stammen. Sie rufen die Tools nie selbst auf. Dieser Abschnitt hilft Ihnen nachzuvollziehen, was Hermes getan hat, und auf dem Plugin aufzubauen.
postkitty_scan
Liest die Eingaben und plant den Job
Liest die Eingaben und plant den Job. Es legt den Job-Ordner an, findet Personen, Einstellungen und Szenen und plant für jedes Ziel den Bildausschnitt. Es rendert nichts und funktioniert auch mit reinem Text.
Argument
Typ
Bedeutung
inputs
string[]
Pfad eines Fotos oder eines Videos, oder je eines von beiden. Ein relativer Pfad beginnt in dem Ordner, in dem Ihre Sitzung arbeitet.
text
string
Ihr Entwurf, falls vorhanden.
platforms
string[]
Plattformnamen (instagram, tiktok, youtube, x, linkedin, threads, bluesky, facebook) oder Ziel-IDs. Ohne Angabe: jedes Ziel, das zu den Eingaben passt.
job
string
Eine vorhandene Job-ID, um diesen Job fortzusetzen.
Rückgabe. Die Job-ID, die Fakten zu jeder Eingabe (Art, Größe, Länge, Personen, Einstellungen), der Plan für jedes Ziel (Layout, Kürzung, Coverbild), die Limits jeder Plattform, die Zählung Ihres Textes und der Pfad eines Vorschaubilds.
postkitty_write
Zählt den Text jeder Plattform und schreibt die Textdateien
Zählt den Text jeder Plattform nach deren echter Regel und schreibt die Textdateien. Text über dem Limit teilt es auf X, Threads oder Bluesky in einen nummerierten Thread. Hermes ruft es mit einem überarbeiteten Entwurf erneut auf, bis jede Plattform ok meldet, und danach für jede spätere Textänderung.
Argument
Typ
Bedeutung
jobPflicht
string
Die Job-ID, die postkitty_scan zurückgegeben hat.
advice
object
Was Hermes über den Beitrag herausgearbeitet hat: topic, audience, tone, key_message, ein ranking der Plattformen mit je einer Begründung und tips.
drafts
object
Ein Entwurf pro Plattformname oder Ziel-ID. Eine Liste von Strings ist ein Thread.
alt_text
object
Alt-Text pro Ziel-ID, Name einer Eingabedatei oder Pfad einer fertigen Datei. Er beschreibt nur, was zu sehen ist.
split_threads
boolean
Teilt Text über dem Limit in einen Thread. Standard: true.
Rückgabe. Für jede Plattform: die Zählung, die Einheit, das Limit, ok, der Überhang und der Teil, der sichtbar bleibt, bevor der Feed den Text abschneidet. Es schreibt advice.md in den Job-Ordner und die Dateien post.txt, thread.txt und alt.txt nach ready/.
postkitty_make
Rendert, prüft, repariert und baut das Review-Board
Rendert jedes geplante Ziel, prüft jede Datei gegen die veröffentlichten Limits der Plattform, repariert, was durchfällt, und legt nur Dateien in ready/ ab, die alle Prüfungen bestanden haben. Es schreibt auch das Review-Board. Bei einem Job nur mit Text gibt es nichts zu rendern.
Argument
Typ
Bedeutung
jobPflicht
string
Die Job-ID, die postkitty_scan zurückgegeben hat.
targets
string[]
Nur diese Ziel-IDs oder Plattformen. Ohne Angabe: jedes geplante Ziel.
overrides
object
Pro Ziel-ID beliebige der Schlüssel layout, focus, trim, cover_at und captions, wie unter postkitty_redo beschrieben.
Rückgabe. Eine Tabelle mit einer Zeile pro Ziel. Eine Datei ist nur dann bereit zum Hochladen, wenn ihr Status ready oder repaired ist. Zeilen mit failed sagen, was falsch ist, Zeilen mit skipped nennen das fehlende Programm.
postkitty_redo
Ändert eine Foto- oder Video-Ausgabe
Rendert ein Foto- oder Video-Ziel neu, wenn Sie eine Änderung verlangen: ein anderes Layout, eine andere Person im Fokus, eine Kürzung, ein anderes Coverbild oder Untertitel. Es nutzt den vorhandenen Scan und ist deshalb schnell. Schlägt das erneute Rendern fehl, bleibt die frühere Datei, die alle Prüfungen bestanden hat, an ihrem Platz.
Argument
Typ
Bedeutung
jobPflicht
string
Die Job-ID, die postkitty_scan zurückgegeben hat.
targetPflicht
string
Das Ziel, das neu gerendert wird, zum Beispiel tiktok oder instagram_feed.
Pfad einer .srt- oder .vtt-Datei, die ins Video eingebrannt wird. none entfernt zuvor gesetzte Untertitel. Nur Video.
Rückgabe. Dieselbe Tabelle wie bei postkitty_make, für dieses eine Ziel.
postkitty_check
Prüft eine Datei, die nicht von postkitty stammt
Prüft eine Datei, die nicht von postkitty stammt, gegen ein Ziel einer Plattform und rendert dabei nichts. Dateien aus make und redo sind bereits geprüft.
Argument
Typ
Bedeutung
path
string
Pfad der Datei, die geprüft wird.
target
string
Eine Ziel-ID wie x_image oder ein Plattformname, wenn die Plattform für diese Dateiart genau ein Ziel hat, zum Beispiel tiktok.
job
string
Eine Job-ID, um die fertigen Dateien dieses Jobs erneut zu prüfen.
Rückgabe. Bestanden oder durchgefallen, dazu jede fehlgeschlagene Prüfung mit dem verletzten Limit.
Der Befehl /postkitty
Geben Sie diese Befehle in einem Hermes-Chat ein. Die Antwort kommt sofort und ohne das Modell.
Befehl
Funktion
/postkitty
Was postkitty tut, Beispielanfragen und jedes Ziel mit Größe und wichtigsten Limits.
/postkittytiktok
Ziele und Limits einer Plattform. Jeder Plattformname funktioniert.
/postkittydoctor
Prüft Ihr Setup und nennt zu jedem Problem in einer Zeile, wie Sie es beheben.
/postkittycheck<file>[target]
Prüft eine Datei gegen ein Ziel und gibt das Ergebnis aus. Ohne Ziel fragt der Befehl nach.
Dieselbe Engine läuft auch im Terminal, für Skripte und Cron-Jobs:
Befehl
Funktion
hermespostkittydoctor
Die Setup-Prüfung.
hermespostkittyplatforms[name]
Jedes Ziel mit seinen Limits oder die Ziele einer Plattform.
hermespostkittycheckFILE[--targetID]
Prüft eine Datei gegen ein Ziel. Fällt die Datei durch, ist der Exit-Code 1.
hermespostkittymake[FILES][options]
Erstellt und prüft alle Dateien für einen Beitrag und gibt die Statustabelle aus. Der Text wird gezählt und geteilt, wie er ist, und nicht umgeschrieben. Optionen: --text, --text-file, --platforms, --layout, --focus, --captions, --out. Der Exit-Code ist nur dann 0, wenn jede Datei bereit ist.
Einstellungen
Drei Einstellungen, alle optional. Sie ändern sie in den Plugin-Einstellungen von Hermes.
Einstellung
Bedeutung
Standard
output_dirAusgabeordner
Wohin die Job-Ordner geschrieben werden.
./postkitty in dem Ordner, in dem Ihre Sitzung arbeitet
default_platformsStandardplattformen
Die Plattformen, die postkitty bedient, wenn Sie keine nennen.
Jede Plattform, die zur Eingabe passt
loudness_lufsZiellautheit (LUFS)
Die Lautheit, auf die der Ton von Videos normalisiert wird.
Ein Layout legt fest, wie ein breites Bild das Format bekommt, das eine Plattform vorgibt. postkitty wählt für jedes Ziel eines. Sie können jederzeit ein anderes verlangen.
crop
zuschneiden, der Person folgen
Schneidet das Bild auf das neue Format zu und hält das Motiv darin. Im Video folgt der Bildausschnitt der Person, wenn sie sich bewegt.
Der Fokus legt fest, um wen oder was postkitty das Bild baut. In einfachen Worten: „Stell die Frau links in die Mitte“. Ohne Vorgabe schneidet postkitty niemanden ab. Ein Fokus, den Sie setzen, gilt auch dann, wenn dadurch jemand aus dem Bild fällt, und das Ergebnis nennt diese Person.
Wert
Bedeutung
auto
postkitty entscheidet anhand der gefundenen Gesichter. Das ist der Standard.
person:N
Eine Person, von links gezählt: person:1 ist die Person ganz links.
left
Der linke Teil des Bildes.
center
Die Mitte des Bildes.
right
Der rechte Teil des Bildes.
x:0.0-1.0
Ein Punkt auf der Breite: x:0.0 ist der linke Rand, x:1.0 der rechte.
X: postkitty nutzt eine Portierung der von X veröffentlichten twitter-text-Regeln. Ein Link zählt 23 Zeichen, und ein Dateiname wie README.md zählt als Link.
Threads zählt ein Emoji mit seinen UTF-8-Bytes.
Die 3.000 Bytes von Bluesky gelten für jeden Post eines Threads.
Die 100 Zeichen bei YouTube sind das Limit für den Titel des Shorts.
Größen und Dateilimits
Ein Ziel ist eine Art von Datei für eine Plattform. Öffnen Sie eine Plattform, um zu sehen, was postkitty für sie erstellt und welche Limits es prüft.
Hinter der Website läuft dieselbe Engine als HTTP-API, und Sie können sie ebenfalls aufrufen. Ein Sprachmodell hat sie nicht: Sie zählt, prüft und teilt Text, erstellt und prüft Dateien und lässt Ihre Formulierungen unverändert. Einen Schlüssel brauchen Sie nicht.
https://postkitty.mertkayacs.com/api
Methode
Endpunkt
Funktion
GET
/v1/health
Ob der Dienst läuft, und seine Version.
GET
/v1/limits
Die eigenen Obergrenzen des Dienstes als Zahlen: Dateien pro Job, Dateigrößen, Videolänge, Textlänge und Aufrufe pro Stunde.
GET
/v1/platforms
Jedes Ziel mit Größe und Limits.
POST
/v1/text
Zählt einen Text für jede Plattform und teilt ihn in einen Thread, wo er über dem Limit liegt.
POST
/v1/check
Prüft eine hochgeladene Datei gegen ein Ziel.
POST
/v1/jobs
Startet einen Job aus hochgeladenen Fotos oder einem Video. Antwortet sofort mit der Job-ID.
GET
/v1/jobs/{id}
Der Status eines Jobs: queued, running, done oder failed, mit seinen Zielen und Dateien.
GET
/v1/jobs/{id}/files/{path}
Eine fertige Datei.
GET
/v1/jobs/{id}/download
Alle fertigen Dateien als ZIP-Datei.
DELETE
/v1/jobs/{id}
Löscht den Job und seine Dateien sofort.
Text zählen und teilen
Senden Sie JSON mit text. platforms ist optional, Standard sind alle acht. Setzen Sie split_threads auf false, dann erhalten Sie statt eines Threads den Überhang.
Die Antwort enthält einen Eintrag pro Plattform: count, limit, ok, den Überhang, den Teil, der im Feed sichtbar bleibt, und die Teile des Threads.
Eine Datei prüfen
Senden Sie die Datei als multipart/form-data mit einem target, zum Beispiel tiktok oder instagram_feed. Die Antwort sagt, ob die Datei besteht, und listet die fehlgeschlagenen Prüfungen auf.
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())
Dateien erstellen
Laden Sie ein Foto oder ein Video als files hoch. GET /v1/limits nennt, wie viele Dateien ein Job annimmt. text, platforms, layout und focus sind optional, und ein Job nur mit Text ist ebenfalls möglich. Der Aufruf kehrt sofort mit der Job-ID und den zugehörigen Links zurück. Fragen Sie den Job alle zwei Sekunden ab, bis sein statusdone oder failed ist, und laden Sie dann einzelne Dateien oder das ZIP herunter, das auch das Review-Board enthält.
# 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)
}
Fehler
Jeder Fehler hat denselben Body. Die Meldung ist ein einfacher Satz, und der Hinweis sagt, was als Nächstes zu tun ist. Beide sind englisch. Wenn Sie übersetzen, unterscheiden Sie die Fehler deshalb anhand von code.
Zwei Codes bitten Sie zu warten: rate_limited (HTTP 429) und queue_full (HTTP 503). Beide senden einen Retry-After-Header mit der Wartezeit in Sekunden.
Limits und Löschung
Nur Uploads. Die API ruft nie eine URL ab.
Fotos können JPEG, PNG, WebP oder GIF sein, Videos MP4, MOV, MKV oder WebM. Animierte Bilder werden abgelehnt. GET /v1/limits liefert jede Obergrenze als Zahl: Dateien pro Job, Dateigrößen, Videolänge und Textlänge.
Aufrufe sind pro Besucher und Stunde begrenzt.
Ihre Uploads werden gelöscht, sobald der Job fertig ist. Die fertigen Dateien werden 60 Minuten später gelöscht, zu dem Zeitpunkt in expires_at. DELETE entfernt sie sofort.
plugin.yaml ist das Manifest: Name, Version, Tools, Abhängigkeiten und Einstellungen.
__init__.py registriert die Tools, den Skill und den Befehl /postkitty bei Hermes.
schemas.py enthält, was das Modell sieht: Tool-Namen, Beschreibungen und Parameter. tools.py enthält schlanke Handler, die Argumente validieren und die Engine aufrufen.
engine/ ist eine reine Python-Bibliothek ohne Hermes-Importe. engine/pipeline.py ist ihre öffentliche Schnittstelle: scan, write, make, redo und check, die je ein Dict annehmen und zurückgeben. Die HTTP-API ruft dieselben Funktionen auf.
In der Engine: detect/ findet Gesichter, photo/ und video/ planen und rendern, text/ zählt und teilt, verify/ prüft und repariert, board/ baut das Review-Board.
data/platforms.yaml enthält jede Größe und jedes Limit mit Quelle. Ändern Sie dort ein Limit, folgen die Prüfungen.
skills/postkitty/SKILL.md erklärt dem Modell, wie es die Tools benutzt.
Das Modell schreibt die Tipps und die Formulierungen. Alles andere ist deterministischer Code: Er erkennt Gesichter, wählt den Bildausschnitt, rendert, zählt, prüft und repariert. Ob eine Datei besteht, entscheiden allein die Tools.
Die häufigsten Probleme, jeweils mit der Lösung. Beginnen Sie mit /postkitty doctor. Der Befehl findet die meisten Setup-Probleme und sagt, wie Sie sie beheben.
Hermes kennt postkitty nach der Installation nicht
Öffnen Sie einen neuen Chat. Hermes lädt die Tools eines Plugins beim Start eines Chats, deshalb fehlen sie in dem Chat, aus dem Sie installiert haben. Fehlen sie weiterhin, ist das Plugin nicht aktiviert: Führen Sie hermes plugins enable postkitty aus.
Video-Ziele werden übersprungen
ffmpeg oder ffprobe fehlt. Installieren Sie ffmpeg, prüfen Sie, dass ffmpeg und ffprobe in Ihrem Terminal laufen, und fragen Sie dann erneut. Unter macOS fehlt dem ffmpeg, das Hermes mitbringt, ffprobe; brew install ffmpeg ergänzt es. Text und Fotos funktionieren auch ohne die beiden.
Fotos oder Video melden, dass die Gesichtserkennung nicht verfügbar ist
postkitty lädt das Gesichtsmodell einmal herunter, bei der ersten Nutzung, und braucht dafür eine Netzwerkverbindung. Gehen Sie online und fragen Sie erneut. Text funktioniert ohne das Modell.
Untertitel werden abgelehnt, weil ffmpeg kein libass hat
Ihr ffmpeg-Build kann keine Untertitel zeichnen. Installieren Sie einen Build mit libass (mit Homebrew auf macOS ist das ffmpeg-full) oder lassen Sie die Untertitel weg. /postkitty doctor zeigt das in der Zeile „Captions“.
Untertitel werden abgelehnt, weil auf dem Rechner keine Schriftart installiert ist
ffmpeg zeichnet Untertitel mit den Schriftarten, die auf dem Rechner installiert sind. Ein Server ohne grafische Oberfläche oder ein Container hat oft keine. Installieren Sie eine (unter Ubuntu zum Beispiel mit sudo apt install fonts-dejavu-core) und fragen Sie erneut. Zählt die Meldung einzelne Zeichen auf, enthält keine installierte Schriftart diese Zeichen: Installieren Sie eine Schriftart für diese Schrift oder entfernen Sie die Zeichen aus der Untertiteldatei. Ein Emoji, das in keiner Schriftart vorkommt, wird weggelassen, und das Ergebnis nennt es. /postkitty doctor zeigt eine fehlende Schriftart in der Zeile „Captions“.
Ein Ziel zeigt failed
Die Zeile nennt das Limit, das die Datei verletzt hat, und sagt, dass die Reparatur den Verstoß nicht beheben konnte. Verlangen Sie für dieses Ziel ein anderes Layout. pad behält das ganze Bild und passt in den meisten Fällen. Die anderen Ziele behalten ihre Dateien, die bestanden haben.
Die falsche Person ist im Bild
Sagen Sie über die Position, wen Sie meinen: „die Person links“, „die zweite Person von links“. Siehe Fokus.
Ein Text liegt über dem Limit
Hermes kürzt ihn und zählt erneut. Auf X, Threads und Bluesky können Sie stattdessen einen Thread verlangen.
Ein animiertes GIF, WebP oder PNG wird abgelehnt
postkitty erstellt Standbilder und Video. Geben Sie ein Einzelbild als JPEG oder PNG an oder den Clip als Videodatei.
Sie haben eine Datei geändert, und das Ergebnis zeigt noch die alte
Verlangen Sie einen neuen Durchlauf mit der geänderten Datei. postkitty scannt sie dann erneut und startet einen neuen Job.