AI Image Generation and Editing
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
Design and edit COROS watch faces in CorosLink Watch Face Studio through its editor tools (applycommands, renderpreview, validate) and the generateimage tool.
$ npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install JunAkerBuilds/CorosLink watchface-studio --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/JunAkerBuilds/CorosLink.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/watchface-studio .claude/skills/watchface-studio && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "watchface-studio" agent skill from https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studio into .claude/skills/watchface-studio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "watchface-studio", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studioType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install JunAkerBuilds/CorosLink watchface-studio --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JunAkerBuilds/CorosLink.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/watchface-studio .agents/skills/watchface-studio && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "watchface-studio" agent skill from https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studio into .agents/skills/watchface-studio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "watchface-studio", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install JunAkerBuilds/CorosLink watchface-studio --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JunAkerBuilds/CorosLink.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/watchface-studio .cursor/skills/watchface-studio && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "watchface-studio" agent skill from https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studio into .cursor/skills/watchface-studio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "watchface-studio", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/JunAkerBuilds/CorosLink.git --path skills/watchface-studio--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install JunAkerBuilds/CorosLink watchface-studio --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JunAkerBuilds/CorosLink.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/watchface-studio .gemini/skills/watchface-studio && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "watchface-studio" agent skill from https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studio into .gemini/skills/watchface-studio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "watchface-studio", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install JunAkerBuilds/CorosLink watchface-studioInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/JunAkerBuilds/CorosLink.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/watchface-studio .github/skills/watchface-studio && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "watchface-studio" agent skill from https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studio into .github/skills/watchface-studio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "watchface-studio", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install JunAkerBuilds/CorosLink watchface-studio --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JunAkerBuilds/CorosLink.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/watchface-studio .opencode/skills/watchface-studio && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "watchface-studio" agent skill from https://github.com/JunAkerBuilds/CorosLink/tree/main/skills/watchface-studio into .opencode/skills/watchface-studio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "watchface-studio", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
watchface-studioDesign and edit COROS watch faces in CorosLink Watch Face Studio through its editor tools (applycommands, renderpreview, validate) and the generateimage tool.
Watchface Studio is an agent skill from JunAkerBuilds/CorosLink. Design and edit COROS watch faces in CorosLink Watch Face Studio through its editor tools (applycommands, renderpreview, validate) and the generateimage tool. Use for any request to create, restyle, lay out, or add artwork to a watch face, including generating backgrounds, textures, icons, or sprites. Standardizes the workflow so every generated asset is placed on the face, previews are checked at native resolution, and work stays undoable and on-request.
Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Image generation. The repository describes itself as: Desktop app for COROS watch. The licence is MIT.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a074beb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Watchface Studio loads about 5.5k tokens when it runs. Until then it costs about 120 tokens; SKILL.md has 2,939 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from JunAkerBuilds/CorosLink at commit a074beb, republished under its MIT licence (© JunAkerBuilds). 2,939 words, ~5,534 tokens.
.claude/skills/watchface-studio/SKILL.md (or your agent's skills folder).You are editing the COROS watch face that is open in CorosLink Watch Face Studio. Every command lands in the live editor as one undoable step. The human reviews and saves.
get_schema, get_document and active-mode preview. Inspect the face before changing it. Note
the target resolutions, capabilities.placement, layer ids, locks and AOD
support. Layers are in capabilities.layers; selection is in view.selectedIds.
Resolve ordinary layout choices using the existing design. Ask only when
missing information materially changes the requested result.
The starting schema is focused: fetch get_schema with section: "document"
for design property definitions, section: "nativeData" and ids for
specific native fields, or section: "full" for everything. Raw configs
and dormant mode designs are available via get_document with full: true.update_requirements
to preserve each explicit constraint, quoting the user's message. Keep
reference fidelity, generated assets, generated fonts, source resolution and
live metric mappings separate. Reconcile saved requirements with later user
corrections; never drop requirements because they are difficult. For
anything larger than a tweak, use update_plan: which
layers change, which assets are needed, where they go, and how to check them.
Update step statuses as work proceeds. Saved plans and edit evidence carry
across messages; reconcile them with the fresh document rather than restarting.brief for every generation. For backgrounds separate staticElements and
excluded liveElements using the latest user requirements. For each font
role generate and accept a font-sample of up to four glyphs before a
font-set; pass its sampleAssetId. A rejected atlas requires groups of up
to four glyphs or individual glyphs. A failed group requires individual
glyphs. Accepted study samples need not be installed.apply_commands call, with a short
human label. Use semantic commands (move_layer, place_layers,
align_layers, set_style, set_visibility, add_sprite, add_element) before raw
JSON-pointer set. Inspect the returned editEvidence and observed document.
Movement warnings mean the requested move has not been confirmed. Read the
geometry and change the approach; do not stack additional blind offsets.render_preview Current (and AOD when touched). Then look at it:
clipping at the round bezel, overlap, legibility, contrast, balance. After
changing a background, artwork or text color, run check_contrast and fix
every fail or uneven layer. Fix and re-render. Use select on the
layers you changed.validate after edits. Fix errors introduced by your work;
report unrelated pre-existing issues without expanding the request. If the
editor supplies automatic verification results, inspect them before finishing.review_requirements with successful, current-revision
tool call IDs. Compare the reference and final preview, check the live
configuration and installed assets. Technical validation is not fidelity.
Declare visualTargets for the requested typography/artwork regions and exact
live components. A live ring uses appearance: "ring" plus its real layer and
state-set path; a small icon inside the ring is a different target. Run
compare_design_reference at native and master size. Keep date/time and all
unrelated readings frozen across state samples. Inspect its actual crop board
in a later round before providing visualFindings for proportions, weight,
slant, spacing and placement. Report remaining differences; an approximation
stays implemented, not complete. These are AI visual assessments, not measured
similarity scores or on-watch verification.
Generated fonts require every requested typography component: raster fonts, native digit/unit/punctuation indices, full calendar labels, AM/PM and static labels. Use typographyScope with exact contract IDs for a narrower request; all is the default. Use ampmIndicator.rasterFont for live AM/PM. Static sprite replacements cite the original componentId; hiding text alone is not completion.
high-resolution claims require adequate source pixels, not upscaling.
After an edit, verify again. Mark genuine limitations blocked with a blockerKind and successful schema/document evidence. Failed atlases or crops are recovery work, not unavailable capabilities. Only a later user instruction can supersede a requirement.save
only when asked.Match typography to the reference by role: clock, metric values, calendar and
labels can differ. Describe stroke weight, slant, proportions, serif/sans form
and distinctive glyph shapes in every font-generation prompt. Avoid a generic
"digital font" brief. Generation inherits the persistent selected design reference by default; troubleshooting screenshots do not replace it. The user can choose attachment purpose or select an earlier design reference.
Explicit referenceAssetIds replace that default, so include the relevant font
crop/full reference. Pass an empty list only for intentionally independent art.
After receiving image pixels, call review_generated_assets before cropping or
installing new artwork. Reject a wrong typeface before producing all its glyph
crops. A complete alphabet or valid PNG does not establish a style match.
Do not replace requested image-generated fonts with SVG text using an unspecified
or unavailable font: it can silently fall back to system serif lettering.
Every crop needs a separate review_generated_assets decision after its pixels
arrive. For font crops supply glyph: {character, setId} to crop_image, using
one setId per font role/atlas. Glyph crops preserve transparent margins by default
so cells share a baseline. Inspect cropQuality and siblingCrops: blank glyphs,
clipped strokes and out-of-source cuts block acceptance; aspect distortion and
upscaling are flagged. Check character identity, complete strokes, baseline and
spacing with glyphChecks when accepting. Preserve intentional blank spaces by
labeling them with a literal space. Verify the installed result at both resolutions.
Inspect capabilities.assetContracts before creating component assets. A live
battery icon uses multiple ordered state sprites. The fixed battery and the
selectable control-battery slot have separate contracts and override paths.
For the standard COROS twelve-frame set, 00.png is charging; 01.png is
empty/0%, and 02.png–11.png are 10%–100% in 10% steps. Follow the contract
state meanings: normal percentage simulation uses indices 1, 6 and 11 at
0%, 50% and 100%; it does not select charging index 0. Preserve the order
of nonstandard templates without inventing firmware meanings.
Use the exact advertised stateIndices and install frames under
stateReplacementsPath; a standalone sprite or single replacement image is
static decoration. Generate a consistent state sheet and crop its frames, or
generate matching frames in parallel. Keep dimensions and alignment consistent.
Record a dynamic_assets requirement and inspect previews with
scenario.values.battery set to "0", "50" and "100". Do not guess a missing
template's state count. Fonts, weather icons and progress indicators also need
their own documented glyph, state or native-parameter contracts.
Read capabilities.assetContracts for every component before scheduling
image generation. It identifies complete digit/label sets, ordered state sets,
single images, rotating hands, and firmware-drawn components with zero sprites.
A field absent from the starting template is not automatically unsupported.
The nativeData schema catalogs fields Studio can create, including their
native configuration and digit/state assets. Use add_native_field with a
catalog id, master-pixel x/y, and optional style; it initializes the
missing design parent and defaults. Match the neighboring date's font, color,
and geometry. For a live year, use date_year, not static text. Verify it with
scenario.dateTime on both sides of New Year's Day. Unsupported fields outside
the catalog still require implementation; never invent firmware keys.
Year can be shown, hidden and positioned independently of the selectable metric. Unlike month/day, COROS stores year in their shared control container. Export keeps the required origin and converts editor coordinates automatically, even with the selectable metric hidden. Do not enable or move that metric or manually offset the year to compensate. Archive checks still require on-watch verification.
Use the listed indices, dimensions and edit paths. For a new native field,
fetch get_schema with section: "nativeData" and its ids; chart sources can
change the required roles and counts. Active template/configured counts take
precedence over catalog defaults. Preserve sparse indices (for example a colon
at key 3), separate unit/symbol sets and corresponding weather day/night
indices. Unknown state meanings are explicitly marked; inspect original assets
instead of inventing an order. A generated sheet is only source artwork until
all frames are cropped and installed in their component slots. Add completeness
and distinct-state preview checks to the requirements checklist.
For dynamic_assets, use the exact component verification.scenarios from its
contract: weather day/night sets need separate condition samples, and native
state sets use their real selector values. Install every required index and
render all samples in the matching display mode at the current revision. Enable
the layer and its state part first; hidden layers cannot verify. Unsupported
selectors, including unavailable unit switching, stay blocked. This verifies
editor selection, not untested on-watch firmware meanings or timing.
Use the generate_image tool for bitmap artwork that the editor's
native layers cannot draw: photographic or illustrated backgrounds, textures,
bezels, decorative frames, mascots, icons and sprites. By default use native
typography and shapes for digits and simple geometry. Explicit user requests
override that preference: "generate everything including fonts" requires
generated glyph artwork, labels and icons as well as a background. Install
complete digit/character sets as rasterFont atlases or sprites so readings
remain live. Clear fontFamily overrides that would select installed fonts.
Do not substitute different metrics or bake live readings into the background.
Independent generate_image calls in the same response run up to three at
once. Include a complete brief and shared reference/style constraints in each
call. Wait for results before cropping or placement. One coordinator performs
all editor mutations; image workers never edit the shared face.
To edit, restyle or redraw an existing image, pass its assetId in
referenceAssetIds. That covers the current background artwork (from
get_document), a pasted attachment or an earlier generation. Use
background: "transparent" for sprites and icons, and size: "1024x1024" for
square backgrounds. Use inspect_asset to view existing artwork or masks before
editing them. It returns their pixels without making a new asset.
Work out the pixel box an asset will occupy in the master frame before
making it, with get_geometry (exact boxes for every layer, the display
circle, and each progress arc and bar), then make the image exactly that size.
Never place a padded square and hope it lines up.
Geometric art → render_svg. Frames, rounded caps, masks with holes,
ticks, rings, segment gaps and simple icons come out pixel-exact from an SVG
with a viewBox, at exactly width×height. Prefer it to generate_image
whenever the shape can be described with paths, rects and circles.
Illustration → generate_image.
Transparent generations come back already trimmed to their visible pixels.
Pass width/height to generate_image to get the final size directly.
crop_image fixes an image that is right but padded, too big, or needs one
part cut out: crop (source pixels) → trim (default on) → width/height.
It returns a new assetId; place that one. Prefer it to regenerating.
A thin overlay (a bar frame, a cap, a tick) is a small wide image, for example 180×24, not a 1024×1024 canvas with a small drawing in it.
sample_color reads real pixels: from the rendered face (master pixels)
or from any stored image. Use it instead of guessing a hex from a render.recolor_image paints an image's visible pixels one exact color (alpha
kept), or only the pixels near a from color. Use it to make a mask match
the background exactly or to tint an icon; place the new assetId.assetId and pixel size. Place every
generated image in the design in the same turn. Use a background artwork,
an add_sprite layer, or a native/weather artwork slot.assetId and
where it was placed.{"op":"set","path":"/design/artwork","value":{"dataUrl":{"assetId":"…"},"width":W,"height":H}}
plus {"op":"set","path":"/design/artworkVisible","value":true}. Use the
asset's real width and height.{"op":"add_sprite","sprite":{"id":"gen-<name>","name":"<Readable name>","dataUrl":{"assetId":"…"},"sourceWidth":W,"sourceHeight":H,"width":w,"height":h,"x":cx,"y":cy,"scale":1,"rotation":0}}.
x/y is the sprite's center. x, y, width and height are in the
master frame from capabilities.placement (for example, the canvas center
is (masterWidth/2, masterHeight/2)). Keep the aspect ratio: w/h = W/H.get_schema.nativeData.render_preview to confirm it appears. A missing layer usually
means a wrong path or id.Shape prompts with this spec (only the lines that help):
Use case: <stylized-concept | photorealistic-natural | logo-brand | …>
Asset type: COROS watch face <background | sprite | icon | texture>
Primary request: <what the user asked for>
Input images: <Image 1: reference for palette/mood> (optional)
Composition/framing: <square, centered subject, important content inside the inner 80% circle>
Style/medium: <flat illustration | photo | 3D render | …>
Color palette: <from the current face or the user's reference>
Constraints: no text, no numbers, no clock hands, no watermark; <transparent background> for sprites/iconsassetId
and can be placed like generated ones.The watch paints the face in three passes, bottom to top:
backgroundColor, /design/artwork,
then every add_sprite sprite and add_element shape or text, in
artworkLayerOrder. reorder_layer only reorders within this pass.kcalProgress and
exerciseProgress (arc and rect) live, over the whole background.So a generated sprite or shape always sits under an arc or bar and can never cover, mask or segment it. Keep busy artwork out of the arc's path, or put a darker track or scrim behind it in the background for contrast.
The one image slot made for sitting over progress is arc_cut_icon: a single
image at a single position per face. When the face uses it that way (layer
arcCut, "Arc cut overlay", as on PARTICLES' segmented ring or COLOR
PALETTE's rounded bar), you can move it, tint it (set_style on arcCut)
and replace its image. To give a bar rounded ends or a frame:
get_geometry (its progress entries,
in master pixels), and the background color behind it with sample_color.render_svg at exactly that box plus its border: the
background color everywhere except a transparent hole the shape of the
track, e.g. a rounded-rect hole for rounded ends.{"op":"merge","path":"/design/configAssetOverrides","value":{"config:arc_cut_icon":{"enabled":true,"nativeSize":true,"scale":1,"replacement":{"dataUrl":{"assetId":"…"},"width":W,"height":H}}}}.
W×H is then its size in master pixels.arcCut layer so its top-left sits on the bar's top-left minus
the border (place_layers with anchor top-left), and render_preview.Make masks the face's background color with transparent holes where
progress shows. Without nativeSize the replacement is fitted into the
template's original arc-cut box, which may be the whole face.
Faces like NOMAD use the same slot as their date slash instead (listed under
separators), so it can't also be a mask there. A face without the slot has no
way to put art over an arc; say so rather than faking it with a sprite.
check_contrast (it measures every pixel behind the text). Add a scrim
shape or darken the artwork rather than shrinking the text.render_preview resolution and size set to that native width. For
416 px displays, keep small digits around 12×17 visible pixels with 1–2 px
strokes. Consider solidAlpha: true on small time, metric and date styles.#RRGGBB.sessionId and current revision as baseRevision. On
REVISION_CONFLICT, re-read the document and reconcile concurrent changes
before retrying with its fresh revision.INVALID_COMMANDS, fix only the commands the diagnostics point at. Don't
resend an identical failing call. After two failures, inspect the cause and
try a different supported approach; explain a concrete blocker if none works.preexisting.* are problems the face already had: they never block you,
and should be repaired only when relevant to the user's request.set_locked), make the change, lock it again in the same batch,
and mention it.UNSUPPORTED_MODE means the face has no AOD. Skip AOD work.get_document or
get_geometry. A successful command with unchanged bounds is not a successful
move. Inspect its lock, movement key, slot and draw order before trying again.Asset decisions and crop-quality metrics persist with chat. Never reuse rejected
pixels on continuation; make a corrected asset. Inspect restored pending assets
before reviewing them. Background acceptance includes
backgroundChecks.liveElementsExcluded after viewing the pixels. For dynamic
requirements clear the single static fallback, keep frame canvases aligned and
uniform, check current get_geometry, and supply backgroundCheck describing
how conflicting baked artwork was removed. Preserve explicitly requested static
rings. These checks record visual judgment, not automatic fidelity scoring.
© JunAkerBuilds, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/watchface-studio of JunAkerBuilds/CorosLink.
Open the folder on GitHubat commit a074beb
Watchface Studio next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Watchface Studio this skillJunAkerBuilds/CorosLink | 179 | — | ~5.5k | Automated safety check: Pass | MIT | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Structured Image Generationbytedance/deer-flow | 84k | 4 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Canghe Comicfreestylefly/canghe-skills | 461 | 8 repos | ~3.2k | Automated safety check: Pass | None | |
| Generate Imageynulihao/AgentSkillOS | 617 | 10 repos | ~1.7k | Automated safety check: Notes | None | |
| GPT Image Generation CLIwuyoscar/GPT-Image2-Skill | 5.7k | — | ~2.5k | Automated safety check: Notes | MIT |
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
bytedance/deer-flow
Turns an image request into a structured JSON prompt and runs a bundled Python script to generate the picture, optionally guided by reference images.
freestylefly/canghe-skills
Knowledge comic creator supporting multiple art styles and tones.
ynulihao/AgentSkillOS
Generate or edit images using AI models (FLUX, Gemini). An agent skill from ynulihao/AgentSkillOS.
wuyoscar/GPT-Image2-Skill
Generates and edits images with GPT Image 2 or 2.5 through a packaged CLI and a prompt gallery, after settling which model fits the request.
LiamGvchi/gc-minimal-zine-poster
Creates or analyzes quiet, paper-texture zine posters with big negative space, one color accent and experimental type, returning an image prompt and the generated poster.
Categories
Design and edit COROS watch faces in CorosLink Watch Face Studio through its editor tools (applycommands, renderpreview, validate) and the generateimage tool. Watchface Studio is an agent skill from JunAkerBuilds/CorosLink. Design and edit COROS watch faces in CorosLink Watch Face Studio through its editor tools (applycommands, renderpreview, validate) and the generateimage tool.
Watchface Studio fits situations like: any request to create; add artwork to a watch face; including generating backgrounds.
Run `npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a claude-code`. Or copy the skill folder (skills/watchface-studio in JunAkerBuilds/CorosLink) into .claude/skills/watchface-studio in your project. Claude Code loads it when a task matches its description.
Run `npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a codex`. Or copy the skill folder (skills/watchface-studio in JunAkerBuilds/CorosLink) into .agents/skills/watchface-studio in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add JunAkerBuilds/CorosLink --skill watchface-studio -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/watchface-studio, .gemini/skills/watchface-studio, .github/skills/watchface-studio and .opencode/skills/watchface-studio in your project.
SKILL.md names no scripts, command-line tools or credentials: Watchface Studio is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Watchface Studio is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.5k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Watchface Studio: AI Image Generation and Editing (zhayujie/CowAgent, 47k stars), Structured Image Generation (bytedance/deer-flow, 84k stars), Canghe Comic (freestylefly/canghe-skills, 461 stars) and Generate Image (ynulihao/AgentSkillOS, 617 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
JunAkerBuilds (a GitHub organization) maintains it in JunAkerBuilds/CorosLink, which has 179 GitHub stars. The repository was last updated on October 4, 2026.
Source: JunAkerBuilds/CorosLink on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.