Communitygithub.com

Geschmack-Anwendung

Erzeugt ein neues Video gegen ein destilliertes Stilpaket und schneidet es zu einem fertigen Stück – der Plan wird aus der Referenz übernommen.

Was ist Geschmack-Anwendung?

Diese Skill (Teil 2 einer Pipeline) erzeugt aus einem destillierten Stilpaket (erzeugt von taste-distillation) ein neues Video, schneidet es rhythmisch passend zur Referenz und kann auch 3D-Objekte einbinden. Sie unterstützt lokale Verarbeitung (Python-Skripte in `scripts/`) sowie Live-Uploads/Downloads zu Fal-Providern (durch `TASTE_FORGE_ALLOW_LIVE=1` geschützt). Die Pipeline generiert Takes statt Einzelshots, um Effizienz und Rhythmus zu verbessern (von ~21% auf ~77% Nutzung), und verwendet direkt gemessene Grade- und Cuttings-Algorithmen. Für Blender- und Resolve-Workflows gibt es spezifische Schnittstellen, und die Skill enthält umfangreiche Hinweise zu Fallstricken der Fal-Plattform (kein 3D-Renderer, compose kein Overlay, Keyframe-Zeiten in Millisekunden). Die Ausgabe wird durch Verteilungsmetriken (Hintergrund, Chroma, Kontrast, Banding, Kadenz) verifiziert, nicht nur durch Mittelwerte.

Funktioniert mit~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/taste-application

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Geschmack-Anwendung?

Die zweite Hälfte der Pipeline. taste-distillation misst Referenzen zu einem Stilpaket; diese erzeugt gegen dieses Paket und schneidet das Ergebnis.

Ausführungs- und Liefervertrag

Die ursprüngliche Implementierung befindet sich hier in scripts/; kein separates ito-video-Checkout erforderlich. Installieren Sie scripts/requirements.txt für lokale Verarbeitung. Installieren Sie scripts/requirements-live.txt nur für die Provider-Ausführung. Live-Uploads, -Abgaben und -Downloads erfordern explizit TASTE_FORGE_ALLOW_LIVE=1 zusätzlich zu den Anmeldeinformationen; setzen Sie es nur für den autorisierten Lauf des Benutzers. --dry-run bleibt ohne Anmeldeinformationen und erzeugt gekennzeichnete Platzhalter. Ein mehrdeutiges Provider-Timeout wird nicht als neuer bezahlter Auftrag wiederholt. Überprüfen Sie die Provider-Anforderung, bevor Sie entscheiden, ob eine weitere Abgabe gerechtfertigt ist.

Verwenden Sie vorhandene abgeschlossene Takes ohne Provider-Aufrufe:

python scripts/pipeline.py --genre example --root stylepacks \
  --takes media/take-a.mp4 media/take-b.mp4 --duration 12 --fps 30 \
  --out out/review-v1.mp4

--duration ist ein Best-Effort-Kadenzziel, keine genaue Laufzeit. Vollständige Aufnahmen können eine kürzere oder längere Bearbeitung erzeugen; der Assembler dupliziert keine Clips oder fügt keine Auffüllung hinzu, um das Ziel zu erreichen. Das Ausgabemanifest behält die tatsächliche duration bei und fügt duration_contract mit angeforderter und tatsächlicher Dauer, Fehlbetrag, Überschreitung und dem cadence_target-Policy hinzu. Unterschiede von mindestens einem Ausgabeframe werden explizit gewarnt. Es wird kein Modus für exakte Dauer bereitgestellt; wenn eine genaue Laufzeit erforderlich ist, überprüfen Sie die Quittung und überarbeiten oder lehnen Sie den Schnitt vor der Lieferung ab.

Die Pipeline behält die bewerteten Shots-Dateien jedes Laufs, da die bearbeitbaren FCPXML und EDL darauf verweisen. Sie verweigert Ausgabekollisionen und meldet Timeline-Exportfehler. Ein abgeschlossener Render ist kein gespeichertes Editor-Projekt oder kreative Freigabe. Bewahren Sie Quellmaterialien und versionierte Projekt-Checkpoints vor und nach Live-Bearbeitungen auf; zeichnen Sie den gespeicherten Pfad und den Hash getrennt von der In-Memory-Timeline-Quittung auf.

