{"id":56042,"plugin_id":"plugin_asdk_app_6ada7bec545881919206a8cf89db59f8","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-26T18:06:28.534Z","digest":"d0d0662ba3a0fecea19d64ecfa270bd79e9a352ce4b7d910e7cda0a0bbcc0e7f","against":null,"payload":{"description":"YouTube art: thumbnails (readable at 320px) and channel banners.","included_files":[{"relative_path":"references/charts.md","size_in_bytes":5659},{"relative_path":"references/design-quality.md","size_in_bytes":22265},{"relative_path":"references/edit-code.md","size_in_bytes":16488},{"relative_path":"references/gotchas.md","size_in_bytes":8693},{"relative_path":"references/markup.md","size_in_bytes":23958},{"relative_path":"references/multi-unit-workflow.md","size_in_bytes":13300},{"relative_path":"references/no-brand-design.md","size_in_bytes":14257},{"relative_path":"references/omni-and-media.md","size_in_bytes":7338},{"relative_path":"references/social-craft.md","size_in_bytes":12086},{"relative_path":"references/youtube.md","size_in_bytes":2626}],"name":"moda-social-youtube","skill_md_contents":"---\nname: moda-social-youtube\ndescription: >-\n  YouTube art: thumbnails (readable at 320px) and channel banners.\n---\n\n# moda-social-youtube\n\n**PREREQUISITE — `load_skill(\"moda-core\")` once per session** (step-0, write\ncontract, free/metered map). Already loaded? Skip ahead. If you cannot load\nit, the non-negotiables: call `moda_bootstrap` before anything; `brand_list`\nbefore creating; revision-guarded writes use `expected_revision` from your last read.\n`canvas_edit_image` captures its own target state and has no revision argument.\nOn `stale_revision`, re-read and retry once; send the canvas link\nthe moment it exists; stuck or failed? `ask_expert(\"<question>\")` — free and\nfast, never guess.\n\n## Sizes and defaults\n\n| Format | Size | `category` | Notes |\n|---|---|---|---|\n| Thumbnail | 1280×720 | `social` | judged at ~320px wide — that is the real brief |\n| Channel banner | 2560×1440 | `social` | only 1546×423 centred is visible on every device |\n\n- **Thumbnail rules, not preferences**: ≤4 words of on-image text; the subject\n  or face fills a third of the frame; one high-contrast focal point; type ≥120px\n  at 1280 wide so it survives the shrink. No thin weights, no full sentences.\n- **Banner safe core**: everything that must be seen — name, tagline, upload\n  cadence, logo — lives inside the centred 1546×423. Decoration extends outward\n  into the 2560×1440 field, which desktop shows and phones crop away.\n\n## Recipe — thumbnail\n\n1. `canvas_create(name='[Episode] — thumb', intent='[one-line brief]', width=1280, height=720, category='social', brand_kit_id='[KIT]')` — send the link immediately.\n2. Subject first: a photo the user gave you (the `upload` tool) or after laying out the canvas and its hero shape, use `canvas_edit_image` targeting that shape, with `operation.kind=\"generate\"` and a full subject/style/brand-color prompt in `operation.prompt`.\n3. Author in ONE apply: `canvas_apply_markup(canvas_ref, page, markup)` — ≤4 words, type ≥120px, one focal point (references/markup.md).\n4. **The 320px check** (this recipe's verify twist): `screenshot=true` on that apply (or `canvas_screenshot(canvas_ref)`), then judge it at thumbnail scale — a thumbnail that only reads full-size is a failed thumbnail. Fix what fails in at most ONE repair write, captured the same way, then ship.\n5. `export(canvas_ref, format='png', pixel_ratio=2)` — hand over the link.\n\n## Recipe — channel banner\n\n1. `canvas_create(name='[Channel] — banner', intent='[brief]', width=2560, height=1440, category='social', brand_kit_id='[KIT]')` — link immediately.\n2. Author the safe core FIRST — the centred 1546×423 — then extend background,\n   texture, and colour outward to the full frame in the same apply.\n3. `canvas_screenshot(canvas_ref)`; check that cropping to the core loses\n   nothing that carries meaning; at most ONE repair write, captured the same way, then ship.\n4. `export(canvas_ref, format='png', pixel_ratio=2)` — hand over the link.\n\n## Examples\n\n- \"a thumbnail for this episode\" → thumbnail recipe, judged at 320px.\n- \"thumbnails for these 3 videos\" → run the thumbnail recipe per video, one\n  canvas each; the winning layout goes to moda-templates.\n- \"refresh our channel art\" → banner recipe, everything meaningful in the core.\n- \"a YouTube banner AD\" → not channel art: moda-social-ads owns paid formats.\n\n## Errors\n\nAny typed error → load moda-core and read its recovery reference.\nMost likely here: type that passes full-size and dies at 320px — shrink the\nscreenshot before delivering. `stale_revision` heals — retry once.\n\n## Make it recurring\n\nTemplate-ize the winning thumbnail via moda-templates, then moda-automate the\nper-video instance — a thumbnail system beats a thumbnail.\n\nSee also: moda-social — other platforms, ad sets, one-off graphics ·\nmoda-core — the contract, recovery, everything Moda can do.\n\n## References\n\n| Doc | Load when |\n|---|---|\n| references/youtube.md | depth: thumbnail composition patterns, banner device crops |\n| references/markup.md | before any markup apply |\n| references/no-brand-design.md | no kit is active — inventing the identity: palette law, type, imagery, layout system |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}