Plugin Help & Documentation

All available resources for our Photoshop plugins are collected here, including comprehensive documentation, user manuals, detailed changelogs, and direct links to tutorial videos on the Rob Art YouTube channel. These materials are designed to help you get the most out of each tool and support your creative workflow.
To begin, simply select the plugin you’re looking for from the dropdown menu.

FAQs

Manuals & Tutorials

Documentation will appear here when a menu item is selected from above, or return to the main plugin page here!

Text Collector

Here you can access everything related to Text Collector, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

This usually happens if your Photoshop version is below 23.3.0 or if the plugin folder has restricted permissions. Try reloading the plugin from the menu or restarting Photoshop.

You can save all slots using the Save Collection button, exporting to TCF or JSON, both of which preserve text and metadata. Automatic backups can also be enabled in Settings.

When pasting, a confirmation panel should appear with Append, Overwrite, and Cancel options. If this panel isn’t showing, check your Settings to ensure paste confirmations are enabled.

You may still be in full-screen edit mode, or the slot might simply be scrolled out of view. Exit edit mode with the Edit button or the Escape key, then scroll to verify the slot position.

Text Collector supports TCF and JSON files. These must be valid Text Collector files, and you’ll be prompted to confirm before replacing existing content.

Live Reference Panel

Here you can access everything related to Live Reference Panel, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

Make sure the file is JPG, PNG, or WebP, under 10MB, and not corrupted. If drag-and-drop or click-to-load fails, try loading from a different folder or checking file permissions.

The Smart Clipboard system automatically detects whether the clipboard contains an image, a colour value (HEX/RGB/HSL), or unsupported text. It then routes the content to the correct destination or shows a notification if nothing usable is found.

Yes — if “Auto-load workspace” is enabled, the previous workspace (images, colours, notes, and lock states) is automatically restored the next time you open the plugin.

Photoshop may be in a modal state (e.g., a dialog box is open). Close any active modals, ensure the colour slot is selected, and then use the “Set Selected Colour as Foreground” button.

Check that your internet connection is active, your email matches the Gumroad purchase exactly, and the license key is entered without extra spaces. If needed, you can test using the admin override credentials provided for support.

Video Tutorials for Live Reference Panel. All video appear in window apart from playlist.

Plugin not found.

Concept Colour Palette Creator

Here you can access everything related to Concept Colour Palette Creator, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

Make sure you have an open, active Photoshop document in RGB mode. Try using a smaller image (500–2000 px) and ensure the image contains enough color variation for the algorithms to analyse.

You can configure 2–10 palette slots and 3–7 color blocks per slot in the plugin’s Settings under the General tab. These can be adjusted anytime depending on your project needs.

This usually means the plugin cannot write to disk. Check your file permissions and available disk space, then try resetting settings to default. Restarting the plugin can force a refresh.

You can export palettes in ACO, ASE, JSON, CSS, or TXT. Your default export format is chosen in Settings, and each format has specific uses — including swatches for Photoshop and ready-to-use CSS variables.

You can export palettes in ACO, ASE, JSON, CSS, or TXT. Your default export format is chosen in Settings, and each format has specific uses — including swatches for Photoshop and ready-to-use CSS variables.

CropShare

Here you can access everything related to CropShare, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

A platform and dimension must be selected before activating preview. Make sure your document is open and active, then click the green preview button— it should turn red when the overlay is active.

Exports require a selected platform, dimension, and format (JPG/PNG). Also check disk permissions and that your target folder is writable. CropShare blocks exports if the crop size is invalid.

Ensure a watermark type is selected (Text or Logo). For text, make sure you’ve entered content. For logos, confirm that a file was chosen. Position, scale, and opacity must also be configured.

Click the manual refresh button or make sure the active document hasn’t been closed. You can also enable auto-refresh in the settings panel.

Yes — in Settings you can toggle visibility for each supported social platform. Hidden platforms won’t appear in the platform dropdown, allowing a cleaner, faster workflow.

Video Tutorials for CropShare. All video appear in window apart from playlist.

CropShare - Version History

Version 1.0.4 Minor

2026-01-31
  • #### Fixed
  • - **Preview Section Header Icons Missing**:
  • - Refresh and warning icons were not visible in preview section header
  • - **Cause**: Icons embedded directly in `<h3>` text content instead of structured as flex children
  • - **Solution**: Wrapped title text in `<span>` and moved `header-icons` div to be direct child of `<h3>`
  • - Maintains flexbox layout with `justify-content: space-between` for proper positioning
  • - File: `index.html` (lines 69-76)
  • - **Result**: Both icons now display correctly in top-right of preview header
  • #### Changed
  • - **Version Number**: Bumped to 1.0.4
  • - File: `js/version.js`

Version 1.0.3 Major

2026-01-10
  • #### Added
  • - **Centralized Version Management**:
  • - Created `js/version.js` - single source of truth for version number
  • - `VERSION` constant (currently `1.0.3`)
  • - `APP_VERSION` variable for formatted display (`v.1.0.3`)
  • - Automatic propagation to all UI elements
  • - **Update Check System**:
  • - Complete API integration with `https://robsnow.eu/wp-json/updates/v1/cropshare`
  • - Semantic version comparison (major.minor.patch)
  • - User-friendly modal feedback for updates
  • - "Check for Updates" menu item in hamburger menu
  • - Support for release notes and download links (Gumroad, Adobe, Lemon Squeezy)
  • - **Translation Keys for Updates** (8 new keys):
  • - `update.available` - New version notification
  • - `update.upToDate` - Up to date message
  • - `update.currentVersion` - Current version display with parameter
  • - `update.latestVersion` - Latest version display with parameter
  • - `update.releaseDate` - Release date display with parameter
  • - `update.whatsNew` - Release notes header
  • - `update.downloadFrom` - Download locations header
  • - `update.error` - Error message for failed updates
  • - **Update Check Handler**:
  • - Menu command: `check-updates`
  • - Event listener: `menu:checkUpdates`
  • - Network error handling with user-friendly messages
  • #### Changed
  • - **Version Display System**:
  • - Splash screen: Now uses dynamic `<span id="app-version"></span>`
  • - License panel: Now uses dynamic `<span id="license-app-version"></span>`
  • - About dialog: Uses `APP_VERSION` variable instead of hardcoded version
  • - User-Agent header: Uses `CropShare/${VERSION}` for API calls
  • - Translation key: `app.version` now uses parameter substitution: "Version {0}"
  • - **Script Loading Order**:
  • - Added `version.js` script before other JavaScript files in `index.html`
  • #### Fixed
  • - **Warning Panel Elements Error**:
  • - Changed `console.error()` to `console.warn()` for missing warning panel elements
  • - File: `js/main-simple.js:5497`
  • - Reason: Warning panel is optional feature, not critical error
  • - **i18n Language Undefined Error**:
  • - Added null check in `saveSettings()` before setting language
  • - Check: `if (newLanguage && newLanguage !== currentSettings.language)`
  • - File: `js/main-simple.js:4784`
  • - Prevents calling `i18n.setLanguage()` with undefined value
  • - **i18n Path Resolution Issues**:
  • - Removed `./` prefix from all locale paths (3 instances)
  • - Changed: `./locales/` → `locales/`
  • - File: `js/i18n.js` (lines 139, 148, 173)
  • - Reason: UXP fails to resolve paths with `./` prefix
  • - **i18n Initialization Order**:
  • - Moved language preference loading to top of `init()` function
  • - Ensures `currentLanguage` is set before any loading attempts
  • - File: `js/i18n.js:92-107`
  • #### Improved
  • - **i18n Debug Logging**:
  • - Added detailed logging in `loadManualMessages()`:
  • - Path being attempted
  • - Language and folder mapping
  • - Response status on failure
  • - Key count on success
  • - Better diagnostics for troubleshooting translation issues
  • - **i18n Safety**:
  • - Added fallback in `loadManualMessages()`: `const lang = this.currentLanguage || 'en-GB';`
  • - Prevents undefined language errors
  • **Files Modified:**
  • - `index.html` - Added version.js script
  • - `js/version.js` - Created (centralized version management)
  • - `js/main-simple.js` - Version variables, update check handler, bug fixes
  • - `js/i18n.js` - Path fixes, initialization order, safety improvements
  • - `manifest.json` - Added check-updates command entry
  • - `locales/en-GB/messages.json` - Added update keys, modified app.version
  • - `locales/en/messages.json` - Added update keys, modified app.version

Version 1.0.2 Major

2026-01-09
  • #### Added
  • - **Multi-Language Support**: Complete internationalization system with 9 languages
  • - English (UK) - default
  • - English (US)
  • - French
  • - German
  • - Spanish
  • - Italian
  • - Portuguese
  • - Greek
  • - Japanese
  • - **i18n Infrastructure**:
  • - Custom i18n engine (`js/i18n.js`, `js/translation-engine.js`)
  • - JSON-based translation files in `/locales/` directory
  • - 247+ translation keys covering entire UI
  • - Automatic DOM updates when language changes
  • - Parameter substitution for dynamic content
  • - Regional variants (UK vs US English)
  • - Graceful fallback to English if translation missing
  • - **Translation Coverage**:
  • - 127 `data-i18n` attributes for HTML text content
  • - 25 `data-i18n-title` attributes for tooltips
  • - 32 `i18n.t()` calls for JavaScript dynamic content
  • - All screens, panels, notifications, and dialogs fully translatable
  • - **Language Selection**:
  • - Settings panel language dropdown
  • - Instant UI update on language change
  • - Persistent language preference in localStorage
  • #### Changed
  • - **Manifest Updates**:
  • - Added `supportedLanguages` array
  • - Set `defaultLanguage: "en-GB"`
  • - Added resource mappings for locale files
  • - Added network permissions for robsnow.eu and rob-art.gumroad.com

Version 1.0.1 Major

2026-01-08
  • #### Fixed
  • - **Preview Toggle Bug**: Preview button now properly removes watermark and crop overlay when clicked again (not just activating)
  • - Added watermark removal call to deactivation logic
  • - File: `js/main-simple.js:1478-1490`
  • - **Watermark Scale Slider Range**: Changed from 10-200% to 10-100%
  • - Slider now correctly shows 100% at maximum position (full crop width)
  • - Default changed to 50% (middle position)
  • - Files: `index.html:221`, `js/main-simple.js:2810, 4604`
  • - **Watermark Preview Bounds**: Green preview box now scales within crop box (blue dotted area) instead of full canvas
  • - Fixed bounds detection to use crop overlay dimensions
  • - File: `js/main-simple.js:1102-1117`
  • - **Watermark Positioning**: All 9 positions (top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right) now work correctly
  • - Changed base watermark size from 100% to 40% width, 25% height
  • - File: `js/main-simple.js:1138-1139`
  • - **Default Preview Quality**: Changed from "High" to "Low" for better performance on plugin load
  • - Files: `index.html:403`, `js/main-simple.js:4606`
  • - **Missing Tooltips**: Added tooltips for Print and Cancel buttons
  • - File: `js/main-simple.js:5397-5398`
  • #### Changed - Localization (British English)
  • - **Color → Colour**: Updated all user-facing instances
  • - Files: `templates/export-summary.html:201`, `js/main-simple.js:3330`
  • - **License → Licence**: Updated all user-facing instances
  • - Settings section, licence key labels, status messages, activation modal
  • - File: `index.html:410, 419, 431-432, 505, 515, 516, 522`
  • - Note: Internal IDs/classes kept unchanged to preserve functionality
  • - **EULA Update**: Replaced generic EULA with comprehensive legal template
  • - Based on `/Users/rob/desktop/Photoshop/__doc/EULA.rtf`
  • - Changed "WordHue" references to "CropShare"
  • - Added all 10 legal sections with proper formatting
  • - File: `index.html:438-488`

CropShare Free

Here you can access everything related to CropShare Free, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

The free edition only supports JPG export and text-based watermarking. Logo uploads, PNG output, full watermark positioning, and PDF print summaries are exclusive to the paid version.

CropShare Free includes one preset dimension for each social platform (e.g., Instagram Square Post, Facebook Post, YouTube Thumbnail). Multiple dimension options are available only in the paid version.

PDF documentation is a paid-version feature. In the free version the button remains greyed out and displays a tooltip explaining its availability in the full edition.

Make sure you’ve selected both a platform and its assigned free dimension, then click the green preview button. The overlay will only activate when these requirements are met.

The free edition supports English (UK) only. The full multi-language interface (9 languages) is available in the paid version.

Video Tutorials for CropShare. All video appear in window apart from playlist.

Plugin not found.

Remind-a

Here you can access everything related to Remind-a, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

Remind-a embeds your reminder text directly into the Photoshop document’s XMP metadata. This means the reminder permanently travels with your PSD file — even if it’s renamed, duplicated, shared, or archived.

Simply tick the “Show on document open” option and save your document. The next time you open the file, Remind-a automatically creates a visual reminder card layer on your canvas.

Deleting the visual “Remind-a Note” layer does not delete the saved reminder in XMP metadata. The reminder will reappear when the document is reopened if the display option is still enabled.

Yes. Reminders are limited to 320 characters, over 4 80 character slots*,  to ensure they remain clear and readable on the visual reminder card.

*Due to Glyph width issues in Greek and Japanese the limits are reduced to 73 and 53 respectfully.

No. Remind-a is completely free to use and does not require activation, licencing, or subscriptions.

Remind-a - Version History

Version 1.0.8

2026-03-17
  • ### Fixed
  • - **JPG image degradation** — Notes no longer cause lossy re-encoding of JPG documents
  • - Root cause: `ensureDocumentNeedsSave()` painted an invisible pixel to dirty the document, which got baked into the JPG on every save. Additional `batchPlay save` calls (including up to 4 retry cycles) compounded the damage.
  • - Fix: `writeNote` now calls `performXMPFilePatching` directly on blur (same pattern as `clearNote`), bypassing the dirty pixel and save interception entirely. XMPFile API writes directly to the file\\\'s metadata block — no pixel data touched, no re-encode.
  • - Fallback: if the document has never been saved (no file path), pending metadata is stored and written on first CMD+S as before.
  • - **\\\"Save As\\\" dialog on JPG after card render** — Editing a note on a JPG that has a reminder card layer no longer triggers Photoshop\\\'s \\\"Save As\\\" dialog. The card layer is automatically removed before the XMP patch when the file is a JPG.
  • - **Spinner delay removed** — Eliminated the 500ms verification re-read after `performXMPFilePatching`. The `CLOSE_UPDATE_SAFELY` flag guarantees the write succeeded; the re-read was debug code only.
  • ### Technical
  • - `reminda-xmp-wrapper.js`: `writeNote` now calls `engine.performXMPFilePatching` directly instead of `engine.injectMetadata`
  • - `psd-metadata-engine.js`: Removed `ensureDocumentNeedsSave()` call from `injectMetadata`
  • - `psd-metadata-engine.js`: Removed batchPlay XMP sync + silent save after `putXMP()` in `performXMPFilePatching`
  • - `psd-metadata-engine.js`: Removed post-write verification block (500ms delay + file re-open)