Klonbereite Fal-Graphen und ihr Offline-Eingabe-Compiler sind in workflows/README.md dokumentiert. Kompilieren Sie Brief und Stilrichtung vor der Abgabe; gehen Sie nicht davon aus, dass ein getrenntes Schemafeld einen Modell-Prompt beeinflusst. Validieren Sie die aktuellen Endpunktfelder gegen den tatsächlichen Provider vor einem bezahlten Lauf.

Für Blender verwenden Sie das vollständig texturierte GLB-Quellmaterial; Retopologie ist ein separat benanntes Derivat und ersetzt niemals dieses Quellmaterial. blender_prop.py unterstützt explizite --width 1920 --height 1080 --fps 30 --receipt receipt.json und bewahrt vom Paket abgeleitete Rim-Beleuchtung und Materialtexturen. Das Speichern einer Szene unterscheidet sich vom Rendern; überprüfen Sie den Zustand der Quittung und die gepackten Bilder.

Für Resolve-Overlays verwenden Sie taste.resolve.apply_placements mit eingefügten Objekten aus einem explizit ausgewählten, versionierten Ziel. Setzen Sie source_end_mode auf die Konvention, die auf diesem Host verifiziert wurde. Gehen Sie nicht von einem inklusiven Quellenende über Resolve-Versionen hinweg aus. Der Adapter ordnet überlappende Effekte über erhaltenen Spuren an und überprüft jede Platzierung sofort und erneut nach allen Anhängen. Composite-Integers müssen mit der installierten API übereinstimmen; für den verifizierten Studio 21 Host ist Screen 5, nicht der falsche 22 des historischen Builders. Die Quittung beweist nur die In-Memory-Platzierung. Speichern Sie das Projekt, überprüfen Sie seinen Checkpoint, dann inspizieren Sie die genaue gerenderte Ausgabe, bevor Sie die Lieferung melden.

Wann zu aktivieren

  • "ein Video in diesem Stil machen" / "das Paket anwenden" / "dieses Filmmaterial ergänzen"
  • Zusammensetzen generierter Clips zu etwas mit echtem Bearbeitungsrhythmus
  • 3D-Props aus einem Look prägen und zurück ins Video bekommen
  • Überprüfen, ob ein fertiges Stück tatsächlich seiner Referenz entspricht

Arbeitsteilung

Das Modell liefert Inhalt, Bewegung, Bildausschnitt und Beleuchtungsstruktur. Das Paket liefert Farbe und Rhythmus. Dies ist gemessen, keine stilistische Präferenz – siehe taste-distillation für die Zahlen. Praktische Konsequenzen:

  • Der Generierungs-Prompt enthält null Farbeinhalte. Fügen Sie "Farbe: keine. Neutral rendern. Grading wird nachträglich angewendet." hinzu.
  • Halten Sie zwei separate Flags: --brief (was PASSIERT: Subjekt, Aktion, Ort) und --style-steer (wie es AUSSIEHT). Das Zusammenführen lässt Stilwörter in die Szene sickern ("Teal" wird zu einem tealfarbenen Objekt) und Subjektwörter in das Grading.
  • Das Modell reagiert auf lokale, überprüfbare Regeln weitaus besser als auf globale. "Hintergründe rein schwarz und unbeleuchtet; Subjekte zu Weiß hin aufhellen" funktioniert; "extremer Kontrast" nicht.

Generieren Sie TAKES, nicht Shots

Die naheliegende Lesart von "den Rhythmus treffen" ist eine Generierung pro Shot. Sie ist wirtschaftlich absurd. Eine Referenz mit durchschnittlich 0,78s/Shot gegen einen Endpunkt mit einer 4-Sekunden-Untergrenze verwandelt ein 10s-Stück in 12 Aufrufe, 48 generierte Sekunden für 10 genutzte (21% Effizienz), und zwölf nicht zusammenhängende Clips, die zu etwas zusammengenäht werden, das wie eine durchgehende Sequenz wirken sollte.

