Communitygithub.com

beachyphotoandfilm-arch/video-skills – Social-Media-Planung

Rendere fertige Reels aus DaVinci Resolve, schreibe Bildunterschriften in der Stimme des Erstellers, füge ein benutzerdefiniertes Instagram-Cover von reel-covers hinzu und plane sie über Metricool für Instagram, TikTok und YouTube Shorts. Kümmere dich um den Drive-Upload, Kollisionsprüfungen mit dem vorhandenen Kalender und die Bereinigung. Auslöser: „Termine die Reels“, „Poste diese“, „Setze diese in den Kalender“ oder nach Genehmigung der Reels.

Was ist video-skills – Social-Media-Planung?

Mit diesem Skill für KI-Agenten (z. B. Claude Code, Cursor, Codex) automatisieren Entwickler und Content-Ersteller den gesamten Workflow von der DaVinci-Resolve-Bearbeitung bis zur Veröffentlichung auf Instagram, TikTok und YouTube Shorts über Metricool. Er rendert Reels mit eingebrannten Untertiteln, generiert Bildunterschriften, die den persönlichen Stil des Erstellers nachahmen, erstellt benutzerdefinierte Instagram-Cover mithilfe des `reel-covers`-Skills und plant die Beiträge unter Berücksichtigung des bestehenden Kalenders, um Überschneidungen zu vermeiden. Der Skill umfasst einen Google-Drive-Upload, um Metricools Anforderung öffentlicher URLs zu erfüllen, und eine automatische Bereinigung der temporären Dateien nach erfolgreicher Veröffentlichung. Er enthält detaillierte FFmpeg-Optimierungen, um die Instagram-Qualitätslimits einzuhalten, und Prozesse für Stichprobenprüfungen, sodass fehlerhafte Render erkannt werden, bevor sie live gehen. Der Skill ist vor allem für Produzenten von Kurzvideos gedacht, die einen zuverlässigen, wiederholbaren Publishing-Pipeline benötigen. Er lässt sich über Befehle wie „Termine die Reels“, „Poste diese“ oder nach der Genehmigung von Reels auslösen und vermeidet das manuelle Verschieben von Dateien sowie Fehler durch vergessene Kalenderkollisionen.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/schedule-social

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

In sozialen Netzwerken veröffentlichen

Einrichtung: Diese Felder ausfüllen

Ersetze jeden Platzhalter unten vor dem ersten Durchlauf.

PlatzhalterBedeutung
<YOUR_METRICOOL_BLOG_ID>Die blogId deiner Metricool-Marke (von getBrandSettings)
<YOUR_TIMEZONE>IANA-Zeitzone für die Planung, z. B. America/Chicago
<YOUR_POST_TIME>Standardmäßige tägliche Veröffentlichungszeit, z. B. 10:00
<YOUR_IG_HANDLE>, <YOUR_TIKTOK_HANDLE>, <YOUR_YOUTUBE_CHANNEL_ID>Die in Metricool verbundenen Konten
<YOUR_DRIVE_UPLOAD_FOLDER_ID>Ein Google Drive-Ordner, der für „jeder mit Link“ freigegeben ist (siehe Medien-Hop)
<YOUR_VIDEO_LIBRARY>Wo fertige Dateien aufbewahrt werden, z. B. ~/Videos/Finished
<YOUR_STANDING_CTA>Optionaler abschließender Satz, den du in jede Bildunterschrift einfügst
<YOUR_VOICE_FILE>Optional: Pfad zu einer Sprach-/Stilvorlage für Bildunterschriften

Marke: blogId <YOUR_METRICOOL_BLOG_ID>, Zeitzone <YOUR_TIMEZONE>. Verbunden: Instagram (<YOUR_IG_HANDLE>), TikTok (<YOUR_TIKTOK_HANDLE>), YouTube (<YOUR_YOUTUBE_CHANNEL_ID>).

Der Medien-Hop (der Teil, der nicht offensichtlich ist)

