Zipic
okooo5km/Skills4U
Local image compression and Zipic-app expert for macOS and native Windows.
Make and edit pictures in Herald Canvas, the layered image editor in Herald OS - posters, banners, thumbnails, collages and photo fixes through the canvas tool, with editable text and shape layers…
$ npx skills add iamlukethedev/Herald-OS --skill herald-canvas -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-canvas --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/iamlukethedev/Herald-OS.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-canvas .claude/skills/herald-canvas && 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 "herald-canvas" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvas into .claude/skills/herald-canvas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-canvas", 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/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvasType 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 iamlukethedev/Herald-OS --skill herald-canvas -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-canvas --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-canvas .agents/skills/herald-canvas && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "herald-canvas" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvas into .agents/skills/herald-canvas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-canvas", 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 iamlukethedev/Herald-OS --skill herald-canvas -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-canvas --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-canvas .cursor/skills/herald-canvas && 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 "herald-canvas" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvas into .cursor/skills/herald-canvas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-canvas", 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/iamlukethedev/Herald-OS.git --path plugins/herald-os-bridge/skills/herald-canvas--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 iamlukethedev/Herald-OS --skill herald-canvas -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-canvas --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-canvas .gemini/skills/herald-canvas && 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 "herald-canvas" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvas into .gemini/skills/herald-canvas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-canvas", 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 iamlukethedev/Herald-OS herald-canvasInstalls 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 iamlukethedev/Herald-OS --skill herald-canvas -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-canvas .github/skills/herald-canvas && 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 "herald-canvas" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvas into .github/skills/herald-canvas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-canvas", 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 iamlukethedev/Herald-OS --skill herald-canvas -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install iamlukethedev/Herald-OS herald-canvas --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iamlukethedev/Herald-OS.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/herald-os-bridge/skills/herald-canvas .opencode/skills/herald-canvas && 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 "herald-canvas" agent skill from https://github.com/iamlukethedev/Herald-OS/tree/main/plugins/herald-os-bridge/skills/herald-canvas into .opencode/skills/herald-canvas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herald-canvas", 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.
herald-canvasMake and edit pictures in Herald Canvas, the layered image editor in Herald OS - posters, banners, thumbnails, collages and photo fixes through the canvas tool, with editable text and shape layers…
Herald Canvas is an agent skill from iamlukethedev/Herald-OS. Make and edit pictures in Herald Canvas, the layered image editor in Herald OS - posters, banners, thumbnails, collages and photo fixes through the canvas tool, with editable text and shape layers, layer effects (shadows, strokes, glows) copied between layers, masks, alignment and guides, auto tone and colour, filters (sharpen, denoise, blur), colour lookup tables, on-device background removal and content-aware fill, generated pictures placed where asked, Photoshop files opened and exported with their layers, how…
Its SKILL.md is about 7.2k 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 editing. It works with Linux. The repository describes itself as: An agent-native operating system, with Hermes Agent as the interface. Independent project, not affiliated with Nous Research. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7babe0c. 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 (its code samples are json).
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.
Herald Canvas loads about 7.2k tokens when it runs. Until then it costs about 157 tokens; SKILL.md has 3,791 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 iamlukethedev/Herald-OS at commit 7babe0c, republished under its MIT licence (© iamlukethedev). 3,791 words, ~7,181 tokens.
.claude/skills/herald-canvas/SKILL.md (or your agent's skills folder).Herald Canvas is the image editor built into Herald OS: layers, folders, masks, blend modes,
adjustment layers, editable text and shapes, drawn on the GPU. The person has the usual tools too
(selections, brush, fill, gradient, transform, crop). Use it whenever the person wants a picture
made or changed:
"make a poster for Saturday's gig", "warm this photo up", "put our logo on these", "make a
YouTube thumbnail". They watch each change appear in the Canvas window, and every change is one
step they can undo there (⌘Z, or canvas action=undo).
canvas action=new name="Gig poster" width=1080 height=1350 background="#101014"
makes a project in ~/Pictures/Herald Canvas/ and opens it; it answers with the path. To
work on something that exists, canvas action=open path="~/Pictures/photo.jpg": an image
becomes a new project there (the original file is never changed) and the answer gives its
path; a .comp project opens as it is. A Photoshop document (.psd, .psb) keeps its layers,
folders, masks, text and the adjustments Herald has, and the answer lists anything approximated
(tell the person what changed). HEIC, TIFF and camera RAW open where the system can convert
them; on Linux an error names the packages to install. A canvas is at most 30,000 pixels a side
and 100 million in all. Without project, actions work on the image in front.add_layer lands above the active layer:source="~/Downloads/band.jpg" or source="https://…"; it fits inside the canvas,
centred (fit=cover fills it, fit=none keeps its own size, or give x, y, width).color="#ff5a36" x=0 y=1100 width=1080 height=250.gradient="#00000000,#000000cc" angle=90 y=700 height=650 (a fade to dark at
the bottom, under text). Colours run first to last, each with an optional position
(gradient="#1b1340 0%, #6b2d5c 55%, #ffb347"; ones without share the space between), and
transparent colours fade while keeping the colour beside them. style lays it out: linear
(the default, along angle), radial (from the box's centre out to its corners, a vignette or
a spotlight), angle (a sweep around the centre), reflected (mirrored from the centre line) or
diamond.add_text content="NIGHT\nMARKET" x=72 y=420 font="Helvetica Neue Bold" size=180 color="#ffffff" makes a text layer the person can edit later (double-click it with the Type
tool). Point text: x is its left edge, or its centre with align=center, or its right edge
with align=right; y is its top. Give width for a paragraph that wraps inside a box from
x (at least 16 pixels). size is pixels, 1…2000; tracking adds pixels between letters
(−100…1000; a little negative tightens a big headline); leading is the line spacing from
baseline to baseline in pixels (0…5000; 0, the default, is automatic: 120% of the size, and
about the size itself sets a headline tight). Fonts are installed families with an optional style ("Avenir Next
Demi Bold", "Georgia Italic"); a missing font falls back to the system font, so check the
preview. set_text layer="Headline" content=… color=… changes it in place and keeps its size,
turn and position. Text from Compositor or Photoshop may carry per-letter colour and font runs:
they stay through edits where the edited range allows, and a new color or font for the
whole text replaces them.add_shape kind=rounded x=72 y=900 width=936 height=300 color="#ff5a36" (a
rectangle with radius, or kind=rectangle, kind=ellipse for circles and ovals, kind=line
from x, y by width across and height down, lineWidth thick). Panels behind text, rules,
badges and dots are shapes, not filled boxes: they stay crisp and editable.
set_shape layer="Date panel" kind=ellipse color="#ffb347" restyles one in place: kind
(rectangle, rounded, ellipse, line; a shape becoming a line runs corner to corner in its box),
color, radius (rectangles) or lineWidth (lines).set_layer layer="band" x=… y=… width=… (one side alone keeps the proportions),
rotation=-8, opacity=0.8, blend="Multiply", order=top, visible=false,
folder="Background". group layers="band,glow" name="Hero" makes a folder. Line layers up
exactly with align layers="Logo,Badge" edge=bottom (each other; one layer, or to=canvas,
lines up with the canvas, margin=72 keeping that far from its edges; to=selection with what
the person selected; two edges at once, edge="center,middle"), and space three or more evenly
with align layers="A,B,C" distribute=horizontal (equal gaps; vertical, or by an edge:
left, center, …). Layers line up by what they show, not by transparent margins.
Guides lay out the page and everything snaps to them in the window:
guides guide=add margins=64 columns=12 gutter=24 (margins as pixels or "6%" of the short
side, columns between them), guides guide=add axis=vertical position="50%", guides guide=add center=true, guides guide=remove axis=horizontal position=900, guides guide=clear
and guides guide=list. They never export.auto_adjust (kind=tone, the usual first step for a dull
photo, contrast, or color to take out a colour cast too): it adds an editable Levels layer
worked out from the picture. Then add_adjustment kind="Hue/Saturation" settings={"saturation": 20} and the like (every kind and field is under Adjustment settings below). An adjustment
changes everything below it; with clip=true only the layer right below. Change it later with
set_adjustment layer="Hue/Saturation" settings={"saturation": 35} (merged over what it has;
canvas action=layers shows each adjustment's settings).set_effects layer="Headline" effects={"shadow": {"distance": 8, "blur": 16, "opacity": 0.45}} adds a drop shadow; strokes, glows, inner shadows and colour overlays work the
same way (see Layer effects below), and set_effects layer="Subtitle" from="Headline" copies
one layer's effects onto another. mask layer="Photo" mask=hide and friends show or hide parts
of a layer without erasing anything. filter sharpens, denoises or blurs a layer's pixels (see
Filters below).resize width=1080 height=1920 anchor=top grows or cuts the canvas around an
anchor (layers keep their pixels, so nothing is lost); resize scale=0.5, or image=true with
a width, scales everything instead. crop x=0 y=135 width=1080 height=1080 keeps a box;
crop ratio=4:5 keeps the largest centred box of that shape (1:1, 3:2, 16:9, 9:16,
original, or with a box, holds it to the ratio); crop angle=-1.5 first turns the picture
that many degrees clockwise (negative is counterclockwise) to level a tilted horizon, then keeps
the largest box with no empty corners.canvas action=preview answers with a PNG file; view it,
then fix what is off. Do this after every few steps on anything that matters.canvas action=export to="~/Desktop/gig-poster.png" (or .jpg with
quality=0.9, .webp up to 16,383 pixels a side; scale=0.5 for half size). For a printer
or a designer, .psd (or format=psd) keeps the layers, folders, masks, clipping, blend modes,
text and the adjustments Photoshop has (Herald's own eight among them), at full size; Grain, the
blurs and Add Noise show only in its flattened image, and shapes become pixels; the answer lists
what was approximated. Replacing
a file needs overwrite=true, and the person is asked first. Projects save themselves after
every change.canvas action=layers lists everything with ids, kinds, placement and clipping: use it to find
names and to check what is where. Ids are stable; names are friendlier (the topmost layer with a
name wins). canvas action=history lists every step, the person's and yours, with the current one
marked; undo steps=3 (or redo) moves through several at once.
width
of about 60 characters and 1.2 to 1.4 line spacing.canvas action=new name="Night market" width=1080 height=1350 background="#0d0d12"
canvas action=guides guide=add margins=72
canvas action=add_layer source="~/Pictures/market.jpg" fit=cover name="Photo"
canvas action=auto_adjust kind=color clip=true
canvas action=add_adjustment kind="Color Balance" clip=true settings={"midCyanRed": 12, "midYellowBlue": -14, "highlightYellowBlue": -8}
canvas action=add_layer gradient="#0d0d1200,#0d0d12f0" angle=90 y=650 height=700 name="Fade"
canvas action=add_text content="NIGHT\nMARKET" x=72 y=700 font="Helvetica Neue Bold" size=168 leading=150 tracking=2 color="#fff4e6" name="Headline"
canvas action=set_effects layer="Headline" effects={"shadow": {"distance": 6, "blur": 18, "opacity": 0.5}}
canvas action=add_shape kind=line x=72 y=1100 width=240 lineWidth=8 color="#ffb347" name="Accent rule"
canvas action=add_shape kind=rounded x=72 y=1140 width=600 height=120 radius=24 color="#ffb347" name="Date panel"
canvas action=add_text content="Saturday 9 November · 6 pm till late" x=104 y=1172 width=540 font="Helvetica Neue Medium" size=40 color="#0d0d12" name="Date"
canvas action=align layers="Date panel,Date" edge=middle
canvas action=preview
canvas action=set_text layer="Headline" size=180
canvas action=export to="~/Desktop/night-market.png"Normal; Darken, Multiply, Color Burn, Linear Burn; Lighten, Screen, Color Dodge, Linear Dodge (Add); Overlay, Soft Light, Hard Light, Vivid Light, Linear Light, Pin Light, Hard Mix; Difference, Exclusion, Subtract, Divide; Hue, Saturation, Color, Luminosity. Multiply darkens (shadows, paper texture), Screen lightens (glows, light leaks), Overlay and Soft Light add contrast, Color tints while keeping the detail. Folders are pass-through: their own mode is always Normal, and their opacity and mask apply to everything inside.
Pass only what you change; the rest keeps its default. These are the exact ranges the format allows (Compositor refuses a whole project over one value outside them, so Herald Canvas refuses the change and says which field and range): when a command answers with a range error, fix that value and try again.
hue −360…360, saturation −100…100, lightness −100…100, colorize
true/false (with colorize, hue picks the tint).levels.channel RGB, Red, Green or Blue, and levels.ranges, four ranges (RGB,
red, green, blue), each black 0…254, gamma 0.1…9.99, white 1…255 (above black),
outputBlack 0…255, outputWhite 0…255. Give all four ranges when you set them.curves.channels, four point lists (RGB, red, green, blue) of 2…32
{"x": 0…255, "y": 0…255} in increasing x, the first at x 0 and the last at x 255. A gentle
S for contrast: [{"x":0,"y":0},{"x":64,"y":52},{"x":192,"y":204},{"x":255,"y":255}].exposureSettings.exposure −20…20 stops, offset −0.5…0.5, gamma 0.01…9.99
(worked in linear light).gradientMapSettings.shadows and highlights as {"red", "green", "blue"}
0…1 or any CSS colour ("#1b1340"), reversed.grainSettings.amount 0…100, size 0.5…20 pixels, roughness 0…100, seed.blackWhiteSettings.reds, yellows, greens, cyans, blues,
magentas −200…300 (how light each colour turns), tint, tintHue 0…360, tintSaturation
0…100.colorBalanceSettings with shadowCyanRed, shadowMagentaGreen,
shadowYellowBlue, the same three for mid… and highlight…, each −100…100 (positive is
towards red, green, blue), and preserveLuminosity.blurRadius 0.1…250 pixels.motionAngle −90…90 (counterclockwise from horizontal), motionDistance
1…2000 pixels.noiseAmount 0.1…400 (percent), noiseGaussian, noiseMonochromatic,
noiseSeed.Eight more are Herald Canvas's own; their settings are flat (no nested record of their own):
brightness −150…150 (lifts or lowers the midtones; black and white
stay), contrast −50…100.vibrance −100…100 (strengthens dull colours most and spares skin tones),
saturation −100…100 (as Hue/Saturation saturates).color any CSS colour or {"red", "green", "blue"} 0…1 (a warming orange to
start), density 0…100 (percent), preserveLuminosity (true keeps the brightness).red, green and blue, each output channel as
{"red", "green", "blue", "constant"} percentages of the inputs, with constant −200…200
(all four take −200…200); monochrome true makes one gray from the gray row (default 40, 40,
20).reds, yellows, greens, cyans, blues, magentas,
whites, neutrals, blacks, an object of cyan, magenta, yellow and black −100…100
(percent of ink to add or take away), and absolute (false, the default, changes each ink by that
share of what is there).levels 2…255 (bands a channel).level 1…255 (brighter is white, darker black).table, a .cube file (settings={"table": "~/LUTs/Portra.cube"}): a 3D
colour table from a grading tool, 2…65 entries a side. Its name and size show in layers.Compositor (the Mac app that shares the format) shows Brightness/Contrast exactly, Vibrance only
with vibrance 0, a Photo Filter only with preserveLuminosity false, and the rest as no change;
mention that when the person says they will open the project in Compositor.
An adjustment never adds opacity: over transparency it shows nothing, and a blur softens colour but keeps the edges of what is below it. A mask on an adjustment layer limits where it applies.
Quick recipes: warmer, Color Balance with midCyanRed +10 and midYellowBlue −15 (or a
Photo Filter at density 20); moodier, Curves with a lowered midpoint plus
Hue/Saturation saturation=-25; brighter, Exposure exposure=0.4, or Brightness/Contrast with
brightness 30 to lift the midtones; punchier colour without garish skin, Vibrance vibrance=35;
vintage, Gradient Map from deep blue to cream at opacity 0.35 with blend Soft Light, plus
Grain amount=20; a film look, Color Lookup with the person's .cube at opacity 0.6 to 1;
dramatic black and white, Channel Mixer with monochrome true and gray {"red": 60,
"green": 50, "blue": -10}; a screen-print poster, Posterize levels=5; dreamy,
Gaussian Blur blurRadius=12 at opacity 0.4 with blend Screen.
filter layer="Photo" kind=… settings={…} changes a layer's pixels for good, as one step the
person can undo (with inSelection=true, only inside what they selected in the window). Prefer an
adjustment layer when there is one for the job (the Gaussian Blur, Motion Blur and Add Noise
adjustments stay editable). Not for text or shape layers.
amount 1…500 (percent, 100), radius 0.1…250 pixels (1), threshold 0…255
(0; raise it to leave skin and sky alone). Gentle: 80, 1, 3; crisp detail: 150, 0.8, 2.amount 1…500 (150), radius 0.1…64 (1), reduceNoise 0…100 (10). Sharpens
brightness only and holds back halos: the better choice for portraits and noisy photos.strength 0…10 (6), preserveDetails 0…100 (60), colorNoise 0…100 (45).radius 0.1…250 (4). motion blur: angle −90…90, distance 1…2000.radius 0.1…250 (10): fine detail on gray; on a copy of the photo set to Overlay
or Soft Light, it sharpens.amount 0.1…400 (10), gaussian, monochromatic, seed. median: radius
1…25 (2): takes out specks and dust.set_effects layer=… effects={…} puts effects on a picture, text or shape layer (not on folders
or adjustment layers). Per effect, an object merged over what the layer has (or over the effect's
defaults when it has none), true to add it with its defaults, false to remove it, and
{"enabled": false} to hide it while keeping its settings. clear=true removes them all first.
Sizes and distances are layer pixels; color is any CSS colour (or red, green, blue 0…1);
opacity is 0…1. The effects follow the layer's own mask, and the layer's opacity and blend mode
apply to the layer and its effects together.
angle −360…360, where the light comes from (90 is
straight above, so the shadow falls straight down; 120 drops it down and to the right),
distance 0…5000, blur 0…500 (how soft), color, opacity. Defaults 90, 20, 20, black, 0.5.size 0…500, color, opacity; defaults 20, white, 0.75.size 0…500, color, opacity; defaults 10, white, 0.75.size 0…500, inside (false puts it outside the edge, with round corners),
color, opacity; defaults 4, black, 1, outside.color, opacity; defaults red, 1.Recipes:
effects={"shadow": {"angle": 120, "distance": 18, "blur": 40, "opacity": 0.35}}.effects={"outerGlow": {"size": 28, "color": "#ffd27a", "opacity": 0.8}}.effects={"stroke": {"size": 3, "color": "#111"}, "shadow": {"distance": 4, "blur": 10, "opacity": 0.6}}.effects={"stroke": {"size": 14, "color": "#fff"}, "shadow": {"distance": 6, "blur": 12, "opacity": 0.3}}.effects={"stroke": {"enabled": false}}.A mask shows (white) or hides (black) parts of a layer without erasing anything; folders and
adjustment layers take masks too. mask layer=… mask=<action>:
reveal or hide: a mask showing or hiding everything (replacing one the layer has).revealSelection or hideSelection: from what the person has selected in the Canvas window.invert, enable, disable (kept but not used), remove.apply: bake the mask into the pixels and drop it (not for folders or adjustments).unlink: the mask stays where it is when the layer moves; link ties it to the layer again.Typical use: a vignette is a Curves or Exposure layer that darkens, with a mask hiding its
centre; a two-tone grade is two adjustments, each masked to its half.
These run on the person's computer (nothing is uploaded) with models they download once, when they first use the tool in the Canvas window. A command never downloads a model: when one is missing, the answer says which, and you ask the person to allow it in Herald Canvas (Layer > Remove Background, or the Object Select tool), then try again.
canvas action=remove_background layer="Photo" hides everything but the
subject with a layer mask, so nothing is erased (mask layer="Photo" mask=invert keeps the
background instead). mode=cutout puts just the subject on a new layer above and hides the original.
threshold (0…1, 0.5) moves the edge in (higher) or out (lower), feather softens it in pixels,
and refine=false keeps the model's own edge. Good for product shots, portraits and stickers.canvas action=content_fill layer="Photo" x=… y=… width=… height=… fills that box from the pixels around it (a passer-by, a wire, a logo on a wall). Give a
box a little larger than the thing; newLayer=true keeps the fill on its own layer so it can be
masked or undone separately. Without a box it fills what the person selected in the open window.canvas action=place_image source=… x=… y=… width=… height=…
(fit=cover fills the box and cuts the overflow, contain fits inside, stretch), with
mask_image=… a grayscale picture over the same box (white shows). This is how generated
pictures land where the person asked.The person also has Select > Subject, Select > Select and Mask (refining an edge for hair and fur), Edit > Content-Aware Fill, the Spot Healing and Healing brushes (J), the Clone Stamp (S) and the Object Select tool (W, with the Magic Wand) in the window; point them there when a job needs a hand on the picture.
When the person asks the Canvas window for Generative Fill or a New Generated Layer, Herald sends
you a request naming the project, the box, the files it saved (a picture of the area and its mask)
and the file to save your picture to. Make the picture with your image generation tool (pick its
aspect ratio from the box; if it can edit an image, give it the area's picture), save it there,
place it with place_image exactly as the request says, check it with preview, and say what you
made. If you have no image generation tool, or it fails, say so in a sentence and place nothing.
Requests like "make it moodier", "warmer and brighter", "put the logo bottom right" or "make the sky dramatic" come from the window's Ask Hermes field with the project, its layers and a preview.
canvas action=preview and canvas action=layers. Decide what the request means
for this picture (moodier: darker midtones, less saturation, cooler shadows, a vignette).auto_adjust as a first pass on a dull or
tinted photo, Curves, Levels or Brightness/Contrast for tone, Hue/Saturation or Vibrance for
colour strength, Color Balance, a Photo Filter or a Gradient Map for colour casts, Exposure for
brightness, Color Lookup for a look the person has as a .cube file.
Clip an adjustment to one layer (clip=true) when only that layer should change, and mask an
adjustment (a vignette is a darkening Curves layer with its centre masked out) to limit it.place_image or add_layer for new pictures,
placed with an explicit box ("bottom right" is a box a margin of about 4% in from the corner).preview, adjust what is too strong (lower an adjustment layer's opacity
rather than redoing it), and finish by telling the person in a sentence or two what you changed
and why, so they can tweak it or undo it.For many layers at once it can be faster to write a project yourself; Herald Canvas reloads an
open project the moment its files change. A project is a folder Name.comp holding
manifest.json and images/:
{
"format": "com.compositor.project",
"version": 11,
"colorSpace": "sRGB",
"resolution": 72,
"documentID": "<UUID>",
"width": 1080,
"height": 1350,
"activeLayerID": "<UUID of a layer>",
"guides": [],
"layers": [
{
"id": "6F1D…",
"name": "Photo",
"isVisible": true,
"isGroup": false,
"opacity": 1,
"blendMode": "Normal",
"imageFile": "6F1D….png",
"transform": { "origin": [0, 0], "size": [1080, 1350], "rotation": 0, "flipX": false, "flipY": false, "sampling": "High quality" }
}
]
}Rules that matter (break one and the whole file is refused):
layers run bottom to top. A folder has "isGroup": true and no imageFile; its children
carry "parentID" and come right after it.images/<ID>.png (8-bit RGBA PNG) and
its mask images/<ID>.mask.png (8-bit grayscale, white shows), named after the layer exactly.name that is not blank.transform.origin is the top-left corner in canvas pixels (−1000000…1000000), size the drawn
size (1…300000 a side; the PNG is stretched to it), rotation degrees clockwise around the
centre, sampling "High quality", "Smooth" or "Nearest".manifest.json last, through a temporary file and a rename, so
the editor never reads half a project.maskSourceID clips a layer to another (never a folder, and never to a folder or an adjustment
layer); adjustment makes an adjustment layer (no
imageFile; its record needs kind, hue, saturation, lightness, colorize, plus full
levels and curves). effects holds the layer effects, one record per effect as listed under
Layer effects (a missing record means no such effect). An unlinked mask has "maskLinked": false
and its own maskPlacement transform. Keep fields you do not understand exactly as they were.text record
(content, fontName as a PostScript name, fontSize in pixels 1…2000, red/green/blue
0…1, alignment Left, Center or Right, tracking −100…1000, leading 0…5000 (baseline to
baseline; 0 is automatic), boxSize [width, height] for paragraph text, each 16…30000, and
optional colorRuns (location, length, red, green, blue) and fontRuns (location,
length, fontName), sorted, apart and inside the text, counted in UTF-16 units)
or a shape record (kind Rectangle, Ellipse or Line, red/green/blue,
cornerRadius, and for lines lineWidth with start and end as fractions of the box). The
PNG must match the record, so prefer add_text and add_shape, which draw it; painting on such
a layer turns it into plain pixels.guides is a list of {"id": "<UUID>", "axis": "vertical" or "horizontal", "position": <px>}.heraldAdjustment,
never in adjustment.kind: {"kind": "Vibrance", "vibrance": 30, "saturation": 0}, with the
fields listed under Adjustment settings. The layer still needs a complete adjustment record
(Compositor reads that one); Herald makes it again from heraldAdjustment when it opens the
project, so a Levels record with its defaults will do. A Color Lookup's table is the file
images/<ID>.cube, with "name" and "size" (its LUT_3D_SIZE) in the record. Prefer
add_adjustment, which writes all of it.The same files open in Compositor on a Mac.
© iamlukethedev, 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 plugins/herald-os-bridge/skills/herald-canvas of iamlukethedev/Herald-OS.
Open the folder on GitHubat commit 7babe0c
Herald Canvas 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 |
|---|---|---|---|---|---|---|
| Herald Canvas this skilliamlukethedev/Herald-OS | 408 | — | ~7.2k | Automated safety check: Pass | MIT | |
| Zipicokooo5km/Skills4U | 183 | — | ~2.2k | Automated safety check: Pass | MIT | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Generate Imageynulihao/AgentSkillOS | 618 | 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 | |
| HyperFrames Media Useheygen-com/hyperframes | 60k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 |
okooo5km/Skills4U
Local image compression and Zipic-app expert for macOS and native Windows.
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.
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.
heygen-com/hyperframes
Finds, generates and edits media for HyperFrames video projects: music, sound effects, images, icons, logos, voiceovers, captions and color grades.
edenfunf/reelmimic
Agent Media OS, the single skill for every media need in a HyperFrames project.
iamlukethedev/Herald-OS
Change Herald OS itself - make and switch themes, fonts and the wallpaper, widgets, the menu bar, control-menu entries, branding, keybindings, settings, routines and hooks
iamlukethedev/Herald-OS
Work in Herald Sheets, the spreadsheet in Herald OS - read workbooks, write values and formulas (a formula from a description, explaining one, filling it down), fill a column from examples, clean…
iamlukethedev/Herald-OS
Make and change presentations in Herald Slides, the presentation editor in Herald OS - a deck from a topic (an outline first, a title slide, one idea a slide, short bullets, speaker notes, a closing…
iamlukethedev/Herald-OS
Write and edit documents in Herald Docs, the word processor in Herald OS - letters, cover letters, CVs, reports, memos, meeting notes, proposals, essays and newsletters drafted from a brief or a…
iamlukethedev/Herald-OS
Explain why a program crashed from its crash report or core dump, and whether it is worth reporting
iamlukethedev/Herald-OS
Find documents such as invoices among badly named files, read them, name them clearly and file them where the person keeps them, with a plan they approve and an undo
Works with
Categories
Make and edit pictures in Herald Canvas, the layered image editor in Herald OS - posters, banners, thumbnails, collages and photo fixes through the canvas tool, with editable text and shape layers…. Herald Canvas is an agent skill from iamlukethedev/Herald-OS.
Herald Canvas fits situations like: tasks that involve Image editing.
Run `npx skills add iamlukethedev/Herald-OS --skill herald-canvas -a claude-code`. Or copy the skill folder (plugins/herald-os-bridge/skills/herald-canvas in iamlukethedev/Herald-OS) into .claude/skills/herald-canvas in your project. Claude Code loads it when a task matches its description.
Run `npx skills add iamlukethedev/Herald-OS --skill herald-canvas -a codex`. Or copy the skill folder (plugins/herald-os-bridge/skills/herald-canvas in iamlukethedev/Herald-OS) into .agents/skills/herald-canvas 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 iamlukethedev/Herald-OS --skill herald-canvas -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/herald-canvas, .gemini/skills/herald-canvas, .github/skills/herald-canvas and .opencode/skills/herald-canvas in your project.
SKILL.md names no scripts, command-line tools or credentials: Herald Canvas 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.
Herald Canvas is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.2k tokens (SKILL.md is roughly 29k 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 Herald Canvas: Zipic (okooo5km/Skills4U, 183 stars), AI Image Generation and Editing (zhayujie/CowAgent, 47k stars), Generate Image (ynulihao/AgentSkillOS, 618 stars) and GPT Image Generation CLI (wuyoscar/GPT-Image2-Skill, 5.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
iamlukethedev (a GitHub user) maintains it in iamlukethedev/Herald-OS, which has 408 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 10, 2026.
Source: iamlukethedev/Herald-OS on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.