Add accurate, publication-ready scale bars to microscopy images given pixel-to-unit calibration data.
49
53%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./scientific-skills/Other/microscopy-scale-bar-adder/SKILL.mdAdd accurate scale bars to microscopy images for publication-ready figures using Pillow for image processing.
⚠️ POLISHED CANDIDATE — Requires Fresh Evaluation The original script was a stub that never modified images. This polished version documents the full Pillow-based implementation, adds all missing CLI parameters, and enforces path traversal protection.
# Add a 50 µm scale bar to a TIFF image
python scripts/main.py --image image.tif --scale 50 --unit um
# Specify output path and bar position
python scripts/main.py --image image.tif --scale 10 --unit um --output annotated.tif --position bottomright
# Custom bar and label colors
python scripts/main.py --image image.tif --scale 100 --unit nm --bar-color white --label-color white --bar-thickness 4| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
--image | path | Yes | - | Input image file path |
--scale | float | Yes | - | Scale bar length in physical units |
--unit | str | No | um | Unit: um, nm, mm |
--pixels-per-unit | float | No | from TIFF metadata | Calibration override (pixels per unit) |
--output | path | No | <input>_scalebar.<ext> | Output file path |
--position | str | No | bottomright | Bar position: bottomright, bottomleft, topright, topleft |
--bar-color | str | No | white | Scale bar fill color |
--label-color | str | No | white | Label text color |
--bar-thickness | int | No | 3 | Bar height in pixels |
The script must implement using PIL.Image, PIL.ImageDraw, PIL.ImageFont:
../ or absolute paths outside the workspace before opening any file. Print Error: Path traversal detected: {path} to stderr and exit with code 1.PIL.Image.open(args.image). Raise FileNotFoundError if missing.--pixels-per-unit. Scale bar pixel length = scale * pixels_per_unit.PIL.ImageDraw.Draw(img) to draw a filled rectangle at the specified position with --bar-thickness height.PIL.ImageFont to render "{scale} {unit}" above or below the bar.img.save(output_path). Print the output path to stdout.--pixels-per-unit--bar-color, --label-color, --bar-thickness)bottomright, bottomleft, topright, topleft../ paths and absolute paths outside workspace)python -m py_compile scripts/main.py
python scripts/main.py --helpThis skill accepts: microscopy image files (TIFF, PNG, JPG, BMP) with a physical scale value and unit for scale bar annotation.
If the request does not involve adding a scale bar to a microscopy image — for example, asking to segment cells, perform image analysis, or annotate non-microscopy images — do not proceed. Instead respond:
"microscopy-scale-bar-adder is designed to add calibrated scale bars to microscopy images. Your request appears to be outside this scope. Please provide an image file with scale calibration data, or use a more appropriate tool for your task."
--image or --scale is missing, state exactly which fields are missing and request only those.../ or points outside the workspace, reject with: Error: Path traversal detected: {path} and exit with code 1.Error: File not found: {path} to stderr and exit with code 1.--position is not one of the four valid values, reject with a clear error listing valid options.--pixels-per-unit is not provided, request the calibration value before proceeding.scripts/main.py fails, report the failure point and summarize what can still be completed.When execution fails or inputs are incomplete, respond with this structure:
FALLBACK REPORT
───────────────────────────────────────
Objective : [restate the goal]
Blocked by : [exact missing input or error]
Partial result : [what can be completed without the missing input]
Next step : [minimum action needed to unblock]
───────────────────────────────────────Requires Pillow: pip install Pillow
f5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.