Version 1.0.7

2026-03-16
  • #### Bugs Fixed
  • - **Tofu box on rendered card** — Root cause: `wordWrap()` was inserting `\\\\n` at ~60 chars; Photoshop rendered the newline as a tofu box. Fixed by removing JS word-wrap entirely and passing raw text to `batchPlay` — Photoshop handles wrapping within the text box bounds
  • - **`btoa` InvalidCharacterError** — Curly apostrophes and other non-Latin1 chars (e.g. `\\\'` U+2019) caused `secureEncode` to throw. Fixed with Unicode-safe base64: `btoa(unescape(encodeURIComponent(str)))` / `decodeURIComponent(escape(atob(str)))`
  • - **Dirty flag reappearing after save** — `batchPlay set XMPMetadataAsUTF8` (needed to sync PS internal buffer) was marking doc dirty again post-save. Fixed by performing a silent `batchPlay save` immediately after the sync to clear the dirty flag
  • - **`injectMetadata` failing when PS busy** — `ensureDocumentNeedsSave` threw when modal lock unavailable. Made non-fatal: dirty pixel failure is caught silently; `pendingMetadata` is already set and writes on next CMD+S
  • - **Data Management buttons broken** — Export, Import, Reset, Export Error Log all used browser APIs (`URL.createObjectURL`, `<input type=file>`) which don\\\'t work in UXP. Rewrote all four using `localFileSystem.getFileForSaving` / `getFileForOpening`
  • #### Features Improved
  • - **Bullet inputs → `<input type=\\\"text\\\">`** — Replaced `<textarea rows=\\\"2\\\">` with single-line `<input type=\\\"text\\\">` so text scrolls horizontally instead of wrapping/hiding whole words
  • - **Sanitise on render** — Added `sanitizeForPhotoshop()` function in `reminder-card-renderer.js`: normalises Unicode, maps smart quotes/dashes/ellipsis to ASCII equivalents, strips invisible chars, strips anything outside `\\\\x20-\\\\x7E`. Applied to all four bullet lines, instruction text, and copyright lines
  • - **Paste handler** — Strips invisible chars and newlines at point of paste into bullet inputs
  • - **Enter blocked** — `keydown` handler prevents Enter in bullet inputs (no newlines possible)
  • - **Arrow key navigation** — Up: moves to previous input (cursor at end) or jumps to start if on first; Down: moves to next input (cursor at start) or jumps to end if on last
  • - **Max chars per bullet: 70 → 80** — Updated `maxCharsPerBullet`, all `maxlength` attributes, counter display `0/240` → `0/320`
  • #### Key Architecture Notes
  • - `wordWrap()` method still exists in `reminder-card-renderer.js` but is no longer called — can be removed in future cleanup
  • - `sanitizeForPhotoshop()` is defined at module level in `reminder-card-renderer.js`, applied only at render time (XMP stores raw text)
  • - Silent save after batchPlay XMP sync: `synchronousExecution: false` to avoid blocking the modal
  • #### Files Modified
  • - `lib/core/reminder-card-renderer.js` — removed wordWrap from `createPositionedText`, added `sanitizeForPhotoshop()`, applied to all text layers
  • - `lib/core/psd-metadata-engine.js` — Unicode-safe base64 in `secureEncode`/`secureDecode`, non-fatal dirty pixel, silent save after batchPlay sync
  • - `lib/core/settings-modal.js` — all four Data Management handlers rewritten for UXP file system
  • - `lib/reminda-app.js` — `maxCharsPerBullet` 70→80, paste handler, Enter block, Up/Down arrow navigation, newline strip in `getBulletLines` and `setBulletLines`
  • - `index.html` — `<textarea>` → `<input type=\\\"text\\\">`, `maxlength` 70→80, counter 0/240→0/320
  • - `lib/styles/reminda.css` — `.bullet-row` align-items center, `.bullet-dot` padding-top removed, `.bullet-textarea` styles for single-line input
  • - `manifest.json` + `config/app.config.json` — version bump to 1.0.7

Version 1.0.6 Minor

2026-03-16
  • ### Fixed
  • - **Copy to clipboard** — updated to collect text from 4 bullet textareas (was targeting old single `#reminderNote` textarea); joins non-empty lines as `• bullet\\\\n• bullet` and writes via `ClipboardUtils.writeText()`
  • - **Print / Export** — all four export paths (left-click PDF + right-click PDF/RTF/TXT) now use a shared `getBulletNoteText()` helper that collects from `.bullet-textarea` elements instead of `#reminderNote`

Version 1.0.5 Minor