Die Metricool-API akzeptiert nur öffentliche URLs. Sie kann keine lokale Datei verarbeiten. Die funktionierende Kette:

  1. Lade die MP4 in einen Drive-Ordner wie z. B. Metricool Uploads (Claude) (<YOUR_DRIVE_UPLOAD_FOLDER_ID>) hoch. Teile den Ordner einmalig mit „jeder mit Link“; Dateien erben diese Berechtigung, also keine Freigabe pro Datei.
    cd <Verzeichnis mit der Datei> && gws drive files create \
      --params '{"uploadType":"multipart","supportsAllDrives":true}' \
      --json '{"name":"<Name>.mp4","mimeType":"video/mp4","parents":["<YOUR_DRIVE_UPLOAD_FOLDER_ID>"]}' \
      --upload "<Datei>"
    
  2. Plane mit der Direktdownload-URL: https://drive.google.com/uc?id=<fileId>&export=download. Der /view-Link schlägt fehl mit „Fehler beim Normalisieren der Medien“.
  3. Metricool kopiert die Datei in seinen eigenen Speicher; das media-Feld in der Antwort wechselt zu static.metricool.com/....
  4. Lösche die Drive-Kopie, sobald du das siehst. Der Speicher sammelt sich nie an.

Claude kann normalerweise keine Drive-Dateien öffentlich machen (die Sandbox blockiert es) und kann seine eigenen Berechtigungen nicht bearbeiten. Deshalb gibt es den freigegebenen Ordner. Wenn eine Datei außerhalb des Ordners landet, bitte den Benutzer, sie zu verschieben, anstatt zu versuchen, sie freizugeben.

Bildunterschriften

Wenn du eine Sprachvorlage hast, lies zuerst <YOUR_VOICE_FILE> und passe dich daran an. Andernfalls verwende diese Standardwerte.

Wenn das Reel einen Kommentar-Keyword-CTA hat (ein Keyword, das eine automatisierte DM oder E-Mail auslöst), ist Zeile 1 der CTA:

  • Zeile 1: Kommentiere <KEYWORD> und ich schicke dir <Name der Ressource> kostenlos 👇, Schlüsselwort in Großbuchstaben, genau wie im CTA-Clip des Reels gesprochen.
  • Dann die Hook-Zeile und die 2–4 lehrenden Zeilen darunter.
  • Schließe mit dem stehenden CTA, falls du einen verwendest.
  • Das Schlüsselwort muss mit dem gesprochenen CTA des Reels übereinstimmen (reel_cta in der Zustandsdatei des Videos). Ein Schlüsselwort pro Video.

Format für Reels ohne Keyword-CTA:

  • Zeile 1 ist der Hook. Sie ist die einzige Zeile, die im Feed angezeigt wird. Normalerweise dieselbe Zeile, mit der das Reel beginnt.
  • 2–4 kurze Zeilen, die eine Sache lehren. Zeilenumbrüche dazwischen, kein Absatz.
  • Kein Hashtag-Spam. Wenige oder keine.
  • Schließe mit <YOUR_STANDING_CTA> wörtlich, falls du einen hast.

Schreibe basierend auf dem, was tatsächlich im Reel ist, verwende die Worte des Erstellers aus dem Transkript, keine allgemeinen Ratschläge. Kurz aber lehrreich: Der Zuschauer sollte allein aus der Bildunterschrift eine brauchbare Sache lernen können.

Allgemeine Beispiele für die Form:

„Jeden Tag posten = BURNOUT / 3 großartige Videos pro Woche posten = WACHSTUM“

„Kurzer Tipp, wenn du besseren Ton willst: Platzier das Mikrofon näher, nicht den Gain höher …“

Rendern

Untertitel werden eingebrannt: video-reels platziert sie auf V3 als Alpha-Overlay-Clip, mit der Text-Hook-Karte auf V2. Nichts zu importieren, kein Burn-In-Kontrollkästchen.

  1. Der Benutzer schneidet das Reel. Beide Overlay-Spuren sind unabhängige Clips, daher verschiebt das Trimmen von V1 sie nicht. Wenn der Schnitt neu gemacht wird, rendere die Untertitel dieses Reels neu, anstatt sie zu verschieben.
  2. Claude rendert sie über die Resolve-API. Vier Reels dauern etwa 90 Sekunden.
out = os.path.expanduser("~/Movies/<Video>-deliverables/reels-final")
os.makedirs(out, exist_ok=True)
project.DeleteAllRenderJobs()
for i in range(project.GetTimelineCount()):
    t = project.GetTimelineByIndex(i+1)
    if not t.GetName().startswith("Reel"):
        continue
    project.SetCurrentTimeline(t)
    project.SetRenderSettings({"TargetDir": out, "CustomName": t.GetName().replace(" ", "_"),
                               "SelectAllFrames": True, "FormatWidth": 1080, "FormatHeight": 1920,
                               "ExportVideo": True, "ExportAudio": True})
    project.SetCurrentRenderFormatAndCodec("mp4", "H264")
    project.AddRenderJob()

