No description
Find a file
2025-11-26 12:13:18 +00:00
.github Dependencies: switch to weekly with cooldown 2025-11-26 12:13:18 +00:00
cmd/jewelcase Add --quiet option for --recursive. 2025-09-08 21:18:06 +01:00
demo Initial version 2025-09-08 03:09:31 +01:00
.gitignore Initial version 2025-09-08 03:09:31 +01:00
CHANGELOG.md Add --quiet option for --recursive. 2025-09-08 21:18:06 +01:00
frame.jpg Initial version 2025-09-08 03:09:31 +01:00
go.mod Bump golang.org/x/image from 0.32.0 to 0.33.0 2025-11-12 07:25:14 +00:00
go.sum Bump golang.org/x/image from 0.32.0 to 0.33.0 2025-11-12 07:25:14 +00:00
jewelcase.go Initial version 2025-09-08 03:09:31 +01:00
LICENCE Initial version 2025-09-08 03:09:31 +01:00
README.md Add --quiet option for --recursive. 2025-09-08 21:18:06 +01:00

jewelcase

Banner

Tired of your album art having different aspect ratios? Want to make your music collection look more physical? Just nostalgic for the turn of the millennium? Meet jewelcase, a silly little program that transforms an image to look like it's printed and carefully slotted inside a CD jewel case.

Usage

Add an effect and save as a new file:

go run github.com/csmith/jewelcase/cmd/jewelcase@latest input.jpg output.jpg

Add an effect and save the file in-place

go run github.com/csmith/jewelcase/cmd/jewelcase@latest --inplace input.jpg

Find all images recursively in a directory and add an effect to them all

go run github.com/csmith/jewelcase/cmd/jewelcase@latest --recursive ./folder

By default jewelcase won't process any images that are the exact size of its output (884×777 pixels), so you can safely use --recursive across your entire library repeatedly without ending up with jewel cases inside jewel cases. You can override this behaviour by passing the --force parameter.

Use --quiet to suppress "skipped" messages when using --recursive:

go run github.com/csmith/jewelcase/cmd/jewelcase@latest --recursive --quiet ./folder

Effects

Example Description
Original Original album art without jewel case
Everything Jewel case with no effects applied
Colour Colour adjustment (--colour=false to disable)
Corners Rounded corners (--corners=false to disable)
Edges Edge softening (--edges=false to disable)
Offset Random offset (--offset=false to disable)
Rotation Random rotation (--rotation=false to disable)
Reflection Reflection effect (--reflection=false to disable)
Everything All effects enabled (default)

Provenance

This project was primarily created with Claude Code, but with a strong guiding hand. It's not "vibe coded", but an LLM was still the primary author of most lines of code. I believe it meets the same sort of standards I'd aim for with hand-crafted code, but some slop may slip through. I understand if you prefer not to use LLM-created software, and welcome human-authored alternatives (I just don't personally have the time/motivation to do so).