Cut-Filmemacher rollen einen längeren Take und schneiden darin. Gruppieren von Shots in ~5s-Takes: 3 Aufrufe, 13 generierte Sekunden, 77% Effizienz, und aufeinanderfolgende Shots, die tatsächlich zueinander gehören, weil sie aus derselben Generierung stammen.

Geben Sie dem Modell vor, welche Form es haben soll, oder es rendert eine langsame, fixierte Kamerafahrt und sechs Schnitte darin wirken wie ein Stolpern:

"Gefilmt als EIN kontinuierlicher Take ohne harte Schnitte darin. Es wird im Schnitt in 6 Teile von etwa 0,8 s geschnitten, also müssen Bildausschnitt, Subjekt und Licht sich ständig ändern – jedes 0,8-s-Fenster muss als eigener Shot allein bestehen können."

Schnittregeln

  • Neu kodieren, nie Stream-Copy. Stream-Copy schneidet nur auf Keyframes, was bei 0,78 s Shotlänge jede Grenze auf den nächsten GOP rundet – und damit genau das zerstört, was die Pipeline bewahren soll.
  • Wenn vorhandenes Filmmaterial ergänzt wird, verwenden Sie dessen eigene Shot-Grenzen. Das Zerschneiden eines Basisvideos in zusammenhängende Stücke und deren Wiedergabe in der Reihenfolge setzt nur das Original wieder zusammen: Jeder "Schnitt" landet mitten im Shot und ist unsichtbar. Gemessen: Eine 20-Shot-Montage registrierte nur 12 erkannte Schnitte. Erkennen Sie echte Grenzen und nehmen Sie jeden N-ten Schnitt, damit aufeinanderfolgende Schnitte garantiert diskontinuierlich sind. Das verbesserte eine Schnittmessung von 1,29 s auf 0,83 s gegenüber einem Ziel von 0,78 s.
  • Mustern Sie Shotlängen aus der Verteilung der Referenz, nicht aus ihrem Mittelwert, damit der Schnitt die Rhythmusvarianz erbt, anstatt auf gleichmäßige Clips zu glätten.

Grading-Regeln

  • Direkte Messung schlägt eine eingebackene LUT, wenn Sie den Clip haben: Messen Sie ihn, passen Sie seine L*-CDF an, wenden Sie Zonen-Chroma an. grade_clip_direct erreichte MAE 1,58 und Kontrast 34,0 gegenüber 34,7.
  • Ankern, nicht CDF-angepasst, wenn das Histogramm des Clips nicht dem der Referenz ähnelt. Das Erzwingen eines 68%-schwarz generierten Clips auf ein bewegtes Referenzhistogramm hob den gesamten Hintergrund aus dem Schwarz: Die Hintergrunderhaltung fiel auf 26,0% (CDF) gegenüber 69,0% (Anker), während MAE und Kontrast beide immer noch ausgezeichnet aussahen. Standardmäßig auf angekernten Ton gehen.
  • Batch-Größe ist wichtig. 48 Frames auf einmal zu gradieren brachte den Prozess zum OOM-Abbruch; 6 sind sicher.

Wiederhergestelltes fal-Plattformverhalten

Diese Beobachtungen und Endpunktbeispiele stammen aus dem wiederhergestellten Workflow. Überprüfen Sie die aktuellen Endpunkt-Metadaten erneut; sie sind keine Garantien für jede zukünftige Provider-Version. Die gebündelten Graph-Vorlagen zeichnen die separat verifizierten Workflow-Eingaben auf, einschließlich expliziter Steuerung des generierten Audios.

Diese kosten reale Zeit, um sie zu entdecken. Überprüfen Sie sie, bevor Sie einen Graphen entwerfen.