2026-03-16
  • ### Added
  • - **4-Bullet Input System** — replaced single textarea with 4 individual 2-row inputs (70 chars each, 280 total)
  • - Tab key navigates between fields
  • - Bullet dot (•) rendered inline left of each input
  • - Pipe-delimited storage format (`line1|line2|line3|line4`) in XMP
  • - Reminder card renders each non-empty bullet as a separate line
  • - **Dual Character Counter** — shows `field/70 | total/280` when a field is active
  • - Field counter turns orange at 85%, red at 100%
  • - Total counter turns orange at 90%, red at 100%
  • - Shows total only when no field is active
  • - **XMP Clear Now Works Reliably** — The Cat Came Back problem solved
  • - Root cause: Photoshop flushes its internal XMP cache to disk on document close, overwriting `XMPFile.putXMP()` writes
  • - Fix: `batchPlay set XMPMetadataAsUTF8` syncs cleared data into Photoshop\\\'s internal save buffer so it flushes the correct data on close
  • - Gemini identified the solution; ChatGPT correctly identified the problem architecture
  • - **File Path Captured Before Save Delay** — prevents \\\"No active document\\\" error on close-save
  • - `pendingMetadata` now stores `filePath` at write time
  • - `onSaveDetected` captures path before 3-second delay
  • - `performXMPFilePatching` accepts `overrideFilePath` parameter so it works even after doc closes
  • - **Settings → XMP/Data: Clear All XMP Data fixed**
  • - Was calling broken `require(\\\'./reminda-xmp-wrapper.js\\\')` — now uses `window.RemindaXMP`
  • - Inline feedback text: \\\"✓ Cleared\\\" (green) or \\\"✗ Failed\\\" (red), auto-clears after 3s
  • - Also calls `RemindaApp.clearUI()` to reset main panel after nuke
  • ### Fixed
  • - **Blur/Clear race condition** — `mousedown` on Clear button sets `isClearing=true` before blur fires, preventing blur from saving old content back
  • - **batchPlay modal dialog on close** — `set XMPMetadataAsUTF8` now guarded by `psApp.activeDocument` check; skips gracefully if doc already closed
  • - **Save event firing twice** — duplicate `onSaveDetected` calls handled cleanly
  • ### Changed
  • - `extractMetadata` reads directly from disk via `XMPFile` (not Photoshop\\\'s in-memory batchPlay cache)
  • - Silent save when tabbing between bullet fields (no notification); full save with notification when leaving all fields
  • - `dispatchEvent(new Event(\\\'input\\\'))` after programmatic `value = \\\'\\\'` to prevent UXP treating field as pristine
  • ### Technical
  • - `performXMPFilePatching(encodedData, overrideFilePath)` — added optional path parameter
  • - `window.pendingMetadata` now includes `filePath` field
  • - `batchPlay set XMPMetadataAsUTF8` added after `putXMP()` to sync PS internal buffer
  • - `batchPlay` sync skipped when no active document (prevents Photoshop error modals)
  • - Inline `#xmpNukeFeedback` span added next to nuke button in settings modal HTML

Version 1.0.4 Major

2026-02-28
  • ### Added
  • - **Complete Multi-Language Support**
  • - 9 languages: English (UK/US), Deutsch, Ελληνικά, Español, Français, Italiano, 日本語, Português
  • - All UI elements fully translated: settings modal, main panel, header, tooltips
  • - Language-specific SVG logos that swap automatically based on selected language
  • - Professional translations for all dropdown menus, labels, buttons, and placeholders
  • - Reminder card footer text now uses localized translations
  • - **Dynamic Dropdown Translation System**
  • - Dropdowns rebuild options dynamically when language changes
  • - All 6 settings dropdowns translate correctly (language, theme, background type, opacity, position, encoding)
  • - Fixes UXP rendering issues with static HTML option elements
  • - Options generated at runtime using `i18n.t()` for immediate translation
  • ### Fixed
  • - **Language Persistence Bug**: Fixed critical localStorage key mismatch
  • - i18n.js was using `plugin_language` while settings modal used `universalEngine_language`
  • - Language selection now persists correctly across plugin reloads
  • - Translations no longer revert to English after save
  • - **Header Subtitle Translation**: Fixed subtitle not updating on language change
  • - Removed static initialization at module load time
  • - Subtitle now translates dynamically with all other elements
  • - Added `configureHeader()` callback to settings modal
  • - **Dropdown Translation Rendering**: Fixed dropdowns not visually updating in UXP
  • - UXP renders dropdown options at creation time, not dynamically
  • - Switched from post-creation translation to pre-creation generation
  • - Adopted sylentID\\\'s approach: rebuild options with translations already applied
  • ### Changed
  • - Enhanced `i18n.js` to handle OPTION elements by setting `label`, `text`, and `textContent`
  • - Settings modal now rebuilds dropdowns on open and after language changes
  • - Reminder card renderer uses `window.i18n.t()` for footer text with placeholder support
  • - Main panel document name display uses localized translations
  • ### Technical
  • - Created `rebuildDropdownOptions()` function in settings-modal.js
  • - Added configureHeader dependency to settings modal initialization
  • - Updated `updateDocumentName()` to use i18n for \\\"Note for:\\\" and \\\"No document open\\\" messages
  • - Enhanced `applyTranslations()` to properly handle INPUT, TEXTAREA, and OPTION elements
  • - Added translation placeholder support for dynamic values (e.g., `{year}`, `{count}`)

Version 1.0.3 Major

2026-02-28
  • ### Added
  • - **True Responsive Card Sizing**
  • - Card now scales properly on all document sizes (800px to 5000px)
  • - Removed hard pixel minimums that prevented small document scaling
  • - All elements (card, padding, fonts, spacing) scale proportionally together
  • - Base scale factor: `docWidth / 2000`, clamped between 0.4x and 2x
  • - **Status Indicator System**
  • - Visual status dot next to \\\"Reminder Note\\\" label
  • - Grey = No XMP data saved yet
  • - Bright green = Synced (saved to document)
  • - Dark green = Modified (unsaved changes)
  • - Updates in real-time as you type
  • - **Document Name Display**
  • - Shows \\\"Note for: filename.psd\\\" below label
  • - Updates automatically when switching between documents
  • - Shows \\\"No document open\\\" when appropriate
  • - **Copy to Clipboard**
  • - New copy button in control panel
  • - Copies entire note text to clipboard
  • - Shows success/error notifications
  • - **Copyright Footer on Cards**
  • - Professional two-line copyright footer
  • - Includes link to plugin page: https://robsnow.eu/plugins
  • - Font size and positioning scale with document
  • ### Fixed
  • - **Multi-Document XMP Bug**: Fixed cross-contamination where wrong note would appear in different documents
  • - Now tracks document ID with pending metadata
  • - Only writes XMP to correct document on save
  • - **Text Box Overflow**: Text boxes now properly respect width boundaries on all document sizes
  • - Switched to paragraph text with `char: \\\"box\\\"`
  • - Text wraps correctly within calculated width
  • - **Dirty Pixel Placement**: Dirty pixel now placed on Background layer instead of active layer
  • - Prevents expanding bounding box of reminder card
  • - Falls back to current layer if no background exists
  • - **Session Token Cleanup**: Removed non-existent `fs.releaseSessionToken()` call that caused console errors
  • - **Layer Selection**: Card layer now deselected after creation (using `selectNoLayers`)
  • ### Changed
  • - Logo size reduced from 70% to 50% of card width for better proportions
  • - Card height increased from 400px to 450px (scaled) to accommodate copyright footer
  • - Text spacing below logo increased from 130 to 180 (scaled) for better layout
  • - Copyright text color lightened to #C8C8C8 for subtlety
  • - Layer existence check changed from batchPlay to DOM API for reliability
  • ### Technical
  • - Implemented ChatGPT/Gemini recommended responsive algorithm
  • - Added `lastSavedText` and `lastSavedEnabled` state tracking
  • - Created `updateSyncStatus()` and `updateDocumentName()` methods
  • - Modified `psd-metadata-engine.js` to track document IDs in `window.pendingMetadata`
  • - Updated all brand CSS files (generic, neutral, lively) for copy button positioning

Version 1.0.2 Major

2026-02-27
  • ### Added
  • - **XMP Metadata Storage System**
  • - Notes now stored in document XMP metadata with custom namespace `http://robart.com/reminda/xmp/1.0/`
  • - Secure base64 encoding for note data
  • - Dirty pixel approach to force document save after enabling reminder
  • - Save interception writes XMP post-save via XMPFile API
  • - Stores noteText, isEnabled, lastModified, and characterCount
  • - **Branded Reminder Card Renderer**
  • - Beautiful gradient background (brand blue #5184b3 → 15% darker)
  • - Centered SVG logo header (`icons/note_header.svg`)
  • - White main text (22pt Arial)
  • - Off-white footer text: \\\"You can delete this layer when finished\\\" (13pt)
  • - Drop shadow effect (40% opacity, 24px blur)
  • - Card automatically flattened to single layer at 85% opacity
  • - Positioned at 15% from top, 60% of document width, centered horizontally
  • - **Document Watcher System**
  • - Automatic detection when documents are opened (1s polling interval)
  • - Reads XMP metadata from opened documents
  • - Creates visual reminder card if reminder is enabled
  • - Updates UI with note content
  • ### Technical
  • - Created `lib/core/reminda-xmp-wrapper.js` - XMP interface module
  • - Created `lib/core/reminder-card-renderer.js` - Visual card builder using batchPlay
  • - Created `lib/core/document-watcher.js` - Document change detection
  • - Added PSDMetadataEngine script tag to `index.html`
  • - Made `appConfig` globally available from `entrypoints.js`
  • - Updated `config/xmp.config.json` with reminda namespace
  • ### Fixed
  • - **Text Positioning Issue**: Solved \\\"text way off screen\\\" problem using ChatGPT\\\'s Create → Get Bounds → Move pattern
  • - **Logger Missing**: Added fallback stub logger for PSDMetadataEngine when `window.comprehensiveLogger` is undefined
  • - **Gradient Rendering**: Uses layer effects (`gradientFill`) instead of fill command for reliability
  • - **SVG Placement**: Uses `createSessionToken()` for proper UXP file access instead of `nativePath`
  • ### Changed
  • - Reminders now persist in document metadata instead of localStorage
  • - Reminder display changed from notification to visual layer card
  • - Card components flattened into single layer for easy deletion
  • - Logo scaled to 70% of card width and centered

Version 1.0.1 Minor

2026-02-27
  • ### Fixed
  • - Fixed button styling issue where UXP\\\'s shadow DOM was overriding CSS font-size
  • - Replaced `<button>` with `<div role=\\\"button\\\">` to bypass UXP\\\'s unoverridable button styles
  • - Added explicit button font rules to all brand CSS files (generic, neutral, lively)
  • ### Changed
  • - Clear Note button now uses semantic div instead of native button element

Version 1.0.0 Major

2026-02-27
  • ### Added
  • - Initial release of Remind-a plugin
  • - Reminder note system with textarea (max 500 characters)
  • - Real-time character counter
  • - \\\"Show on document open\\\" toggle to enable/disable auto-display
  • - \\\"Clear Note\\\" button to reset reminder text
  • - Persistent storage using UXP localStorage
  • - Auto-display notification when Photoshop documents are opened
  • - Integration with existing notification engine
  • - Clean, compact UI matching Cohesion plugin style
  • ### Technical
  • - Created `RemindaApp` class in `lib/reminda-app.js`
  • - Added document open event listener in `script.js`
  • - Implemented localStorage management for `remindaNote` and `remindaEnabled` keys
  • - Added reminder-specific styles in `lib/styles/reminda.css`

Noteli

Here you can access everything related to Noteli, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

Noteli writes notes into your document’s XMP metadata. If the sync light stays red, the document might be unsaved, read-only, stored on a restricted network drive, or XMP writing may be blocked by the system. Saving the file locally or testing with File Info can confirm whether XMP is working.

Each file gets a unique document key in XMP. If notes aren’t appearing correctly, the document may have been renamed, duplicated, or switched too quickly. Closing all files and reopening them one at a time helps Noteli re-associate each document with the correct key.

Activation requires the correct email + license key, an active internet connection, and unblocked access to Gumroad servers. Typos, VPNs, or firewalls commonly cause activation failures. An admin test key is also included for troubleshooting.

Your editor limit (2,500 / 5,000 / 7,500 characters) has warning thresholds. As you approach the limit, the counter colour changes to prevent overflow and preserve formatting. You can adjust these limits in Settings under Text Editor.

Noteli preserves formatting in both RTF and PDF, but PDF layout depends on your selected paper size, margins, and font rendering options. Switching between A4/Letter or adjusting margins produces different visual results.

Video Tutorials for Noteli. All video appear in window apart from playlist.

Noteli - Version History

Version 1.2.13 Bugfix

2026-03-18
  • ## [1.2.13] - 2026-03-18
  • ### Fixed
  • - **XMP note restore**: Replaced `noteli-xmp-wrapper.js` with Remind-A's proven pattern — same structure, correct `setupSaveInterception()` call, identical encoding flow
  • - **psd-metadata-engine.js**: Replaced with Remind-A's disk-read version — reads XMP via `XMPFile` from disk instead of stale batchPlay in-memory cache
  • - **Empty write on close**: `handleAutoSave` now guards against `!app.activeDocument` and `!content` — prevents blur-on-close overwriting good XMP with empty string
  • - **Load/save race condition**: `_loadInProgress` flag blocks `writeNote` during `loadCurrentDocument` to prevent empty auto-save firing mid-load
  • ### Files Modified
  • - `lib/core/noteli-xmp-wrapper.js` (all versions) — full rewrite based on Remind-A pattern
  • - `lib/core/psd-metadata-engine.js` (all versions) — replaced with Remind-A disk-read version
  • - `script.js` (all versions) — `handleAutoSave` guards, `_loadInProgress` flag, `loadCurrentDocument` finally block

Version 1.2.12 Bugfix

2026-03-18
  • ### Fixed
  • - **Double save dialog**: Auto-save now uses `cancellableDebounce(1500ms)` — saves only after typing pause, not on every keystroke
  • - **Concurrent save guard**: `_saveInProgress` flag in `writeNote` prevents two XMP writes running simultaneously
  • - **Blur + debounce collision**: `blur` event now calls `debouncedAutoSave.flush()` instead of `writeNote` directly, eliminating duplicate saves
  • - **Redundant internal timer**: Removed double-debounce (`setTimeout` inside `handleAutoSave`) that was stacking with outer debounce
  • - **Adobe save dialog text**: Changed `executeAsModal` `commandName` from "XMPFile Post-Save Patching" to "Noteli — Saving..."
  • - **Script sync**: Original and Adobe `script.js` now identical (null-check guard on `result.id === 'reload'`)
  • ### Files Modified
  • - `script.js` (all versions) — debounce timing, save guard, blur handler, handleAutoSave cleanup
  • - `lib/core/psd-metadata-engine.js` (all versions) — commandName update

Version 1.2.11 Bugfix

2026-03-18
  • ### Changed
  • - **XMP Write Pattern — No Dirty Pixel**
  • - Replaced `injectMetadata` + save interception with direct `performXMPFilePatching` call in `lib/core/noteli-xmp-wrapper.js`
  • - XMP now written directly to disk on blur — no invisible pixel, no JPG re-encode
  • - Removed `setupSaveInterception()` call from wrapper initialisation
  • - Added `comprehensiveLogger` null-safe fallback in `psd-metadata-engine.js`
  • - Removed `ensureDocumentNeedsSave()` call from `injectMetadata`
  • - Removed verification block (500ms delay + re-read) from `performXMPFilePatching`
  • - Added `writeNote(content)` to textarea blur handler in `script.js` for immediate save on focus loss
  • - Added `lib/core/document-watcher.js`
  • ### Fixed
  • - Manifest version corrected from `1.2.8` to `1.2.11` to match `version.js`
  • ### Files Modified
  • - `lib/core/psd-metadata-engine.js` — logger fallback, removed dirty pixel call, removed verification block
  • - `lib/core/noteli-xmp-wrapper.js` — direct `performXMPFilePatching` pattern
  • - `lib/core/document-watcher.js` — added (polling watcher)
  • - `script.js` — blur-save on textarea
  • - `manifest.json` — version bumped to 1.2.11
  • - `lib/core/version.js` — version bumped to 1.2.11

Version 1.2.10 Minor

2026-01-30
  • ### Fixed
  • - **Text Formatting Cursor Position Bug** - Critical fix for formatting controls inserting at wrong location
  • - **Issue**: Bold, italic, link, bullet, and section formatting buttons ignored cursor position
  • - **Root Cause**: All formatting operations used `textarea.value +=` which always appends to end of textarea
  • - **Solution**: Implemented cursor-aware insertion using `selectionStart`/`selectionEnd`
  • - **Impact**: Formatting tags now insert exactly at cursor position instead of randomly at end of text
  • - Affected operations:
  • - Bold button (`[b]`, `[/b]`) - now inserts at cursor
  • - Italic button (`[i]`, `[/i]`) - now inserts at cursor
  • - Link button (`[link=URL]`, `[/link]`) - now inserts at cursor
  • - Bullet button (`\n• `) - now inserts at cursor
  • - Section header button - now inserts at cursor
  • - Auto-close on drawer close - now inserts closing tags at cursor
  • - `closeAllFormats()` API - now inserts closing tags at cursor
  • - File: `lib/ui/noteli-format-drawer.js`
  • ### Technical
  • - Replaced all `textarea.value +=` operations with cursor-position-aware insertion
  • - Implementation pattern:
  • ```javascript
  • const cursorPos = textarea.selectionStart || textarea.value.length;
  • const textBefore = textarea.value.substring(0, cursorPos);
  • const textAfter = textarea.value.substring(textarea.selectionEnd || cursorPos);
  • textarea.value = textBefore + insertText + textAfter;
  • ```
  • - Added `setTimeout()` wrapper for cursor restoration to work around UXP textarea selection bug
  • - Updated 7 formatting functions and 2 auto-close operations

Version 1.2.9 Minor

2026-01-22
  • ### Fixed
  • - **Missing Logger File** - Resolved critical plugin loading error
  • - **Issue**: Plugin failed to start with error "Failed to load script file: lib/core/comprehensive-logger.js"
  • - **Root Cause**: File referenced in `index.html` line 427 but missing from `lib/core/` directory
  • - **Solution**: Copied `comprehensive-logger.js` from sylentID project (13,139 bytes)
  • - **Impact**: Plugin now loads correctly without errors
  • - File location: `lib/core/comprehensive-logger.js`
  • ### Changed
  • - Updated version number from 1.2.8 to 1.2.9 in `lib/core/version.js`

Version 1.2.8 Minor

2026-01-17
  • ### Fixed
  • - **RTF Export Engine** - Complete markup and formatting system overhaul
  • - **Markup Tag Conversion** - `[b]`, `[i]`, `[u]` tags now properly convert to RTF formatting codes (`\b`, `\i`, `\ul`)
  • - **Bullet Point Formatting** - Bullet character (•) now renders as proper RTF bulleted lists with hanging indent
  • - Fixed double-escaping regex issue in `convertBullets()` - now correctly matches `\\u8226?` after escapeRTF processing
  • - Bullets formatted with `\pntext` and `\pn` groups for professional list rendering
  • - **Link Conversion** - `[link=URL]text[/link]` markup now converts to clickable RTF hyperlinks
  • - Uses RTF field syntax: `{\field{\*\fldinst{HYPERLINK "url"}}{\fldrslt{\ul\cf1 text}}}`
  • - Automatically prepends `http://` to URLs without protocol
  • - **Copyright Symbol** - Fixed double-encoding issue causing `©` character
  • - Changed from literal `©` to RTF hex code `\'a9` in footer sections
  • - **Header/Footer Visibility** - Added `\viewkind1` and `\pgncont\titlepg` flags for proper rendering
  • - Location: `lib/export/rtf-engine.js`
  • ### Technical
  • - Fixed escapeRTF function to convert `•` to `\u8226?` and `©` to `\'a9`
  • - Updated convertBullets regex to handle double-escaped backslashes: `/^\\\\u8226[?] /g`
  • - Enhanced transformMarkup to process links before formatting tags
  • - Processing order: escapeRTF → transformMarkup (links, bold, italic, underline) → convertBullets

Version 1.2.7 Minor

2026-01-16
  • ### Fixed
  • - **RTF Export Engine** - Complete overhaul of RTF generation for proper document structure
  • - Added `\sectd` (section definition) command before header/footer blocks - required for headers/footers to render in page layout/print view
  • - Added `\pard\plain` paragraph reset after header/footer definitions to properly initialize body content
  • - Fixed Unicode character handling - all non-ASCII characters (bullets •, copyright ©, etc.) now converted to RTF Unicode format (`\u8226?`)
  • - Added explicit font specifications (`\f0\fs24`) to paragraph output for consistent rendering
  • - Fixed translation key fallback - keys no longer appear literally in exported documents
  • - Headers and footers now render correctly in Microsoft Word, LibreOffice, and compatible RTF viewers
  • - Location: `lib/export/rtf-engine.js` lines 57-61, 66, 82, 144
  • ### Technical
  • - Updated `escapeRtf()` function to include Unicode conversion for all non-ASCII characters
  • - Changed translation handling to use direct string fallbacks instead of i18n.t() calls
  • - Improved RTF document structure compliance with RTF 1.9 specification

Version 1.2.6 Major

2026-01-16
  • ### Added
  • - **Enhanced Utility Integration** - Integrated three utility modules for improved performance and reliability
  • - **DebounceUtils** (`lib/utils/debounce-utils.js`)
  • - Added debounced auto-save (300ms delay) to reduce XMP write operations during rapid typing
  • - Text input updates UI immediately but saves after user stops typing
  • - Improves performance by preventing excessive file operations
  • - **DocumentUtils** (`lib/utils/document-utils.js`)
  • - Implemented document watcher with polling (1000ms) and debouncing (200ms)
  • - Replaced direct `app.activeDocument` calls with safe getters (`getActiveDocument()`)
  • - Added callbacks for document change/open/close events
  • - Runs alongside traditional Photoshop event listeners as backup strategy
  • - Better error handling prevents crashes on null document references
  • - **HashUtils** (`lib/utils/hash-utils.js`)
  • - Added XMP injection protection via string sanitization before writing
  • - Escapes potentially dangerous characters: `<`, `>`, `&`, `"`, `'`
  • - Available utilities: secure hashing, ID generation, device fingerprinting, string normalization
  • ### Changed
  • - **License System** - Switched from basic Gumroad-only engine to universal multi-vendor system
  • - Changed `require('./lib/core/license-engine.js')` to `require('./lib/core/license-engine-universal.js')`
  • - Now supports multiple license providers: Gumroad, LemonSqueezy, No-License (Adobe marketplace)
  • - License adapters (`gumroad-adapter.js`, `lemonsqueezy-adapter.js`, `no-license-adapter.js`) now actively loaded
  • - Provider selection automatic based on `LICENSE_CONFIG.provider`
  • ### Fixed
  • - **Dependency Scanner Path Resolution** - Enhanced scanner to properly detect relative imports
  • - Added `resolvePath()` function to handle `../` patterns in require() statements
  • - Scanner now correctly resolves paths like `../license-providers/gumroad-adapter.js`
  • - Relative paths resolved based on current file's directory
  • - License adapters no longer show as "UNRESOLVED" - correctly identified as REACHABLE
  • ### Technical
  • - Updated `script.js` with utility module integration (lines 24-26, 516-521, 657, 679, 698, 793)
  • - Modified `setupDocumentEventListeners()` to use DocumentUtils watcher (lines 415-472)
  • - Enhanced `/Users/rob/desktop/Web/ue-dependency-cleaner-enhanced.html` with path resolution logic
  • - Cleaner codebase - all three utility modules now properly detected by dependency scanner

Version 1.2.5 Minor

2026-01-15
  • ### Fixed
  • - **XMP Error Handling for Adobe Verification**
  • - Changed "No active document" error from thrown exception to warning notification
  • - Added `showWarning()` function for user-friendly warning messages
  • - Prevents console errors when no document is open (improves Adobe plugin verification compatibility)
  • - Uses existing translation key `notification.no_document`
  • - No longer logs errors in console for expected user behavior (opening plugin without document)
  • - **Clear/Delete Notes Function Not Working**
  • - Root cause: Native JavaScript `confirm()` dialog doesn't work in Adobe UXP environment
  • - Replaced with custom confirmation overlay using existing HTML element (`clearConfirmationOverlay`)
  • - Added event listeners for Yes/No confirmation buttons (script.js:473-498)
  • - Created separate `performClear()` function for actual clearing logic (script.js:727-743)
  • - Modified `handleClear()` to show custom overlay and respect settings (script.js:709-725)
  • - Respects "Confirm Before Clearing" preference from settings panel
  • - Shows proper success/error notifications after clearing
  • - Full UXP compatibility achieved for all clear operations
  • ### Technical
  • - Updated `script.js` with warning notification handler and custom confirmation overlay logic
  • - Added `showWarning()` helper function for warning-level notifications
  • - Refactored clear handling to use UXP-compatible confirmation UI

Version 1.2.4 Patch

2026-01-01
  • ### Fixed
  • - **Language Warning Modal** - UXP-compliant external modal implementation
  • - Fixed modal timing violation - UXP blocks modals shown from async callbacks
  • - Implemented deferred modal pattern using localStorage flag
  • - Modal now shows when settings closes (safe UI moment)
  • - Uses Photoshop's native `app.showAlert()` API for external blocking dialog
  • - Two-button interface (Reload Now / Later) with translated labels
  • - Prevents silent modal blocking and unwanted Photoshop override notifications
  • ### Technical
  • - Updated `script.js` with deferred modal flag in language callback (lines 132-145)
  • - Added global `showLanguageWarningModal()` function using native `app.showAlert()` (lines 1283-1310)
  • - Modified `lib/ui/settings-engine.js` to check flag on modal close (lines 128-157)
  • - 150ms delay ensures settings modal fully closes before showing warning

Version 1.2.3 Major

2025-12-28
  • ### Added
  • - **Complete i18n Implementation** - Full multi-language support across entire application
  • - 9 supported languages: en-GB, en-US, de, fr, es, it, pt, el, ja
  • - Complete JSON translation files in `/locales/` directory for all languages
  • - Dynamic language switching without reload for main UI, tooltips, and character counter
  • - Translation callbacks for settings notifications
  • - `applyUIText()` function for comprehensive UI updates on language change
  • ### Fixed
  • - **Language Switching** - Resolved multiple critical issues preventing proper language changes
  • - Fixed storage key mismatch between settings (`noteli_language`) and i18n (`plugin_language`)
  • - Fixed tooltip caching issue - tooltips now read title attributes dynamically instead of caching at initialization
  • - Fixed initialization order - i18n now loads before splash screen for proper translation
  • - Added `data-i18n` attributes to all HTML elements requiring translation
  • - Settings modal now translates properly when language changes
  • ### Changed
  • - **Storage Keys** - Unified all localStorage keys to use `noteli_` prefix for consistency
  • - Changed `plugin_language` → `noteli_language`
  • - Updated `noteli_show_tooltips` for consistency
  • - **Character Counter** - Now supports translated unit text via `getUnitText` callback
  • - **Notification System** - Tooltips now support language changes by reading title attributes dynamically
  • ### Technical
  • - Updated `lib/ui/i18n.js` with correct localStorage keys
  • - Enhanced `script.js` with i18n initialization and `applyUIText()` function
  • - Modified `lib/core/noteli-settings.js` to include language and translation callbacks
  • - Updated `lib/ui/settings-engine.js` to support translated notification messages
  • - Enhanced `lib/ui/character-counter-engine.js` with `getUnitText` parameter
  • - Fixed `lib/core/noteli-notifications.js` tooltip event listeners to read dynamically

Version 1.2.2 Minor

2025-12-28
  • ### Fixed
  • - **Settings Persistence** - Critical fix for settings not saving correctly on first modal reopen
  • - Eliminated duplicate event listeners causing race conditions
  • - Added 50ms delay before modal close to ensure UXP localStorage writes complete
  • - Implemented aggressive DOM `selected` attribute clearing on settings load
  • - Prevented double-save issue with `save=false` parameter in callbacks
  • - **Settings Engine Integration** - Removed conflicting `noteli-settings-simple.js` implementation
  • - Consolidated to use `lib/ui/settings-engine.js` exclusively
  • - Properly initialized with `createSimpleSettingsEngine()` and callbacks
  • ### Changed
  • - **UK English Localization** - Changed all user-facing text from US to UK English
  • - "License" → "Licence" (200+ instances in UI, EULA, messages)
  • - "Behavior" → "Behaviour" in settings tabs
  • - Code identifiers (variables, functions) preserved with US spellings
  • - Third-party legal text (e.g., "MIT License") unchanged
  • ### Added
  • - **Internationalization System** - Comprehensive translation infrastructure
  • - Created `/locales/translations.csv` with 200+ translatable strings
  • - Organized into 16 logical categories (Splash, Licence, Settings, etc.)
  • - 10 columns: Category, en-GB Value, Translation Key, en-US, de, fr, es, it, pt, el, ja
  • - en-US column populated where spellings differ from en-GB
  • - Ready for translation into 8 additional languages

Version 1.2.1 Minor

2025-12-28
  • ### Fixed
  • - **UXP Context Menu** - Right-click context menu now works reliably
  • - Replaced unreliable `click` events with `pointerdown` for dynamic elements
  • - Implemented capture-phase event handling for proper outside-click detection
  • - Added smart hover behavior with 300ms delay before auto-close
  • - **UXP Clipboard Cursor Positioning** - Fixed cursor-reset bug after paste operations
  • - Delayed selection restoration with `setTimeout(() => { textarea.selectionStart = pos; }, 0)`
  • - Added pre-paste focus + microtask for accurate multi-line selection
  • - Paste now correctly inserts at cursor position instead of always at end
  • ### Changed
  • - **Context Menu Positioning** - Improved placement and styling
  • - Positioned over control panel instead of textarea to avoid z-index conflicts
  • - Reduced padding from `6px 12px` to `4px 8px` for compact professional appearance
  • - Final position: `offsetY: -1, offsetX: 20`
  • ### Technical
  • - Updated `lib/ui/context-menu-engine.js` with UXP-compatible pointerdown events
  • - Updated `lib/utils/clipboard-utils.js` with cursor positioning fix

Version 1.2.0 Major

2025-12-28
  • ### Fixed
  • - **Photoshop 27 Compatibility** - Critical XMP API changes resolved
  • - Adobe changed `require("uxp").xmp` → `require("photoshop").xmp` in PS 27
  • - Implemented automatic version detection and appropriate API selection
  • - Added 200ms delay for PS 27 XMP writes to prevent corruption
  • - Graceful fallback if version detection fails
  • ### Changed
  • - **Universal Library Architecture** - Major refactoring for code reusability
  • - Reduced script-ui.js from 3000 → 300 lines (87% reduction)
  • - Reduced script-xmp.js from 2200 → 430 lines
  • - Extracted universal engines to `/lib/` for reuse across plugins
  • - Implemented factory pattern for configurable engines
  • ### Added
  • - **Universal Engines** created in `/lib/`:
  • - **Core**: `xmp-engine.js`, `license-engine.js`
  • - **UI**: `notification-engine.js`, `settings-engine.js`, `translation-engine.js`, `splash-engine.js`
  • - **Utils**: `debounce-utils.js`, `document-utils.js`, `hash-utils.js`
  • - **Export**: `pdf-engine.js`, `rtf-engine.js`
  • - **Splash Screen** - 4-second loading sequence with realistic progression
  • - **Notepad Lines** - 1000 JavaScript-generated lines with theme color support
  • - **PS Version Detection** - Fixed using `require('uxp').host.version`
  • ### Technical
  • - Converted from ES6 modules to UXP-compatible require/IIFE pattern
  • - Fixed "Cannot use import statement outside a module" error
  • - Maintained all functionality in single-file implementation
  • - Optimized performance with no module loading overhead

Version 1.0.1 Minor

2025-12-28
  • ### Changed
  • - UI polish and terminology improvements
  • - Minor bug fixes and user experience enhancements

Version 1.0.0 Major

2025-12-28
  • ### Added
  • - **Initial Production Release** - Full-featured note-taking plugin for Photoshop
  • - **Core Features**:
  • - XMP metadata storage for permanent note persistence
  • - Real-time document synchronization
  • - Traffic light sync indicator (green/amber/red)
  • - Professional theming system
  • - **License System**:
  • - Complete Gumroad verification
  • - Admin bypass functionality
  • - Grace period handling
  • - **Export System**:
  • - RTF export with formatting
  • - PDF export with customizable options
  • - Print functionality
  • - **User Interface**:
  • - Text formatting (bold, italic, bullets)
  • - Section headers and links
  • - Character counter with warning levels
  • - Customizable character limits
  • - **Settings Management**:
  • - Comprehensive preferences
  • - Theme selection (Black Pearl, Post Note Yellow, Light Parchment)
  • - Line height options
  • - Export format defaults
  • - **Documentation**:
  • - 23-page professional user manual
  • - Complete EULA integration
  • - **Security**:
  • - Input validation and XSS prevention
  • - Secure license verification
  • - Local-only note storage (no external transmission)
  • ### Technical
  • - Adobe UXP 6.1+ compatibility
  • - XMP metadata integration
  • - Gumroad API integration
  • - Native HTML5/CSS3/JavaScript implementation
  • - Photoshop 2022+ (version 23.3.0+) support

JotFlagger

Here you can access everything related to JotFlagger, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

JotFlagger stores all notes inside XMP metadata, so if jots disappear, the XMP handler may not be installed correctly or the document hasn’t been saved. You can confirm installation by checking File > File Info > Advanced for JotFlagger fields.

The plugin requires manual confirmation of the Adobe XMP/Metadata Extensions directory during installation. This step ensures the metadata schema is correctly placed for Photoshop to recognize. Without it, notes cannot be stored.

Licensing requires an active internet connection, matching purchase email and licence key, and access to Gumroad’s servers. JotFlagger includes a 72-hour offline grace period and 24-hour caching, but after that it must revalidate.

JotFlagger uses a time-aware escalation system. Red and yellow priorities display aging indicators based on configurable thresholds (e.g., red after 3–7 days, yellow after 7–14). This helps prevent overdue tasks from being missed.

The panel requires at least 320×600 px to display correctly. If the interface looks broken or empty, resize the panel, ensure only one document is active, or restart Photoshop to refresh the plugin.

Video Tutorials for JotFlagger. All video appear in window apart from playlist.

JotFlagger - Version History

Version 1.2.7 Bugfix

2026-03-18
  • ## [1.2.7] - 2026-03-18
  • ### Changed
  • - **XMP Write Pattern — No Dirty Pixel**
  • - Replaced `injectMetadata` + save interception with direct `performXMPFilePatching` call in `lib/core/jotflagger-xmp-wrapper.js`
  • - XMP now written directly to disk on blur — no invisible pixel, no JPG re-encode
  • - Removed `setupSaveInterception()` call from wrapper initialisation
  • - Added `comprehensiveLogger` null-safe fallback in `psd-metadata-engine.js`
  • - Removed `ensureDocumentNeedsSave()` call from `injectMetadata`
  • - Removed verification block (500ms delay + re-read) from `performXMPFilePatching`
  • - Updated stale save interception comments in `lib/core/script-xmp.js`
  • - Added `lib/core/document-watcher.js`
  • ### Files Modified
  • - `lib/core/psd-metadata-engine.js` — logger fallback, removed dirty pixel call, removed verification block
  • - `lib/core/jotflagger-xmp-wrapper.js` — direct `performXMPFilePatching` pattern
  • - `lib/core/document-watcher.js` — added (polling watcher)
  • - `lib/core/script-xmp.js` — updated stale comments
  • - `manifest.json` — version bumped to 1.2.7
  • - `lib/core/version.js` — version bumped to 1.2.7

Version 1.2.6 Minor

2026-01-16
  • ### Fixed
  • - **Jot Order Preservation** - Jots now maintain their visual order when saving to XMP
  • - Created `collectJotsFromDOM()` function in lib/core/script-xmp.js (lines 1463-1498)
  • - Iterates through `.priority-note` panels sequentially to preserve DOM order
  • - Maps priority from CSS classes (red-priority → urgent, yellow-priority → important, etc.)
  • - Adds timestamp to each jot for tracking purposes
  • - Modified `saveToBuffer()` to call `collectJotsFromDOM()` before every save (line 989-994)
  • - `window.currentJotData` now updated with latest DOM state, ensuring XMP has current order
  • - **Completed Jots Exclusion from XMP** - Completed jots no longer saved to document metadata
  • - Added completion check in `collectJotsFromDOM()` - skips panels with `.completed` class (line 1469)
  • - Added completion check in `performJotSave()` in lib/ui/script-ui.js - filters before XMP write (line 4555)
  • - Removed `completed` field from jot object structure (completed jots aren't persisted)
  • - Clean separation: UI state includes completed jots, persisted state only includes active jots
  • - Completed jots removed from metadata when document is saved
  • ### Technical
  • - Jots maintain visual order across document close/reopen cycles
  • - Debounced save system (1 second delay) ensures performance without sacrificing accuracy
  • - Better state management with clear distinction between UI state and persisted state

Version 1.2.5 Major

2026-01-15
  • ### Removed
  • - **XMP Installer Section** - No longer needed with Universal Engine approach
  • - Removed complete installer modal UI from index.html (114 lines)
  • - Removed all installer CSS styles from styles.css (408 lines)
  • - Removed installer JavaScript functions from lib/ui/script-ui.js (710 lines)
  • - Removed installation status check from app initialization flow
  • - XMP metadata now handled directly by Universal Engine without manual setup
  • - Eliminates manual file installation step from user onboarding
  • - Cleaner architecture with embedded metadata handlers
  • ### Fixed
  • - **License Modal Showing Main UI Elements**
  • - Main UI form elements no longer visible behind license screen
  • - Modified hideSplashScreen() to only hide splash without showing root element
  • - Modified showLicenseModal() to explicitly hide root element (all form elements)
  • - Modified proceedToMainUI() to show root only after successful license validation
  • - Ensures clean license screen without background UI clutter
  • ### Changed
  • - **License Screen Enforcement**
  • - Removed cancel button from license modal
  • - Valid license now required to access app - no bypass possible
  • - Updated UI to remove cancel button HTML element
  • - Removed cancel button event listener from JavaScript
  • - Stronger license requirement enforcement

Version 1.2.4 Major

2026-01-03
  • ### Fixed
  • - **Export Functionality Not Working**
  • - Completely rewrote exportWithSettings() function to work with priority note system
  • - Function now correctly collects notes from .priority-note elements instead of non-existent #jotText
  • - Export now works from all three access points: control panel button, hamburger menu, and Photoshop panel menu
  • - Each exported note includes priority indicator (URGENT, Important, Normal, Reference)
  • - Properly handles both PDF and RTF export formats based on user settings

Version 1.2.3 Minor

2026-01-02
  • #### Fixed i18n Data Attributes
  • - **Issue**: Translation keys in HTML didn't match actual keys in messages.json files
  • - **Impact**: All values were showing as-is instead of being translated
  • - **Root Cause**: Wrong key names used in data-i18n attributes
  • - **Corrections Made**:
  • - `ui.*` → `main.*` for main UI elements (empty_state, empty_subtext, header_title)
  • - `license.*` → `licence.*` throughout (British spelling)
  • - `settings.title` → `settings.modal_title`
  • - Added proper prefixes: `tooltip.*`, `sort.*`, `settings.section_*`
  • - Fixed all tooltip attributes: `data-i18n-title`
  • - Corrected settings buttons: `settings.btn_save`, `settings.btn_reset`, `settings.btn_cancel`
  • - **Files Modified**:
  • - `/Users/rob/Desktop/Photoshop/JotFlagger/index.html` - All data-i18n attributes corrected
  • - **Verification**: Read messages.json to ensure all keys match exactly
  • - **Status**: i18n now ready for implementation

Version 1.2.2 Minor

2026-01-02
  • ### Translation CSV Created
  • - **Created**: Comprehensive translation strings CSV for future i18n implementation
  • - **File**: `jotflagger-translations.csv` in project root
  • - **Coverage**: 175 translation keys across 10 categories:
  • - Splash Screen (title, description, loading, version info)
  • - Licence Screen (activation modal, form fields, support text)
  • - Main Panel (header, empty state, counter, confirmations)
  • - Tooltips (all control buttons and actions)
  • - Sort Options (priority, date, original order)
  • - Settings Modal (tabs, sections, all settings labels and options)
  • - EULA (complete end-user license agreement text)
  • - Notifications (success, error, warning messages)
  • - Context Menu (copy, paste, cut, select all, delete)
  • - Menu (updates, about, documentation, bug report, rate)
  • - **Dynamic Placeholders**: Properly parameterized dynamic values:
  • - `{{version}}` - Version numbers
  • - `{{count}}` - Jot counts
  • - `{{error}}` - Error messages
  • - `{{priority}}` - Priority color names
  • - `{{limit}}` - Maximum jot limits
  • - `{{days}}` - Aging warning day counts
  • - **Format**: CSV with columns: Key, English Text, Category, Notes
  • - **Notes**: Installer section removed (previously deleted from codebase)
  • - **Purpose**: Ready for translation into multiple languages
  • - **Translation-Ready**: All user-facing text identified and catalogued

Version 1.2.1 Minor

2025-12-28
  • ### Added
  • - **Internationalization Preparation** - Translation CSV ready for i18n implementation
  • - Created comprehensive translation strings CSV (`jotflagger-translations.csv`)
  • - 175 translation keys across 10 categories
  • - Dynamic placeholder syntax for variable content ({{version}}, {{count}}, {{error}}, etc.)
  • - Categories: Splash Screen, Licence Screen, Main Panel, Tooltips, Sort Options, Settings Modal, EULA, Notifications, Context Menu, Menu
  • - Ready for translation into multiple languages

Version 1.2.0 Major

2025-12-27
  • ### Version 1.2.0 (2025-12-27)
  • #### XMP System Migration
  • - **Major Change**: Migrated from legacy JotFlagger XMP system to Noteli's Universal Engine approach
  • - **Files Added**:
  • - `lib/core/jotflagger-xmp-wrapper.js` - Adapted from Noteli's wrapper for multiple jots storage
  • - `lib/core/psd-metadata-engine.js` - Universal Engine for reliable XMP read/write
  • - `lib/core/xmp-engine.js` - Core XMP handling with PS 26/27 compatibility
  • - **Benefits**:
  • - Automatic PS 26/27 compatibility
  • - Secure encoding for data protection
  • - Save interception for automatic XMP writing
  • - No phantom dirty pixel issues
  • #### Bug Fixes
  • - **Fixed**: Dirty pixel bug - asterisk appearing after document load without typing
  • - Removed input event trigger during jot load (lib/core/script-xmp.js:1514)
  • - Manually update tick icon and character counter without triggering save
  • - **Fixed**: Tick icon greyed out after loading jots
  • - Added manual state update for tick icon during load
  • - Character counter now updates correctly on load
  • - **Fixed**: Priority sorting backwards (red going to bottom instead of top)
  • - Changed from `||` operator to `??` to handle 0 (red priority) correctly
  • - Sort order now: Red (urgent) → Yellow → Green → Blue
  • - **Fixed**: Date sorting showing newest first instead of chronological order
  • - Changed sort to oldest → newest (chronological)
  • - **Fixed**: Original sorting not working
  • - Now restores jots to creation order (by timestamp)
  • #### UX Improvements
  • - **Completed Jots**: Removed expand icon from completed jots
  • - Once marked complete, only delete action is available
  • - Prevents confusion about reopening completed items
  • #### Technical Improvements
  • - Added stub `comprehensiveLogger` for PSD Metadata Engine compatibility
  • - Cleaned up unused files (script.js → script-old.js)
  • - Data structure supports multiple jots, contextual notifications, and scheduled reminders

Version 1.0.0 Major

2025-12-27
  • ### Version 1.0.0 (Initial Release)
  • #### Core Features
  • - Priority-based sticky note system for Photoshop
  • - Color-coded priorities: Red (Urgent), Yellow (Important), Green (Normal), Blue (Reference)
  • - XMP metadata integration for document persistence
  • - Export functionality (PDF, RTF)
  • - License verification via Gumroad
  • - Localization support
  • - Smart notification and reminder system
  • - Character counter with visual warnings
  • - Aging indicators for overdue jots
  • - Auto-collapse functionality
  • - Empty state messaging

ScribbblePad

Here you can access everything related to ScribbblePad, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here!

After installing via Adobe Exchange or manual .ccx installation, Photoshop must be fully restarted. Once restarted, ScribbblePad will appear under Window > Extensions (UXP) or in the Plugins panel.

Activation requires the email used for purchase, the licence key from Gumroad, and an active internet connection. Typos or offline mode will prevent verification. Re-enter details and ensure network access.

Performance issues often occur when too many pads are active or Photoshop resources are limited. Reduce the maximum number of pads in Settings, close heavy panels, or increase available RAM.

Complex sketches and vector-based output require more processing. Exporting as JPG is faster, while PNG and PDF (vector) take longer due to precision rendering. Choosing simpler formats speeds up export.

This often happens when Photoshop is in a modal state (dialogs open) or the panel is out of sync. Ensure no dialogs are open, click back into Photoshop to regain focus, or close and reopen the plugin panel.

Video Tutorials for ScribbblePad. All video appear in window apart from playlist.

ScribbblePad - Version History

Version 1.2.0 Major

2026-02-26
  • ### Added
  • - **Translation System Preparation**
  • - Created comprehensive translation CSV with 106 UI strings
  • - Organized into 9 categories: splash, tooltips, context menus, license, confirmation, settings, color picker, messages, panel UI
  • - Support for 9 languages: en-GB, en-US, French, German, Spanish, Italian, Portuguese, Greek, Japanese
  • - CSV location: `_support/doc/_translations_SCRIBBBLEPAD.csv`
  • - **Pad Context Menu Enhancements**
  • - **Duplicate Pad**: Clone any pad with all drawings and settings
  • - Deep copies all stroke data from source pad
  • - Creates new canvas with identical content
  • - Automatically inserts after source and switches to it
  • - **Delete Pad**: Smart pad removal with content detection
  • - Shows warning dialog only for pads with drawings
  • - Empty pads delete immediately without confirmation
  • - Protection: Cannot delete the last remaining pad
  • - Proper canvas cleanup and event management
  • ### Changed
  • - Version bumped from 1.1.0 to 1.2.0 in both `version.js` and `manifest.json`
  • ### Status
  • - Panel menu items identified as partially implemented (placeholders for About, Help, Clear All, Export)
  • - Ready for i18n system implementation once translations received

Version 1.1.1 Minor

2026-02-25
  • ### Added
  • - **Universal License Engine Integration**
  • - Provider-agnostic license system supporting multiple platforms
  • - Multi-provider support: Gumroad, Lemon Squeezy, or no-license builds
  • - Centralized version management in `lib/core/version.js`
  • - Admin bypass system for support and testing
  • - 72-hour offline grace period after last successful check
  • - Backwards compatible API mapping
  • ### Technical Implementation
  • - New structure:
  • - `lib/core/version.js` - Single source of truth for version
  • - `lib/core/license-engine-universal.js` - Provider-agnostic engine
  • - `lib/license-config.js` - Centralized build configuration
  • - `lib/license-providers/` - Adapter pattern for different providers
  • - `gumroad-adapter.js`
  • - `lemonsqueezy-adapter.js`
  • - `no-license-adapter.js`
  • ### Build Configurations
  • - BUILD_GUMROAD: Standard Gumroad verification (current)
  • - BUILD_ADOBE: No license required for Adobe Marketplace
  • - BUILD_LEMONSQUEEZY: Lemon Squeezy integration
  • - BUILD_FREE: Free version with admin support access
  • ### Fixed
  • - License modal now shows correctly on first run
  • - Removed old non-functional license system
  • - Clean initialization flow with proper license checking

Version 1.1.0 Minor

2026-01-02
  • ### Enhanced Color Interface
  • - Redesigned palette layout with narrower swatches and better spacing
  • - Recent colors history tracking and display
  • - Visual separator between main palette and history section
  • - Expandable color picker with concept-style HSL controls
  • - Proper event isolation between palette and picker
  • - Rainbow hue bar for intuitive color selection
  • ### Smart Pad Management
  • - Delete pad button (minus icon) appears after 2nd pad is created
  • - Content detection recognizes drawings before deletion
  • - Smart warnings: confirmation only for pads with content
  • - Empty pads delete immediately
  • - Protection: Cannot delete the last remaining pad
  • - Proper cleanup: canvas removal, array management, event reattachment
  • ### Content Detection System
  • - Two-layer approach: strokes array check + pixel scanning fallback
  • - Graceful error handling with safe defaults

Version 1.0.0 Major

2025-12-29
  • ### Working Export Features
  • - Current pad export only (active/visible pad)
  • - JPG/PNG format support (JPG default, PNG optional)
  • - UXP-compatible pipeline: SVG → Photoshop → raster export
  • - Visible content cropping with 80px padding
  • - Save location dialog for user-selected destinations
  • - Clean cancellation handling with notifications
  • - No PSD save prompts (documents close automatically)
  • - Adobe vetting ready (no unhandled errors)
  • ### Technical Implementation
  • ```
  • Export flow: Strokes → SVG → Photoshop Document → JPG/PNG → Close
  • 1. calculateVisibleBounds(strokes) - Find content area + padding
  • 2. createSVGFromStrokes(strokes, bounds) - Convert to vector
  • 3. exportAsRasterFromSVG() - Place SVG, export, close
  • 4. executeAsModal() wrapper - Proper UXP modal scope
  • ```
  • ### Settings Available
  • - Export Format: JPG (default) or PNG
  • - Remember Export Location: User convenience option
  • - Export button feedback: Success/cancelled notifications
  • ### Removed from V1.0 (Future Features)
  • - Multi-pad export (all pads as separate files)
  • - PSD with layers option
  • - PDF export (HTML template approach recommended)
  • ---
  • ## Technical Notes
  • ### UXP Limitations
  • - `canvas.toDataURL()` and `getImageData()` not available
  • - Reliable method: SVG generation → Photoshop placement → raster export
  • - All Photoshop API calls must use `executeAsModal()`
  • - Always close documents with `close(false)` to prevent save prompts
  • ### Panel Menu Items
  • - Working: Reload Plugin, Visit Plugin Page
  • - Placeholders: About, Help & Documentation, Clear All Pads, Export Drawing
  • - Will be fully implemented after i18n system integration
  • ---
  • ## Future Development (V2.0+)
  • ### Planned Features
  • 1. Translation system implementation with i18n.js
  • 2. Complete panel menu items with proper modals
  • 3. Color picker improvements (HSL controls, visual feedback)
  • 4. Multi-pad export (separate files)
  • 5. PDF export (HTML template approach)
  • 6. Advanced pad features (rename, reorder)
  • 7. Export location memory enhancement
  • ### Enhancement Ideas
  • - Pad thumbnails with visual previews
  • - Undo/Redo system with canvas state management
  • - Layer support (multiple drawing layers per pad)
  • - Custom color palettes (user-defined color sets)

WordHue

Here you can access everything related to WordHue, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started. Return to main plugin page here

Colour generation requires an active internet connection, available tokens, and at least one enabled AI API. If no palette appears, check your token counter, ensure the APIs are enabled in Settings → AI, and verify your connection. 

This usually happens when prompts are too short or literal. WordHue’s Smart Enhancement System adds contextual variations, stopword filtering, and colour associations to improve accuracy. Enable Auto-Enhance in Settings to improve results.

WordHue uses a 30-token hourly limit. When tokens reach zero, generation pauses until the timer resets. You can enable caching to reduce token usage during repeated or similar prompts.

The email and licence key must match the Gumroad purchase exactly, and your device must be online. WordHue verifies licences with Gumroad on first launch. Incorrect typing, offline mode, or server issues can block activation.

Exports must be saved in supported formats: ACO, ASE, JSON, CSS, or TXT. For Photoshop, use ACO or ASE, which load directly into the Swatches panel. Ensure files are saved to a writable folder with the correct extension.

Video Tutorials for WordHue. All video appear in window apart from playlist.

WordHue - Version History

Version 1.0.0 Patch

2025-12-29

IconWoe

Here you can access everything related to IconWoe, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started.

IconWoe eliminates silent icon failures in Photoshop UXP plugins by validating manifests, file structure, and icon assets, then generating fully compliant icon sets that Photoshop resolves correctly across themes, sizes, and resolutions.

IconWoe is designed for Photoshop UXP plugin developers, especially those migrating from CEP or frustrated by missing, blurry, or inconsistent icons caused by strict UXP requirements.

From a single base PNG, IconWoe generates the complete 8-file UXP icon set: light and dark themes, @1x and @2x resolutions, and both panel and menu icon sizes, all correctly named and formatted.

No. IconWoe encodes Adobe’s UXP icon rules directly into its Wizard and Toolbox, guiding you through validation and fixing issues automatically without requiring deep UXP knowledge.

IconWoe only applies targeted, rule-based corrections when you choose to run fixes. You can inspect issues first using diagnostics, then apply fixes selectively or use the Wizard for an end-to-end workflow.

Video Tutorials for IconWoe. All video appear in window apart from playlist.

IconWoe - Version History

Version 1.0.13 Major

2026-01-24
  • ### ✨ NEW FEATURES
  • **Step 5 File Cleanup - WORKING**
  • - Implemented working file deletion using UXP's fresh folder selection requirement
  • - User prompted to select project folder for deletion permissions (UXP security requirement)
  • - Cleanup warning overlay shows all files that will be removed before deletion
  • - Deletes files immediately during traversal (not collected then deleted)
  • - Bottom-up folder deletion (files first, then empty folders)
  • - Removes: .md, .psd, .bmp, .gif, .tiff, .jpg, .jpeg, .bak, .tmp, .log, .map, dev folders, etc.
  • **File Operations Panel - Icon Upload System**
  • - Click-to-select interface for 8 required PNG icon files
  • - Pattern validation: `*-dark@1x/2x.png`, `*-light@1x/2x.png`, `panel-*-dark@1x/2x.png`, `panel-*-light@2x.png`
  • - File list display with validation status (✅ or ❌)
  • - Upload confirmation button appears only when validation passes
  • - User reviews selected files before uploading to icons folder
  • - Clear error messages showing missing patterns
  • ### 🐛 BUG FIXES
  • **File Deletion Implementation**
  • - Rewrote cleanup using ChatGPT research pattern for UXP file deletion
  • - Key insight: UXP requires `fs.getFolder()` for deletion permissions (can't reuse read-only folder references)
  • - Files deleted immediately during walk (not collected with stale references)
  • - Folders tracked separately and deleted deepest-first after file deletion
  • - Extension normalization with Set for consistent matching
  • - Detailed logging with emoji indicators and success/error tracking
  • **File Upload Validation**
  • - Fixed validation to accept flexible base names (not hardcoded filenames)
  • - Pattern matching: checks for correct structure, not exact names
  • - Validates exactly 8 files with correct light/dark, @1x/@2x, panel/non-panel patterns
  • - No duplicates allowed - each pattern must appear exactly once
  • - Clear error messages: "Missing patterns: dark@1x, panel-light@2x"
  • **Cleanup Warning Overlay**
  • - Added note explaining folder selection prompt for deletion permissions
  • - User understands they'll need to grant permission before cleanup runs
  • ### 🔧 IMPROVEMENTS
  • **Step 5 Export Validation**
  • - Progress visualization with timed delays (500-600ms intervals)
  • - Progress stops at 90% during validation, hits 100% only on success
  • - Cleanup, structure validation, and export readiness checks with visual feedback
  • - Success mode with "Export Ready" panel and deployment instructions
  • **File Operations UI**
  • - Updated text: "Click here to select the 8 required PNG icon files"
  • - Pattern help text shows expected naming convention
  • - File list container with flex layout for proper button placement
  • - Green "Upload to Icons Folder" confirmation button
  • - Success message after upload completes
  • ### 📝 CODE CHANGES
  • **New Patterns**
  • ```javascript
  • // UXP deletion requires fresh folder selection
  • const folder = await fs.getFolder();
  • // Delete files immediately during traversal
  • for (const entry of entries) {
  • if (shouldDelete(entry)) {
  • await entry.delete(); // Fresh reference
  • }
  • }
  • // Flexible icon pattern validation
  • const patterns = {
  • 'dark@1x': fileNames.filter(n => !n.startsWith('panel-') && n.includes('-dark@1x.png')),
  • 'panel-dark@1x': fileNames.filter(n => n.startsWith('panel-') && n.includes('-dark@1x.png'))
  • };
  • ```

Version 1.0.12 Minor

2026-01-23
  • ### ✨ NEW FEATURES
  • **Step 3 Auto Icon Generation**
  • - Working auto-generation of all 8 icon variants (panel-{name}-light/dark @1x/@2x, {name}-light/dark @1x/@2x)
  • - User opens base.png/base.svg in Photoshop, clicks Create button
  • - Generates all variants with color overlays: #dddddd (221,221,221) for dark, #4d4d4d (77,77,77) for light
  • - Progress bar with 100ms delays for visual feedback
  • - Panel icons: 24x24 (@1x), 48x48 (@2x) - correct Adobe spec
  • - Standard icons: 23x23 (@1x), 46x46 (@2x)
  • **Smart Auto-Detection**
  • - Automatically checks if all 8 icon variants already exist
  • - If exist: skips auto-generation panel, shows validation panel directly
  • - If missing: shows auto-generation panel with instructions
  • - Detection runs when Step 3 becomes active
  • ### 🐛 BUG FIXES
  • **UXP File Token Issue - RESOLVED**
  • - Switched from trying to open files with tokens to working on already-open documents
  • - Simple approach: user opens file in Photoshop FIRST, then clicks Create
  • - Uses `app.activeDocument` - no file tokens needed
  • - Direct `doc.saveAs.png()` API calls - clean and reliable
  • **Step 1 Panel Icon Validator**
  • - Fixed to accept `panel-{name}-light@1x.png` format (not just `panel-light@1x.png`)
  • - Changed from exact match to pattern match: `name.startsWith('panel-') && name.includes('light')`
  • **Dimension Validator**
  • - Now accepts BOTH 23x23/46x46 AND 24x24/48x48 for panel icons
  • - Checks if filename contains "panel" OR manifest declares as plugin-panel type
  • - Properly validates both naming conventions
  • **Step 3 UI Layout**
  • - Fixed buttons squashed to right side issue
  • - Wrapped manual container in `step3-manual-wrapper` for proper flex column layout
  • - Buttons now appear below validation icons correctly
  • **Wizard Navigation**
  • - Added null check for wizard-step parent element
  • - Prevents "Cannot read properties of null (reading 'classList')" error
  • ### 📄 FILES ADDED
  • - `lib/wizard/step3-auto-generation-SIMPLE.js` - Working auto-generation using active document approach
  • ### 📝 FILES MODIFIED
  • - `lib/wizard/step1-file-structure.js` - Panel icon name pattern matching (lines 305-314)
  • - `lib/toolkit/validators/icon-tests/test-wrong-size.js` - Dimension flexibility for panel icons
  • - `index.html` - Step 3 wrapper structure, script tag for SIMPLE version
  • - `styles.css` - Step 3 wrapper styling
  • - `script.js` - Auto-detection logic, button wiring, null checks, wrapper references
  • - `lib/core/version.js` - Updated VERSION to '1.0.12'
  • - `_support/doc/CLAUDE.md` - Session 8 documentation
  • - `_support/doc/CHANGELOG.md` - This file

Version 1.0.11 Minor

2026-01-23
  • ### ✨ NEW FEATURES
  • **Step 2 Manifest Validation - Fix Panels**
  • - Added professional fix panels for Host, Properties, and Permissions validators
  • - All fix panels use checkbox-based UI for user configuration
  • - Panels follow Read → Parse → Modify → Write pattern for safe file operations
  • **Host Fix Panel** (`lib/wizard/repairs/fix-manifest-host.js`)
  • - Automatically sets app to "PS" (Photoshop)
  • - Sets minVersion to "23.3.0" (lowest supported version)
  • - Optional checkbox to add maxVersion (uses current Photoshop version)
  • - Auto-detects Photoshop version from `require('uxp').host.version`
  • **Properties Fix Panel** (`lib/wizard/repairs/fix-manifest-properties.js`)
  • - Validates and fixes: manifestVersion (5), id format (com.x.y), name, main (index.html)
  • - Generates safe default ID from plugin name if invalid
  • - Optional checkboxes for addon and featureFlags properties
  • - Warnings for properties requiring additional configuration
  • **Permissions Fix Panel** (`lib/wizard/repairs/fix-manifest-permissions.js`)
  • - Network domains always added (set to ["all"] by default)
  • - Optional checkboxes for: clipboard, localFileSystem, webview, launchProcess, ipc, allowCodeGenerationFromStrings
  • - Creates stub structures for complex permissions
  • - Warnings for permissions needing manual configuration
  • **Manifest Order Validator** (`lib/toolkit/validators/manifest/manifest-order-validator.js`)
  • - New validator checks if manifest keys are in Adobe's required order
  • - Expected order: manifestVersion → id → name → version → main → host → type → entrypoints → icons → requiredPermissions
  • - Auto-fix reorders keys using manifestUtils.writeManifest()
  • ### 🔄 CHANGES
  • **Step 2 Reorganization**
  • - Removed field-formats validator (redundant with existing validators)
  • - Added manifest-order validator at end of test sequence
  • - Moved UI Legacy to end of Row 1 for 5x5 grid layout
  • - New test order: Host → Properties → Permissions → EntryPoints → UI Legacy → Icon Structure → Version → Syntax → Typos → Key Order
  • **UI Improvements**
  • - Project panel field starts blank when plugin loads
  • - Previous project path no longer auto-populated from localStorage
  • - Fix panel checkboxes have proper white text styling (10px font)
  • - Consistent panel behavior across all Step 2 validators
  • ### 🐛 BUG FIXES
  • **Properties Validator**
  • - Removed host and entrypoints checks (handled by separate validators)
  • - Now only validates core properties: manifestVersion, id, name, main
  • ### 📝 TECHNICAL CHANGES
  • **Updated Files:**
  • - `index.html` - Added manifest-order-validator script, reorganized Step 2 UI (5x5 grid)
  • - `step2-manifest-validation.js` - Updated tests array, added manifest-order to icon mapping
  • - `properties-validator.js` - Removed redundant checks
  • - `script.js` - Disabled localStorage auto-population for project path
  • - `manifest.json` - Version bump to 1.0.11

Version 1.0.10 Major

2026-01-22
  • ### 🔄 MAJOR CHANGES
  • **Wizard Step 1 - Complete Rewrite**
  • - Completely rewrote `lib/wizard/step1-file-structure.js` (813 lines)
  • - **REMOVED all fix functions** - validation only, no automatic fixes
  • - Separated validation into two distinct stages
  • - Much stricter validation requirements
  • ### ✨ NEW FEATURES
  • **Two-Stage Validation System**
  • - **Stage 1: Name/Extension/Location**
  • - Validates exact filenames (case-sensitive)
  • - Checks file extensions match expected
  • - Verifies files are in correct location (root)
  • - Validates folder names are exactly correct
  • - **Stage 2: File Type/Content**
  • - Parses and validates file contents
  • - Checks UXP compatibility
  • - Validates file structures and formats
  • - Binary validation for PNG files
  • **Strict File Validation**
  • - `manifest.json` - Must be EXACTLY this name
  • - Rejects: manifest.jsn.json, manifest.txt, package.json, etc.
  • - Stage 1: Name/location check
  • - Stage 2: JSON parsing, UXP manifest structure, manifestVersion=5, required fields
  • - `index.html` - Must be EXACTLY this name
  • - Rejects: index.htm, main.html, plugin.html
  • - Stage 2: HTML structure, no iframe elements
  • - `script.js` - Must be EXACTLY this name
  • - Rejects: script.jsx, main.js, index.js
  • - Stage 2: JavaScript patterns, UXP import validation
  • - `styles.css` - Must be EXACTLY this name (optional)
  • - Rejects: style.css, main.css, style.ccs.css
  • - Stage 2: CSS syntax, UXP compatibility warnings
  • **Strict Icons Folder Validation**
  • - Folder must be named exactly `icons`
  • - Rejects: icon, images, ikon, Icons, ICONS, assets
  • - Stage 1 failure if folder name is wrong
  • - Helpful error: "Wrong folder name. Expected: 'icons', Found: icon"
  • **Comprehensive PNG Validation**
  • - **Required files (ALL must exist):**
  • - `light@1x.png` or `panel-light@1x.png`
  • - `light@2x.png` or `panel-light@2x.png`
  • - `dark@1x.png` or `panel-dark@1x.png`
  • - `dark@2x.png` or `panel-dark@2x.png`
  • - **Filename requirements:**
  • - Must include @1x or @2x scale indicator
  • - Panel icons should use panel- prefix (optional)
  • - **Binary validation:**
  • - Checks PNG file signature (first 8 bytes)
  • - Reads IHDR chunk for dimensions
  • - @1x files MUST be 23x23 pixels
  • - @2x files MUST be 46x46 pixels
  • - Dimension errors show expected vs found
  • **Enhanced Error Reporting**
  • - Clear stage identification (Stage 1 vs Stage 2)
  • - Specific error messages with helpful context
  • - Shows similar files found when exact match missing
  • - Lists all missing required files
  • - Reports actual vs expected values (dimensions, versions)
  • - Differentiates between missing (Stage 1) and broken (Stage 2) states
  • **Validation Examples:**
  • ```
  • ✅ Stage 1 PASS: manifest.json has correct name, extension, and location
  • ✅ Stage 2 PASS: manifest.json is valid
  • ❌ Stage 1 FAIL: File "manifest.json" not found. Found similar: manifest.jsn.json
  • ❌ Stage 1 FAIL: Wrong folder name. Expected: "icons", Found: icon
  • ❌ Stage 2 FAIL: Missing light@1x.png or panel-light@1x.png
  • ❌ Stage 2 FAIL: Wrong dimensions for @2x. Expected: 46x46, Found: 54x54
  • ```
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Code Architecture**
  • - Clean separation of concerns (validation vs fixes)
  • - Reusable validator functions for each file type
  • - Consistent result objects with stage tracking
  • - Better error propagation and reporting
  • **Validation Functions**
  • - `validateFileNameAndLocation()` - Generic file checker
  • - `validateIconsFolderNameAndLocation()` - Folder name checker
  • - `validateManifestJSON()` - UXP manifest validator
  • - `validateHTML()` - HTML structure validator
  • - `validateJavaScript()` - JS pattern validator
  • - `validateCSS()` - CSS syntax validator
  • - `validateIconsFolder()` - PNG naming validator
  • - `validatePNGFile()` - Binary PNG validator with dimension check
  • - `validateFile()` - Wrapper running both validation stages
  • - `validateIconsStructure()` - Complete icons folder validation
  • **UI Integration**
  • - Updates icon states: valid (green), broken (orange), missing (greyed)
  • - Shows/hides fix buttons based on validation state
  • - Progress bar during scan
  • - Summary with pass/fail counts
  • - Next button only enabled when all required checks pass
  • ### 🐛 FIXES
  • - Fixed CSS file validation accepting wrong filenames
  • - Fixed icons folder validation accepting "icon" instead of "icons"
  • - Fixed PNG validation not checking for @1x/@2x in filenames
  • - Fixed dimension validation not enforcing strict 23x23 / 46x46 requirements
  • - Fixed validation passing with incomplete icon sets
  • ### 📝 NOTES
  • - All fix functions moved to separate files (to be wired to fix buttons later)
  • - Validation now completely independent of fixes
  • - Test project "IconWoe Wizard Run" created with intentional errors
  • - Ready for fix button implementation in next session

Version 1.0.9 Major

2026-01-20
  • ### ✨ NEW FEATURES
  • **First-Run Disclaimer**
  • - Added disclaimer overlay on first launch with important information
  • - Explains tool limitations and best-use scenarios
  • - Provides link to test project folder download (https://robsnow.eu)
  • - Test project section explains manual + automated fix workflows
  • - localStorage flag prevents showing on subsequent launches
  • - Hides project panel during disclaimer display
  • **Fix JSON Syntax - COMPLETE**
  • - Comprehensive manifest.json validation and auto-fixing
  • - Scans for 8 categories of errors: formatting, ID, version, host config, entrypoints, paths, permissions, deprecated fields
  • - Auto-fixes: manifestVersion, ID format (com. prefix), version format (preserves major number), app code (PSD→PS), minVersion format, entrypoint type (panels→panel), icon folder typos (icon/→icons/), backslashes
  • - Manual warnings: invalid characters, missing fields, permission security risks, inconsistent structures
  • - Photoshop version validation: detects versions < 23 or > 27 as invalid
  • - Version dropdown selector when minVersion is invalid (PS 2022-2025)
  • - Auto-selects current running PS version if nothing chosen
  • - Smart folder path correction (detects icon/ vs icons/ typo)
  • - Network domain validation (adds https:// protocol)
  • - Report shows auto-fixable vs manual review sections
  • - "Run Auto-Fix" button appears only when fixable issues exist
  • - Re-scans after fix and updates report
  • - Button disappears when all auto-fixes complete
  • **Batch Process - COMPLETE**
  • - Smart pre-scan of project to show only needed fixes
  • - Scans for: SVG files, grayscale PNGs, missing alpha channels, wrong dimensions, 48x48 doc open, missing theme variants, manifest issues
  • - Only displays fixes actually needed (saves screen space)
  • - Shows count: "Fixes Needed (3)"
  • - Sequential execution with 500ms delay between fixes
  • - Checkboxes unchecked by default
  • - "Run Fix(es)" button shows count and appears only when ≥1 selected
  • - Report section with ✓/✗ status for each fix
  • - Successfully completed fixes hidden from list on re-open
  • - "All fixes completed!" message when list is empty
  • - Excludes Batch Process and Export Package from list
  • **Export Package - COMPLETE**
  • - Full project validation before packaging
  • - Scans for console/debugger/alert statements in JS files
  • - Detects TODO/FIXME comments
  • - Identifies junk files: .git, .DS_Store, node_modules, .vscode, README, etc.
  • - Validates all manifest icon references exist
  • - Recursive folder size calculation (accurate MB total)
  • - 50MB package size warning
  • - Optional backup checkbox (checked by default)
  • - Creates timestamped backup folder: `PluginName_backup_2025-01-20_143022`
  • - Full recursive folder copy for backup
  • - "Prepare Package" button deletes junk files
  • - Completion report with backup location and deleted file count
  • - Next Steps instructions for UXP Developer Tool
  • - Code validation issues flagged for manual review (not auto-fixed)
  • ### 🐛 BUG FIXES
  • **Batch Process Function Names**
  • - Fixed mismatched function names causing "Fix function not found" errors
  • - Corrected: showConvertGrayscaleRGBFix → showGrayscaleToRGBFix
  • - Corrected: showAddAlphaFix → showAddAlphaChannelFix
  • **Export Package File Size**
  • - Fixed recursive folder scanning (was only checking root level)
  • - Now accurately calculates total package size including all subfolders
  • - Uses Blob size calculation for accurate file size detection
  • ### 🎨 UI/UX IMPROVEMENTS
  • **Tab Content Auto-sizing**
  • - Changed from fixed height to dynamic sizing based on content
  • - min-height: 300px, max-height: calc(100vh - 290px)
  • - Added 10px bottom padding
  • - Content now auto-sizes instead of always being 100% height
  • **Fix Panel Consistency**
  • - Fix JSON Syntax panel now uses standard styling (fix-header-section, fix-main-icon)
  • - Close button changed to blue gradient (fix-ok-btn) to match other panels
  • - Proper spacing between sections (20px margin-top)
  • - Icon centered at 60px like other fix panels
  • **Disclaimer Styling**
  • - Green-themed test project section with border and background
  • - Link styling with hover effect
  • - Professional layout with icon and clear messaging
  • - Scrollable content area for long text

Version 1.0.7 Major

2026-01-19
  • ### ✨ NEW FEATURES
  • **Create Theme Variants Fix - COMPLETE**
  • - Automatically creates light and dark theme variants from base icon files
  • - Scans icons folder for all @1x and @2x PNG files
  • - Applies color overlay: RGB(221, 221, 221) for dark theme, RGB(77, 77, 77) for light theme
  • - Uses Photoshop batchPlay API for color overlay and rasterization
  • - Creates new files with -dark and -light suffixes (e.g., icon-dark@2x.png)
  • - Original files remain unchanged
  • - Processes all base files automatically (4 base → 8 total with variants)
  • - Button hides after completion (one-time action)
  • **Inject Manifest Template - COMPLETE**
  • - Quick fix to generate clean, Adobe-compliant manifest.json
  • - Auto-scans icons folder to detect available icon files
  • - Smart defaults from existing manifest (ID, name, version, permissions)
  • - Normalizes plugin ID to proper format (com.company.pluginname)
  • - Removes 'v' prefix from version numbers
  • - Validates semantic versioning (x.y.z)
  • - Auto-generates icon arrays with correct theme mappings
  • - Preserves existing permissions and localization
  • - Panel/Command plugin type selector
  • - Uses Read→Parse→Modify→Write pattern for safe JSON handling
  • - Removes `species` field (not required)
  • - Shows reminder to use Wizard for full validation
  • ### 🎨 UI/UX IMPROVEMENTS
  • **Massive Interface Compaction**
  • - Reduced all icons throughout app by 5px (then adjusted specific ones for usability)
  • - Made project folder icon and panel toggle icons larger (32px and 26px)
  • - Reduced diagnostic/quick fix test icons to 34px
  • - Reduced wizard file-check icons to 36px
  • - Panel paddings reduced by 3px across the board
  • - Wizard step panel heights reduced by 20px
  • - All text in File Operations panel reduced by 2px
  • - Panel indicator text reduced by 2px (now 9px)
  • - Wizard step content spacing reduced by 6px between rows
  • **Fix Panel Size Optimization**
  • - All fix panel icons reduced by 15px (75px → 60px main icon)
  • - Header text: 18px → 14px
  • - Body text: 13px → 11px (description, steps, notes)
  • - Section titles: 20px → 16px (h2), 14px → 12px (h3)
  • - Button text: 14px → 12px
  • - All padding reduced by 2-4px throughout
  • - Step number badges: 32px → 26px
  • - Notes sections padding: 15px/20px → 13px/18px
  • - Footer buttons: 8px/24px → 6px/20px padding
  • - Much more compact and space-efficient panels
  • **Layout Fixes**
  • - Fixed File Operations panel toggle (now opens/closes properly with display: flex)
  • - Tab content height now calc(100vh - 290px) to not go under console panel
  • - Properly accounts for collapsed console height (50px)
  • - Content scrollable within proper bounds
  • - Wizard accordion height reduced to 560px
  • **Icon Swapping**
  • - Swapped Generate @2x and Theme Variants icons order
  • - Now: Resize → Generate @2x → Theme Variants (logical workflow)
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Theme Variants Implementation**
  • - Uses batchPlay commands from user-recorded Photoshop action
  • - Color overlay with solidFill layer effect
  • - Rasterize layer style to flatten effect
  • - Revert to original between dark/light variants
  • - Close document without saving to preserve originals
  • - Smart hasBeenRun flag prevents button showing after completion
  • - Resets flag when panel reopens for reusability
  • **Manifest Injection Architecture**
  • - Smart icon file detection with pattern matching
  • - Separates panel icons (panel-*) from root icons
  • - Generates proper icon arrays for entrypoints and root
  • - Auto-detects plugin type from existing manifest
  • - Form validation with helpful format hints
  • - Custom form HTML injected into fix panel body
  • - Event listener on Generate button triggers manifest write
  • **Multi-line Manifest Solution**
  • - Documented safe pattern: Read → Parse → Modify → Write
  • - Avoids cursor position issues and file token invalidation
  • - Uses JSON.parse() and JSON.stringify() for structure manipulation
  • - No raw text slicing/insertion fragility
  • - Guarantees clean JSON output with proper formatting
  • ### 📝 DOCUMENTATION
  • **New Documents**
  • - `_support/doc/multi_line_manifest.txt` - Safe pattern for JSON file manipulation in UXP
  • - Explains Read→Parse→Modify→Write approach
  • - Covers cursor position preservation in textareas
  • - Best practices for JSON structure modification

Version 1.0.6 Major

2026-01-18
  • ### ✨ NEW FEATURES
  • **SVG to PNG Converter - COMPLETE**
  • - Interactive selection dialog with checkboxes for each SVG file found in icons folder
  • - User selects which SVGs to convert (prevents converting UI SVGs meant for app interface)
  • - Opens each selected SVG in Photoshop, saves as 24-bit transparent PNG, closes document
  • - Original SVG files remain untouched
  • - Custom SVGConverterPanel class with checkbox UI
  • - File list scrollable (max 200px) for many files
  • - Orange accent color matching app theme
  • - Manual alternative instructions included
  • **Add Alpha Channel Fix - COMPLETE**
  • - Informational-only fix panel (no automation)
  • - Explains that automation isn't possible without knowing design intent
  • - Reassures users their files are probably already 24-bit
  • - Provides step-by-step manual verification and fix process
  • - Points users to SVG→PNG converter as better alternative
  • - Clear instructions for checking RGB mode, transparency, and proper PNG export
  • ### 🎨 UI ENHANCEMENTS
  • **SVG Selection Dialog**
  • - Light grey filenames (#cccccc) for better readability
  • - Darker background (rgba(0,0,0,0.3)) for unchecked items
  • - Unchecked items show at 40% opacity with darker grey text (#666666)
  • - Checked items show at 100% opacity with full brightness
  • - Smooth transitions when toggling checkboxes
  • - Used `!important` to override inherited panel styles
  • **Fix Panel Behavior**
  • - X close button and Close button both clear selected state from fix icon
  • - Tick removed from fix button when panel closes (via X or Close)
  • - Form fields hidden when dialog opens
  • - Consistent behavior across all fix panels
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Code Architecture**
  • - Custom panel class extends fix panel system with checkbox functionality
  • - Reusable pattern for future multi-selection fixes
  • - Event listeners properly wired in script.js
  • - CSS scoped to avoid conflicts with parent panel styles
  • ### 📝 FILES MODIFIED
  • - `lib/toolkit/repairs/convert-svg-to-png.js` - Complete rewrite with selection UI
  • - `lib/toolkit/repairs/add-alpha-channels.js` - Complete rewrite as informational panel
  • - `lib/ui/fix-panel.js` - Added selected state clearing on hide
  • - `script.js` - Added event listeners for SVG→PNG and Add Alpha fixes
  • - `styles.css` - Added SVG selection container styles with proper color overrides
  • - `lib/core/version.js` - Updated to 1.0.6

Version 1.0.5 Major

2026-01-18
  • **Generate All Icon Variants Fix - COMPLETE**
  • - Auto-generates all 4 required UXP icon sizes from 48x48 base file
  • - Creates: filename@2x.png (48x48), filename@1x.png (24x24), panel-filename@2x.png (46x46), panel-filename@1x.png (23x23)
  • - Saves directly to icons folder (creates folder if needed)
  • - Uses UXP file system API for reliable file operations
  • - Automatic revert between each resize operation to maintain quality
  • - Closes document after completion to trigger button hide
  • - Button only appears when 48x48 document is open
  • - Full console logging shows progress for each variant
  • ### 🎨 UI ENHANCEMENTS
  • **Quick Fixes Toolbar Reorganization**
  • - Reordered fix icons for logical workflow:
  • - Row 1: Format Conversion (SVG→PNG, Convert RGB, Add Alpha) - fix issues first
  • - Row 2: Auto-Generation (Resize, Theme Variants, Generate @2x) - create variants second
  • - SVG to PNG moved to first position in format conversion row
  • **Fix Panel Instructions**
  • - Added manual alternative instructions to Resize Icons fix
  • - Added manual alternative instructions to Generate All Variants fix
  • - Consistent instruction format across all fix panels
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **File Operations**
  • - UXP file system integration for creating files in icons folder
  • - Proper error handling with detailed error messages
  • - Uses Photoshop doc.saveAs.png() instead of complex batchPlay save commands
  • - Bicubic Sharper interpolation for high-quality downsampling
  • - Document close operation ensures proper button state update
  • **Code Quality**
  • - Better error messages (handles undefined error objects)
  • - Improved folder selection logic (project folder → icons subfolder)
  • - Full console error logging for debugging
  • ### 🐛 BUG FIXES
  • **Generate @2x Fix**
  • - Fixed "Run Fix" button not disappearing after completion (closes document)
  • - Fixed folder.createFile error (switched to proper UXP API)
  • - Fixed undefined error messages in catch blocks
  • - Fixed files saving to wrong location (now saves to icons folder)

Version 1.0.4 Major

2026-01-18
  • ### ✨ NEW FEATURES
  • **Report Panel System**
  • - Comprehensive test results storage and display
  • - Report overlay with pass/fail/warning counts
  • - Save report to file functionality using UXP file system API
  • - Empty state display when no tests run yet
  • - Report accessible via report.svg icon next to Run Test button
  • - Summary counts with status-based result grouping
  • **Fix Panel System**
  • - Reusable overlay panel for fix instructions and actions
  • - Dynamic "Run Fix" button based on document conditions
  • - Real-time monitoring (every 2 seconds) of document state
  • - Smart button behavior (hideAfterRun property)
  • - Close button as SVG icon
  • **Automated Fix Tools**
  • - Convert Grayscale to RGB mode
  • - Converts grayscale PNG to RGB mode and saves
  • - Button visible only when document open AND in grayscale mode
  • - Supports batch workflow (convert multiple files)
  • - Resize Icons to 48x48
  • - Handles non-square images by centering on square canvas first
  • - Resizes to 48x48 (largest icon size for quality)
  • - Button visible only when document open AND NOT already 48x48
  • ### 🎨 UI ENHANCEMENTS
  • **Overlay Panels**
  • - Fix/Report overlays hide form elements when open
  • - Tooltips hide when overlays open, reappear when closed
  • - Text sizes reduced: title 20px, description/steps 13px
  • - Print icon enlarged to 40px
  • - Report and fix panels z-index 2000 (above tooltips at 1001)
  • **File Operations Panel**
  • - Hidden by default (toggle to show)
  • - Open panel icon indicates expandable state
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Fix Integration**
  • - Each fix in separate JS file in `lib/toolkit/repairs/`
  • - Fixes wire up to Photoshop batchPlay API
  • - executeAsModal pattern for Photoshop operations
  • - Automatic tick removal after successful fix action
  • **Report Integration**
  • - All diagnostic tests store results in report panel
  • - Test result parsing extracts pass/fail/warning counts
  • - Formatted text report export
  • ### 🐛 BUG FIXES
  • **Report Panel**
  • - Fixed tooltip persistence issue when overlays open
  • - Fixed test result parsing showing incorrect pass/fail counts
  • - Fixed report panel initialization location
  • **Diagnostic Tests**
  • - Better error handling for missing icons folder
  • - Improved error messages with actionable suggestions

Version 1.0.3 Major

2026-01-17
  • ### ✨ NEW FEATURES
  • **Complete Diagnostic Test Suite**
  • - Icon dimension validation (entrypoint 23x23, panel 23/24x24)
  • - SVG panel icon detection (UXP requires PNG for panels)
  • - Manifest path validation with @1x/@2x variant checking
  • - Comprehensive manifest validation (syntax + required fields + theme coverage)
  • **Centralized Version Management**
  • - Created `lib/core/version.js` as single source of truth
  • - Wired version into splash screen display
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Modular Test Architecture**
  • - Converted all diagnostic tests from monolithic script.js to modular lib structure
  • - All tests route through `lib/toolkit/diagnostic-tests.js`
  • - Each test wrapped in IIFE to avoid scope conflicts
  • - All tests use `currentProjectFolderEntry` for UXP file access
  • **Enhanced Path Validation**
  • - Manifest declares base name with scale array
  • - Validates @1x/@2x variants based on scale array
  • - Handles naming conventions correctly
  • **Improved Dimension Validation**
  • - Clarified entrypoint icons must be 23x23 (@1x)
  • - Plugin panel icons accept both 23x23 and 24x24 (@1x)
  • - Helpful notes when using alternate acceptable sizes
  • ### 🎨 UI ENHANCEMENTS
  • **Console Panel Improvements**
  • - Fixed console showing during splash screen
  • - Fixed console height (was only 50% of available space)
  • - Changed to hide only form fields when console open
  • - Auto-deselect test checkboxes after running
  • ### ⚙️ MAINTENANCE
  • **Code Cleanup**
  • - Removed legacy test code from script.js
  • - Replaced with comments pointing to lib files

Version 1.0.2 Major

2026-01-16
  • ### ✨ NEW FEATURES
  • **Additional Diagnostic Tests**
  • - @1x file pairing validation
  • - @2x file pairing validation
  • - Light/dark variant validation (filenames + manifest)
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Test Pattern Standardization**
  • - All tests provide clear RESULT summary lines
  • - Consistent error messaging with solution suggestions
  • - Unified IIFE pattern across all tests
  • ### 🐛 BUG FIXES
  • - Theme fallback test now skips SVG files (tested separately)
  • - @1x/@2x tests check for file existence, not dimensions

Version 1.0.1 Minor

2026-01-15
  • ### ✨ NEW FEATURES
  • **Alpha Channel Detection**
  • - Three-stage detection: PNG header → tRNS chunk → pixel sampling
  • - Detects "opaque alpha" problem (RGBA files that are 100% opaque)
  • - Checks if alpha channel is actually used vs just present
  • ### 🔧 TECHNICAL IMPROVEMENTS
  • **Modular Test Structure**
  • - Moved tests from script.js to `lib/toolkit/validators/icon-tests/`
  • - Created diagnostic routing system through diagnostic-tests.js
  • ### 🐛 BUG FIXES
  • - IIFE scope isolation prevents variable redeclaration errors
  • - Proper UXP file access using `currentProjectFolderEntry`

Version 1.0.0 Major

2025-12-29
  • ### 🎉 INITIAL RELEASE
  • **Core Diagnostic Engine**
  • - Project folder selection and scanning
  • - File structure validation (manifest, JS, HTML, CSS, icons)
  • - Console panel with filtering (info, warning, error, success, result)
  • **Grayscale PNG Detection**
  • - PNG header analysis (byte 25 color type detection)
  • - Identifies Grayscale (0), RGB (2), Indexed (3), Grayscale+Alpha (4), RGBA (6)
  • - Pixel-level fallback detection with compression tolerance
  • **UI Components**
  • - Splash screen with loading animation
  • - Project panel with file status indicators
  • - Diagnostic test panel with selectable tests
  • - Console output panel with message filtering
  • - Fix tools panel (placeholder)
  • **Architecture**
  • - Modular lib structure for core engines
  • - Diagnostic engine for logging and status tracking
  • - Console engine for message display and filtering
  • - Splash engine for startup experience
  • **Technical Details**
  • - Built for Adobe Photoshop UXP (Manifest v5)
  • - Minimum Photoshop version: 23.3.0
  • - Uses UXP storage API for file operations
  • - Implements PNG binary file header analysis
  • ---
  • ## Version Format
  • Versions follow [Semantic Versioning](https://semver.org/):
  • - MAJOR version for incompatible API changes
  • - MINOR version for new functionality (backward-compatible)
  • - PATCH version for bug fixes (backward-compatible)
  • ## Categories
  • - **✨ NEW FEATURES** - New functionality
  • - **🎨 UI ENHANCEMENTS** - Visual improvements
  • - **🔧 TECHNICAL IMPROVEMENTS** - Under-the-hood improvements
  • - **🐛 BUG FIXES** - Bug fixes
  • - **📋 DOCUMENTATION** - Documentation changes
  • - **⚙️ MAINTENANCE** - Code cleanup, refactoring
  • - **🔒 SECURITY** - Security improvements

SylentID

Here you can access everything related to SylentID, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started.

Video Tutorials for SylentID. All video appear in window apart from playlist.

Plugin not found.

ChronoWatch

Here you can access everything related to ChronoWatch, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started.

Video Tutorials for ChronoWatch. All video appear in window apart from playlist.

ChronoWatch - Version History

Version 1.0.2 Major

2025-11-21
  • ### Document-Project Validation System
  • **Priority: HIGH** - Implement when save/load controls are developed
  • **Issue**: Currently no validation when loading project data vs open document
  • - User saves project for "ProjectA_v1.psd"
  • - Later opens "ProjectA_v2.psd" but loads v1 project data
  • - Creates billing/tracking inconsistencies and data corruption
  • **Required Solution**:
  • - Document name validation overlay when loading saved projects
  • - Compare loaded project document name vs currently open document
  • - Warning modal: "Project was created for 'X.psd' but current document is 'Y.psd'. Continue anyway?"
  • - Smart matching for version suffixes (_v1, _v2, _final, etc.)
  • - Block loading if documents are completely mismatched
  • **Implementation Location**: Save/Load control panel elements
  • **Fallback**: Until XMP integration provides automatic document binding

Version 1.0.0 Major

2025-10-17
  • ### ✅ Analytics Implementation Complete
  • - **User Card Redesign**: Project title appears once above divider, users listed below without repetition
  • - **Activity Log Fixed**: Resolved timer state checking - now properly tracks tool usage when user timer runs
  • - **Cost Calculation System**: Fixed `calculateUserCost` function scope and cumulative totals
  • - **JSON Export for Manager**: Complete data format with tool usage, billing, and project details
  • - **Overall Analytics Panel**: Document metrics, workflow stats, and time tracking data
  • ### ✅ Statistics Implementation
  • - **Revision Number**: Auto-increments each time project timer starts (tracks work sessions)
  • - **Primary Tools**: Dynamically calculated from activity log - shows top 5 most used tools
  • - **Saved File Name**: Displays current Photoshop document name in analytics
  • - **Document-Specific Metrics**: All placeholder values replaced with real data sources
  • ### ✅ Bug Fixes & Cleanup
  • - **Project Deadline**: Removed hardcoded values, proper show/hide logic, starts at 0%
  • - **PS Timer Removal**: Eliminated irrelevant PS uptime from analytics Time Recap
  • - **Padlock Bug**: Fixed test code causing lock icon to appear before project creation
  • - **Console Cleanup**: Removed excessive debug logging for cleaner development experience
  • - **Tool Detection**: Fixed activity log by correcting timer instance references
  • ### ✅ Data Validation Improvements
  • - **Activity Log Parser**: Properly extracts tool data from HTML content for JSON export
  • - **Tool Usage Analytics**: Real-time calculation of most frequently used Photoshop tools
  • - **Manager Integration**: Complete export format matching ChronoWatch Manager specifications
  • ### ✅ Completed Features
  • #### 1. Core Uptime Tracking System
  • - **True Photoshop Uptime Tracking**: Uses `loadEvent: "startup"` to track actual Photoshop launch time
  • - **Persistent Session Storage**: Stores session start time in `ps-session-start.txt`
  • - **Extended Time Format**: Supports `HH:MM:SS` and `DDd HH:MM:SS` for sessions over 24 hours
  • - **Billing Compliance**: No manual adjustments possible - maintains client billing integrity
  • #### 2. Professional UI/UX
  • - **Rob Art Branding**: Consistent color scheme (#2D2D30 backgrounds, #e0e0e0 text, accent colors)
  • - **Dot Matrix LED Display**: Custom SVG backgrounds (350x40px) with subtle dot patterns (#3A3A3C)
  • - **Orbitron Font Integration**: Local font files for authentic digital clock appearance
  • - **Three-Tier Timer System**:
  • - Photoshop UpTime (Blue #2196F3)
  • - Project Time (Green #14af22)
  • - User Time (Orange #FF6B35)
  • #### 3. Advanced Animations
  • - **Flashing Colon Dividers**: CSS animations make `:` separators flash independently
  • - **Connection Status**: Green dot with pulsing animation (currently CSS-based, needs JS fallback)
  • - **Professional Styling**: Bold Orbitron font (weight 900) for maximum visibility
  • #### 4. Billing Integration
  • - **Live Earnings Calculation**: Responsive billing boxes showing hours and total cost
  • - **Hourly Rate Display**: Shows billable rate ($75.00/hr example)
  • - **Activity Logging**: Text box for recording Photoshop activities
  • #### 5. Smart Input System
  • - **UXP-Compatible Dropdowns**: Solved z-index layering issues with expandable panels
  • - **Smart Combo Boxes**: Project/user/job title dropdowns with auto-complete and history
  • - **Data Persistence**: Stores dropdown options for future use
  • - **External Arrow Controls**: Properly positioned dropdown arrows outside input fields
  • #### 6. Project Management UI
  • - **Custom Project Icon**: Lightbulb with brush filament (creative workflow focused)
  • - **Bottom Controls Integration**: Project management button alongside user controls
  • - **Modal Project Setup**: Clean overlay for entering project details
  • - **Enhanced Icon Sizing**: Increased bottom control icons from 22px to 28px for better visibility
  • #### 7. Technical Implementation
  • - **UXP Manifest v5**: Proper plugin configuration with startup load event
  • - **Background Processing**: Plugin loads automatically when Photoshop starts
  • - **Fallback Systems**: Graceful handling of storage/API failures
  • - **Debug Logging**: Comprehensive console debugging for troubleshooting
  • ### 🔧 Recent Fixes & Improvements (Dec 2024 - Jan 2025)
  • #### ✅ UXP Input Field Issues Resolved
  • - **Fixed**: Dropdown arrows not displaying properly due to z-index limitations
  • - **Solution**: Implemented expandable panel system instead of overlay dropdowns
  • - **Result**: Clean, functional dropdown menus with external arrow controls
  • #### ✅ Project Management Enhanced
  • - **Added**: Custom project icon (lightbulb-brush design for creatives)
  • - **Added**: Project management button in bottom controls
  • - **Improved**: Icon sizing increased from 22px to 28px for better visibility
  • - **Fixed**: Button order in modal (Start Timer left, Cancel right)
  • #### ✅ Collapsible Timer System (Jan 2025)
  • - **Implemented**: Full collapsible/expandable timer functionality
  • - **Features**: Toggle icons, collapsed bars with real-time updates
  • - **Color-coded**: Blue (uptime), Green (project total), Orange (user activity)
  • - **Real-time Updates**: Collapsed timers update every second, not frozen at collapse time
  • - **Smart Display**: Green = TOTAL TIME, Orange = current user activity row time
  • #### ✅ Activity Detection & Logging System
  • - **Photoshop Tool Detection**: Uses `core.getActiveTool()` API for real-time tool tracking
  • - **Activity Mapping**: Intelligent categorization (Painting, Photography, etc.)
  • - **Activity Log**: Scrollable log with chronological tool usage history
  • - **User Activity Rows**: Multi-user project tracking with time display
  • - **Auto-pause/Resume**: 7-minute idle detection (needs optimization to 2-3 minutes)
  • #### ✅ Currency System Implementation
  • - **EUR Default**: Clean €20, €40, €60, €80, €100, €120 increments
  • - **Smart Formatting**: Auto-adds € symbol to new entries (e.g., "25" → "€25")
  • - **Migration System**: Automatically replaces old mixed currency data
  • - **Consistent Display**: EUR symbols throughout interface and activity rows
  • - **Future-ready**: Architecture supports language-based currency defaults
  • #### ✅ Reset Functionality & UI Polish
  • - **"Nuke Button"**: Complete system reset with confirmation modal
  • - **Reset All**: Clears timers, activity log, user rows, totals with warning
  • - **UI Refinements**: Fixed hover states, alignment issues, currency indicators
  • - **Modal System**: Following UI patterns with proper z-index management
  • ### 🔧 Known Issues Needing Future Fix
  • #### Performance Issues (CRITICAL - Discovered Jan 2025)
  • - **Problem**: Plugin becomes sluggish after 1+ hour of continuous use
  • - **Cause**: Multiple timer intervals, DOM updates, memory leaks from SVG rendering
  • - **Impact**: Affects long creative sessions, primary use case
  • - **Fix Needed**: Consolidate timers, implement cache clearing, optimize DOM updates
  • #### Activity Detection Limitations
  • - **Problem**: Auto-resume only works with panel clicks, not actual PS activity
  • - **Current**: Mouse/stylus/keyboard in Photoshop doesn't resume timer
  • - **Impact**: Users must click panel to resume after 7-minute auto-pause
  • - **Fix Needed**: Hook into Photoshop API events, reduce auto-pause to 2-3 minutes
  • #### Connection Status Animation
  • - **Problem**: CSS `animation` property not working in current UXP environment
  • - **Status**: Green dot shows "Connected" but doesn't pulse/flash
  • - **Fix Needed**: Implement JavaScript-based animation using `setInterval`
  • #### Orange Timer Sync Issue
  • - **Problem**: Orange collapsed timer occasionally loses sync after 5-6 seconds
  • - **Status**: Intermittent, needs debugging
  • - **Priority**: Low (cosmetic only)
  • ### 🚧 Deferred for Post-Holiday Development
  • #### Project & User Timer Functionality
  • The remaining two timers require complex implementation:
  • - Manual start/stop controls
  • - Project selection/management system
  • - User switching capabilities
  • - Advanced data persistence
  • - Export functionality
  • - Integration with billing system

iSTŌR

Here you can access everything related to iSTŌR, including its FAQ on the left and full documentation on the right. You’ll also find the latest changelog and a direct link to the plugin’s tutorial on the Rob Art YouTube channel. Select the item you need to get started.

Video Tutorials for iSTŌR. All video appear in window apart from playlist.

copyright © rob art | illustration 2026. all rights reserved.

You cannot copy content of this page