Dann start_rendering. Codec-String ist "H264", nicht "H.264", und das Format ist "mp4". Überwache das Ausgabeverzeichnis statt des Job-Status; die Dateien erscheinen, sobald sie fertig sind. Erwarte ~40 MB für 30 Sekunden. 3. Rendern ist der Point of no return für das Timing, also mach jegliches Trimmen vorher. 4. Überprüfe die Ausgabe mit ffmpeg vor dem Hochladen, ein Frame innerhalb des Hook-Fensters und einen in der Mitte des Reels:

ffmpeg -v error -ss 1.5 -i reel.mp4 -frames:v 1 hook.png -y
ffmpeg -v error -ss 8   -i reel.mp4 -frames:v 1 cap.png  -y

Staple sie zu einem Proof-Blatt und sieh es dir tatsächlich an. Dies ist der letzte Ort, an dem eine fehlende Hook-Karte oder eine leere Untertitelspur erkannt werden kann, und nach der Planung gibt es keine Löschung.

Wo die fertigen Dateien landen

Alles, was behalten wird, landet in <YOUR_VIDEO_LIBRARY>/, ein Ordner pro Video:

<YOUR_VIDEO_LIBRARY>/<Video> YYYY-MM-DD/
    Reels/              was gepostet wurde. 1080x1920 H.264
    Reels/Masters/      gleicher Schnitt, 60 Mbps Archiv
    Timelines/          eine .drt pro Timeline + das Projekt .drp
    Covers/             die genehmigten Instagram-Reel-Cover, 1080x1920 JPG
    Thumbnails/         die Optionen in voller Größe
    YouTube/            das exportierte Langvideo, Auslieferung + Master
    Posting schedule.txt   was rausgeht, wohin und wann

Die Upload-Datei: so hoch wie die Instagram-Publishing-API erlaubt

Metricool postet über die Meta-Content-Publishing-API, die eine Obergrenze hat. Lade die beste Datei hoch, die in diese Grenzen passt, erstellt aus dem 60 Mbps Master und nicht aus Resolves Auslieferungsrender:

  • H.264 High, yuv420p, 1080x1920, closed GOP, moov am Anfang (+faststart)
  • Video max. 24 Mbps (die Obergrenze ist 25), Audio AAC 128 kbps bei 48 kHz (Resolve schreibt 320 kbps, was darüber liegt)
  • Nur Video- und Audiostreams. Resolve fügt einen Timecode-Datentrack hinzu; entferne ihn mit -dn
ffmpeg -i "Masters/<n>.mp4" -map 0:v:0 -map 0:a:0 -map_metadata -1 -dn \
  -c:v libx264 -preset slow -crf 11 -maxrate 24M -bufsize 48M -pix_fmt yuv420p -profile:v high \
  -g 48 -keyint_min 48 -sc_threshold 0 -flags +cgop \
  -c:a aac -b:a 128k -ar 48000 -movflags +faststart "Reels/<n>.mp4"

Bei CRF 16 hat Talking-Head-Material nur ~8 Mbps verbraucht, also gibt CRF 11 mehr vom Budget aus. Führe es im Hintergrund aus, da mehrere Reels bei -preset slow Minuten dauern. Kodiere eine Datei nach der anderen, nicht parallel: Viele parallele Kodierungen können die Festplatte während des Schreibens füllen und jede Datei abschneiden. Instagram komprimiert auf seiner Seite immer noch; dies stellt sicher, dass das, womit es beginnt, so sauber wie möglich ist.

Zwei Render pro Reel, nicht einer. Gleicher Codec, gleiche Auflösung, unterschiedliche Bitrate:

AuflösungBitratefür
Auslieferung1080x1920 H.264Resolve-Durchlauf, dann durch die Upload-Datei oben ersetztHochladen
Master1080x1920 H.26460 Mbps über "VideoQuality": 60000Archiv

Dieselben zwei Durchläufe für das Langvideo bei 1920x1080: ~900 MB Auslieferung, ~4,5 GB Master für ein 10-minütiges Video.

1080x1920 ist die richtige Auflösung: Instagram liefert ohnehin 1080 breit aus, und der Reel-Beschnitt ist bereits aus 4K überabgetastet. Biete kein ProRes oder einen größeren Frame an, es sei denn, du wirst darum gebeten.

VideoQuality ist klebrig. Setze es bei jedem einzelnen Durchlauf.

Render-Einstellungen leben auf dem Projekt, nicht dem Job. Lasse VideoQuality aus einem SetRenderSettings-Aufruf weg und der Render verwendet stillschweigend das, was der vorherige verwendet hat. Ein Auslieferungsdurchlauf für ein Langvideo, der 60000 von den Reel-Mastern erbt, wird ~5x größer als beabsichtigt.