LimitDetail
Kein 3D-Renderer vorhandenfal hat image-to-3d, text-to-3d, 3d-to-3d und sonst nichts. Jeder 3d-to-3d-Endpunkt gibt ein weiteres Mesh aus. Es gibt keine 3d-to-image/3d-to-video-Kategorie, daher kann ein gemünztes GLB nicht wieder in einen fal-Videographen eingehen. Lokal rendern, dann fal-ai/ffmpeg-api/images-to-video verwenden.
compose kann kein Overlayfal-ai/ffmpeg-api/compose lehnt einen zweiten Track mit "Multiple video tracks are not supported" ab – und es zählt einen image-Track als Video-Track. Es sequenziert nur einen Videotrack. Lokal mit ffmpeg compositen.
compose-Keyframes sind MillisekundenNichts in der Antwort sagt das. Ein in Sekunden eingereichter Lauf wird akzeptiert und gibt ein 1000x zu kurzes Video zurück.
extract-frame bietet nur erste/Mitte/letzteKein beliebiger Zeitstempel. Verwenden Sie die drei als drei verschiedene Konditionierungsbilder.
Keine Schleifen, keine String-Konkatenation im DAGPer-Shot-Fan-Out muss Knoten für Knoten verfasst oder lokal gehalten werden.
Kling 3.0 hat kein Reference-to-VideoDie v3-Reihe ist nur Text/Bild/Bewegungssteuerung; Reference-to-Video lebt in der o3-Reihe: fal-ai/kling-video/o3/pro/reference-to-video.
Prefixe sind nicht einheitlichbytedance/*, tripo3d/*, meshy/*, minimax/*, openai/* tragen kein fal-ai/-Präfix. kling-video, veo3.1, flux-*, hunyuan-3d, ffmpeg-api schon.

Endpunkt-Auswahl

SlotBestWertalternative
Referenz→Videobytedance/seedance-2.5/reference-to-video (~$0.473/s @720p)fal-ai/kling-video/o3/pro/reference-to-video (~$0.112/s)
Bild→3Dfal-ai/hunyuan-3d/v3.1/pro/image-to-3d ($0,375, bis zu 8 Ansichten)tripo3d/h3.1/image-to-3d ($0.20)
Text→3Dfal-ai/hunyuan-3d/v3.1/pro/text-to-3dtripo3d/h3.1/text-to-3d
Retopologiefal-ai/hunyuan-3d/v3.1/smart-topology ($0,75)tripo3d/tripo/remesh (~75x günstiger)
Teil-Splitfal-ai/hunyuan-3d/v3.1/part (nur FBX)tripo3d/tripo/segment
Text→Bildfal-ai/nano-banana-pro ($0,15 Pauschal)fal-ai/flux-2-pro ($0.03/MP)

Seedance ist ~4x Kling o3's Preis für die gleichen 5 Sekunden. Es verdient diesen Preis für Multi-Referenz-Treue (bis zu 50 gemischte Bild/Video/Audio-Referenzen) und verdient ihn nicht, wenn es auf einem einzelnen Standbild konditioniert.

Modell-IDs und Preise ändern sich. Überprüfen Sie auf fal.ai/models, bevor Sie eine davon versprechen.

Der 3D-Zweig

python mint3d.py --genre <name> --from-stills 4 --retopo --render
python mint3d.py --genre <name> --prompt "cracked chrome visor" --render
  • Generieren Sie zuerst eine saubere Platte; heben Sie nicht aus Referenz-Standbildern ab. Die angegebene Eingabeanforderung des Endpunkts ist einfacher Hintergrund, einzelnes Objekt, Objekt >50% des Bildes. Referenzaufnahmen sind das Gegenteil – Collagen, Weitwinkelaufnahmen, mehrere Subjekte, eingebrannte Grafiken – und sie erzeugen skulpturiertes Rauschen. Text → Einzelobjektplatte → Mesh kostet ~$0,15 extra und ist der Unterschied zwischen einem verwendbaren Mesh und einem weggeworfenen.
  • Multi-View ist nach Winkel benannte Felder, keine Liste. input_image_url (vorne, erforderlich), dann back_image_url, left_image_url, right_image_url, left_front_image_url, right_front_image_url, top_image_url, bottom_image_url. Es gibt kein input_image_urls und kein multi_view-Flag – deren Erfindung degradiert jede Münzprägung auf Single-View, während es den Anschein erweckt, zu funktionieren. Ein falsches Winkel-Label ist schlimmer als das Weglassen der Ansicht, weil das Modell ihm vertraut.
  • Adressieren Sie das GLB per Key, nicht per Position. Die Antwort trägt ein thumbnail PNG und einen model_urls-Block neben model_glb; die erste URL zu nehmen funktioniert nur, bis die Keys sich neu ordnen, und ein Vorschau-PNG lädt gut herunter – nichts schlägt fehl, bis Blender sich weigert, es zu öffnen.
  • Fordern Sie PBR-Maps an. Ohne sie leuchtet das Mesh wie bemalte Pappe.
  • Retopologisieren, wenn jemand es bearbeiten oder riggen wird. Generierte Meshes sind dicht und chaotisch.
  • Rendern Sie lokal, um den Kreislauf zu schließen. Sobald ein Drehteller Frames ist, ist es Filmmaterial, und jede nachgelagerte Stufe verarbeitet bereits Filmmaterial – gradieren, schneiden, als Element einblenden oder als Konditionierungsreferenz hochladen. Verwenden Sie Blender, wenn ein Binary im PATH ist; behalten Sie einen leichtgewichtigen Software-Rasterizer als Standard, da ein Headless-GL-Kontext das mit Abstand häufigste ist, das in einem Container fehlt, und ein Renderer, der nur auf einer Workstation funktioniert, ist kein Teil einer Pipeline.

Verifizieren, dann glauben

Jede andere Stufe behauptet ein Ergebnis. Überprüfen Sie es, und überprüfen Sie Verteilungsform, nicht nur Momente:

  • background – Anteil des Frames unter L*10 gegenüber dem Paket-Wert. Vergleichen Sie mit der Referenz, nicht mit dem Quellclip: Eine generierte Quelle mit 68% Schwarz ist schwärzer als jede Referenz in einem 24–55% Band, daher fordert "die Schwarztöne der Quelle erhalten" das Falsche und entschuldigt gleichermaßen ein angehobenes Grading.
  • chroma_mae – Pro-Zone a*/b*-Fehler, unter Verwendung des Medians (entsprechend der Messung der Paketziele; ein Mittelwert vergleicht hier eine schiefe-sensitive Statistik mit einer robusten und meldet eine Definitionsdiskrepanz als Fehler).
  • contrast / black_point / white_point
  • banding – leere L*-Histogramm-Bins zwischen besetzten Bins. Das Zählen aller leeren Bins funktioniert nicht: Ein legitimerweise dunkler Clip hat leere Highlight-Bins.
  • cadence – erkannte mittlere Shot-Länge gegenüber der Referenz.

