thePR0M3TH3ANandClaude Sonnet 4.6 915ad80a64 Add color/text layers, lock, duplicate, font picker, JPEG-via-PDF export
Layer system:
- New 'color' layer type: solid fill, color picker in selected-layer controls,
  full-fill of target section by default, locked by default
- Text layer: replaced 'Name' field with a multi-line 'Text' textarea bound
  to layer.html (round-trips with the canvas's contentEditable edits)
- Text layer: web-safe font family picker (15 options, each previewing its
  own font) and font-family applied across all 5 render sites
- Layer locking: locked layers get pointer-events:none on the canvas and a
  LOCK badge in the layer list; selected-layer panel has a lock checkbox
- Duplicate-layer button: clones the selected layer with new id, slight
  position offset, fresh z, and "copy" appended to the name
- Move forward / Move back now step one position at a time (swap z with the
  immediate neighbor in the same target region) instead of jumping to the
  extremes

Cover preview:
- renderTemplatePreviewDOM now renders user layers (color/text/image) for
  cover-relevant targets, with correct coordinate translation from page
  (including bleed) into the trim-only preview viewport

Print PDF:
- print-color-adjust: exact added so color-layer backgrounds aren't stripped
- Cover-mode page is now landscape Letter (11x8.5) with the sheet centered
  via position: fixed, dropping the old 90-degree rotation hack
- Hide .modal in @media print so open modals don't bleed into the print

Title/category save bug:
- preferredDiscProjectTitle/imdb/category/language now fall back to
  state.meta values when both disc-slot metas are empty, instead of
  blanking state.meta.title each render in disc mode

Close project:
- closeTemplateProject and closeDiscDesignerProject now sync all input
  panels (slots, discs, jewel, combined, title fields) after resetting
  state, and also clear cover layers, jewel inserts, and both spine-label
  sets

Welcome modal: minor regression-fix wiring (kept from prior commit)

JPEG export via PDF:
- New "Export JPEG" modal with a two-step flow:
  1) Open the print dialog -> Save as PDF (page sized to artwork)
  2) Pick that PDF -> PDF.js rasterizes page 1 -> JPEG download
- Lazy-loads pdf.js from cdnjs on first use
- Print "export mode": temporarily moves .sheet to a body-level
  #exportPrintContainer with explicit inline styles, sets @page to the
  trim area (cover: panelW*2+spineW x trimH, no bleed margin), hides
  everything else; restored on afterprint
- Saved PDF filename is "<regular-save-name>-jpeg-source.pdf" so it's
  easy to tell apart from the print-ready PDF

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-05-17 14:03:53 -04:00
2026-05-13 17:25:59 -04:00

CaseWrap Studio

CaseWrap Studio is a static print-layout editor for physical media packaging. It supports DVD/Blu-ray case wraps, Avery 8960/8944 disc-label sheets, Avery 8693/8943 CD jewel-case insert sheets, and reusable single-disc designs.

What it supports

  • Separate front, spine, and back case artwork (or one combined wrap image)
  • Disc-label sheet mode (two print positions on one Avery 8960/8944 sheet)
  • CD jewel insert mode (front + tray inserts on one Avery 8693/8943 sheet)
  • Disc Designer mode for creating a reusable single-disc design
  • Additional image and text layers
  • Drag positioning, z-order changes, rotation, sizing, and opacity
  • PDF export through the browser print dialog
  • Nostr community browsing/sharing for templates and disc designs
  • Publishing, replies, reactions, follows, and reposts from inside the app

Important workflow

All image sources are remote URLs.

That means:

  • Case art, disc art, jewel insert art, and extra image layers should use http or https URLs
  • Saved project JSON remains portable across machines
  • Exported/copied Nostr events can reconstruct layouts from event content
  • Community feed data comes from relays listed in the Community panel
  • Publishing/social actions require a NIP-07 browser extension (for example Alby or nos2x)

If a URL stops working later, the image will no longer render. For long-term reliability, use stable hosted URLs.

Main file

  • src/index.html is the complete app entrypoint. Open it directly in a browser or serve it from any static host.

Export and print

  • Use Print / Save PDF for print-ready output
  • Keep browser scale at 100%
  • Disable browser headers and footers

Save, restore, and sharing

  • Save project writes project JSON
  • Load project restores project JSON
  • Copy Nostr event copies a signed event payload
  • Import from Nostr restores a template/design from a copied event
  • The Community modal lets you browse New/Popular/Search/Mine, preview templates, and import them
  • Disc designs can be published and reused independently, then imported into Disc 1 or Disc 2 positions on a disc sheet

Nostr data model

  • Template/design payloads are published as kind 30078 app-data events with casewrap tags
  • Typical social events use standard kinds (1, 7, 6, 3, 0)
  • Template modes include cover, disc, jewel, and disc-design
  • Current schema version is 5; minimum supported schema version is 4

Notes

  • The app is fully static and does not require a backend
  • Local browser autosave is still available
  • Older saved projects with embedded data URLs may still load, but new work should use remote URLs
S
Description
A static site DVD and Blu-Ray Case and disk label designer
Readme
5.7 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 99.7%
HTML 0.3%