project.SetRenderSettings({..., "VideoQuality": 12000})   # Auslieferung, ~12 Mbps
project.SetRenderSettings({..., "VideoQuality": 60000})   # Master, ~60 Mbps

Verlasse dich nie auf den Standardwert für den Auslieferungsdurchlauf. Und vertraue nie der Job-Liste: VideoQuality wird als None von GetRenderJobList() zurückgelesen, selbst wenn es angewendet wurde. Überprüfe die fertige Datei:

ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of csv=p=0 out.mp4

Überprüfe den freien Speicherplatz, bevor du ein Langvideo-Paar in die Warteschlange stellst. Ein 10-minütiger Master bei 60 Mbps ist ~4,5 GB.

Exportiere die Timelines auch in den Ordner, damit der Schnitt ohne die Projektdatenbank portabel ist:

for i in range(project.GetTimelineCount()):
    t = project.GetTimelineByIndex(i+1)
    t.Export(os.path.join(d, t.GetName() + ".drt"), resolve.EXPORT_DRT)
resolve.GetProjectManager().ExportProject(project.GetName(), os.path.join(d, project.GetName() + ".drp"))
  • Rendere direkt hinein. Setze das Resolve TargetDir auf <dieser Ordner>/Reels, sodass später nichts verschoben werden muss.
  • Benenne nach den Resolve-Timeline-Namen um. Reel_2_-_my_best_tip.mp4 wird zu 2. my best tip.mp4: nummeriert, damit sie sortieren, lesbar auf einen Blick. Gleiche Namen für die Masters und die .drt-Dateien, damit die drei Ordner übereinstimmen.
  • Verschieben, nicht kopieren. ~/Movies/<video>-* enthält Arbeitsdateien (whisper JSON, SRTs, overlay movs, caption movs). Diese bleiben für Neurenderungen erhalten; die fertigen Exporte verlassen diesen Ort.
  • Schreibe Posting schedule.txt nach der Planung mit Datum, Uhrzeit und Netzwerken jedes Reels, damit der Benutzer sehen kann, was bereits raus ist, ohne Metricool zu öffnen.

Erwähne Speicherplatz nur, wenn ein Render tatsächlich wegen Speicherplatz fehlschlägt oder wenn ein Langvideo-Paar eindeutig nicht passt.

Cover (nur Instagram)

Jedes Reel erhält vor der Planung ein benutzerdefiniertes Instagram-Cover. Führe den reel-covers-Skill aus, nachdem die Bildunterschriften genehmigt wurden und vor der Planung. Er liefert ein genehmigtes JPG pro Reel in <Video>/Covers/. Zeige die Cover gleichzeitig mit den Bildunterschriften und Slots an, damit alles in einem Durchlauf genehmigt wird.

Lade jedes Cover über denselben Drive-Hop wie das Video hoch (derselbe Ordner <YOUR_DRIVE_UPLOAD_FOLDER_ID>, mimeType: image/jpeg) und übergib es als videoThumbnailUrl mit der uc?id=...&export=download-Form. Lösche die Drive-Kopie, sobald Metricool seine eigene Kopie hat, genauso wie beim Video.

Planung

Ein Post pro Reel, alle drei Netzwerke, Cover inklusive. Das Cover ist nur auf Instagram relevant. TikTok ignoriert es auf einem persönlichen Konto, und Shorts zeigt es nur auf einem verifizierten Kanal. Teile den Post nicht auf.

"providers":[{"network":"instagram"},{"network":"tiktok"},{"network":"youtube"}],
"media":["https://drive.google.com/uc?id=<Video-ID>&export=download"],
"videoThumbnailUrl":"https://drive.google.com/uc?id=<Cover-ID>&export=download",
"instagramData":{"type":"REEL","showReelOnFeed":true,"isAiGenerated":false},
"tiktokData":{"privacyOption":"PUBLIC_TO_EVERYONE","title":"<Kurzer Titel>"},
"youtubeData":{"type":"short","privacy":"public","madeForKids":false,"title":"<Titel, <100 Zeichen>"}
  • Hinzufügen eines Covers zu einem bereits geplanten Post: updateScheduledPost mit den vollständigen ursprünglichen Feldern des Posts (Text, Anbieter, Medien, alle Netzwerkdaten, Datum) plus videoThumbnailUrl. Es überschreibt und hat kein Rückgängig, also kopiere die Felder von getScheduledPosts wörtlich. Ersetze niemals ein vorhandenes videoThumbnailUrl oder videoCoverMilliseconds: Ein Post, der eines von beiden hat, hat bereits ein ausgewähltes Cover.
  • Wenn ein Update mit „Fehler beim Normalisieren der Medien“ fehlschlägt, während die anderen funktionieren, hat der Abruf von Drive diesmal einmal nicht funktioniert. Der Post bleibt unverändert. Lade die Datei erneut hoch (neue ID) und versuche es erneut. Das erneute Versuchen derselben URL hilft nicht.
  • Überprüfe dann mit getScheduledPosts, ob das videoThumbnailUrl jedes Posts jetzt mit static.metricool.com beginnt, und lösche die Drive-Kopien.
  • YouTube erfordert einen Titel und madeForKids. TikTok möchte einen kurzen Titel.
  • autoPublish: true lässt Metricool automatisch posten.