Achten Sie auf die Einheitenfalle: OpenCV ändert die Lab-Konvention mit dtype. Auf float32 ist L* 0–100 und a*/b* sind vorzeichenbehaftet; auf uint8 ist L* 0–255 und a*/b* sind +128 versetzt. Das Mischen meldet Chroma-Fehler in den Hunderten.

Vollständige Kette

python pipeline.py --genre <name> --refs a.mov b.mov \
  --brief "was passiert" --duration 12 \
  --base-video existing.mp4 --out out/FINAL.mp4

mint → distill → (mint3d) → apply → forge → verify. Stufen 1–3 werden gecached, sodass das Iterieren über Briefe nie etwas neu misst. --dry-run simuliert jeden Netzwerkaufruf: Der Plan, die Prompts, das Track-Layout und das Manifest werden dennoch alle getestet.

Anti-Patterns

Nicht machenWarum
Eine Generierung pro Shot21% Effizienz, 12 nicht zusammenhängende Clips
Farbe in den Prompt setzenGemessenermaßen nicht funktional; drückt weg von der neutralen Basis, die die LUT will
Stream-Copy der SchnitteKeyframe-only-Grenzen zerstören den Sub-Sekunden-Rhythmus
Basisvideo kontinuierlich schneidenSetzt das Original wieder zusammen; jeder Schnitt unsichtbar
Vertrauen, dass compose überlagertEs kann nicht; es lehnt den zweiten Track ab
Sekunden an compose sendenStill 1000x zu kurz
Nur nach MAE liefernHintergrundanteil-Prüfung hinzufügen

Entlehntes Filmmaterial enthält die UI der Aufnahme-App

Der einzige schwerwiegendste Fehler, der in einem gelieferten Schnitt gefunden wurde: Das fertige Video enthielt den Like-Button, den View-Zähler und den Kommentar-Ballon von jemand anderem, weil die Basis …

Individual skills in this repo

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

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Verwandte Skills