Wann planen (Standardregel, nach Geschmack anpassen)

Beginne am Tag nach heute. Ein Post pro Tag. Wenn ein Tag bereits Inhalt hat, verschiebe auf den nächsten freien Tag.

Tag = morgen
für jeden Post in Reihenfolge:
    solange Tag bereits einen geplanten Post hat:  Tag += 1
    plane um <YOUR_POST_TIME> Ortszeit an diesem Tag
    Tag += 1
  • <YOUR_POST_TIME> in <YOUR_TIMEZONE> ist die Standard-Veröffentlichungszeit.
  • Rufe immer zuerst getScheduledPosts auf, die morgen bis morgen + (Anzahl der Posts + 14 Tage) abdeckt, damit du die Lücken sehen kannst. Wenn diese Prüfung übersprungen wird, kann ein Post auf einen bereits belegten Slot landen.
  • Ein Tag gilt als belegt, wenn irgendetwas an diesem Tag geplant ist, einschließlich Entwürfe.
  • Bündel nicht mehrere Posts an einem Tag und hinterlasse keine Lücken: Der Sinn ist eine gleichmäßige tägliche Veröffentlichung, die sofort beginnt.
  • Setze niemals ein Testlabel in den Bildunterschriftentext. Kein „TESTENTWURF“, kein „kann gelöscht werden“. Die Bildunterschrift ist immer der fertige Text, auch bei einem Testlauf; der Benutzer möchte ihn möglicherweise behalten. Markiere Testposts mit draft: true + autoPublish: false (Entwürfe sind im Planer visuell unterscheidbar) und übergebe die plannerUrl plus die Post-ID, damit sie mit einem Klick gelöscht werden kann.

Langformatiges YouTube (das Hauptvideo, kein Short)

Empfehlung: Sende große Langformat-Dateien nicht über Metricool. Lade sie in YouTube Studio hoch. Ein ~1 GB großer Export, der über Metricool gesendet wird, kann beim Transfer abgeschnitten gespeichert werden. Resolve legt den MP4-Index (moov) am Ende der Datei ab, daher ist eine abgeschnittene Kopie unlesbar, und YouTube meldet „Verarbeitung abgebrochen“, nachdem es bereits „veröffentlicht“ wurde. Metricool meldet möglicherweise keinen Fehler. Übergib dem Benutzer die Datei, den Titel, die Beschreibung und das Thumbnail zum Einfügen in Studio, gerendert in 4K (Studio hat kein Größenproblem). Alles unten wird als Referenz behalten.

Wenn Metricool für eine große Datei verwendet wird, überprüfe die gespeicherte


Hinweis: Der Originaltext war in der Mitte abgeschnitten. Die Übersetzung endet hier entsprechend. Der SkillMarkdown wurde basierend auf dem vorhandenen Inhalt erstellt.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Cut vertical Instagram reels out of a long-form talking-head video, hook first. Picks the strongest standalone moments from the transcript, opens each reel on its punchiest line, builds vertical timelines in DaVinci Resolve framed on the speaker's face with the LUT applied, and finishes them: a hook (a held text card, or a word-by-word "build" hook with punch-in) and burned-look captions on V3; this-or-that reels get product graphics and a comment-keyword CTA card. You trim and render, nothing to import. Trigger on "make reels", "clip this for Instagram", "cut some verticals", or after a YouTube video is cut.

beachyphotoandfilm-arch/video-skills

Design YouTube thumbnails and titles for a talking-head video. Pulls graded full-res frames out of the raw footage, renders brand-styled variants in two proven layouts, and proofs them at phone size where the click actually gets decided. Trigger on "make thumbnails", "thumbnail for this video", "title and thumbnail", or after a video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

Verwandte Skills