Commit Graph
34 Commits
Author SHA1 Message Date
27db6ef197 fix: create each store bucket lock only once
The per-bucket lock was inserted without synchronization. Two first
writers could take different locks and overwrite each other's preset
file. Lock creation now happens under a guard lock.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:11:37 +00:00
84bd2a4cda test: stop store tests from writing fixtures into the repo
test_store replaced the folder_paths mock after store.py had imported it.
Route tests then configured the replacement, and store writes went to a
MagicMock path that had been committed. Both suites now share the mock
from conftest and land files in a temp directory.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:10:54 +00:00
f87d64c3b1 fix: keep saved scene layout when adding it to the canvas
Additive scene load nudged each region further than the one before it, so
a saved composition was sheared. Every region now moves by the same offset
and is clamped back inside the canvas.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:10:03 +00:00
a35ebb7d3f fix: keep color palettes inside the Ideogram 4 caption schema
The caption verifier accepts only uppercase #RRGGBB, at most 16 style
colors and 5 per element. Shorthand #RGB is expanded, other values are
dropped, and a null palette no longer crashes prompt assembly.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:08:32 +00:00
6a050339f7 fix: normalize inverted and non-numeric Ideogram bboxes
Pasted captions with swapped or non-numeric bbox values produced negative
or NaN regions, so the editor could not select them. Coordinates are now
swapped and clamped to the 0-1000 range from the Ideogram 4 caption schema,
and unreadable bboxes keep the non-overlapping grid slot for that element.
Saved regions with NaN coordinates are dropped on restore.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:07:29 +00:00
42bdd7eaf3 fix: report background image save failures in the console
Preview BG Update logged save and notify failures only when BG_DEBUG was
set, so the console stayed quiet while the README told users to look there.
Warnings now print for a missing image, an empty or invalid guid, a tensor
that cannot be converted, a disk write error, and a failed editor push.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:05:18 +00:00
cursor[bot] c35778b8f7 Merge pull request #6 from by-ae/cursor/fix-comfy-api-dependency-3cca
Fix: correct comfy_api.latest dependency documentation
2026-10-25 21:16:16 +00:00
by-aeandCursor Agent 07291310de fix: correct comfy_api.latest dependency documentation
comfy_api.latest.io is part of ComfyUI core, not from ComfyUI-KJNodes.
Restore accurate installation instructions and update ImportError message
to indicate a recent ComfyUI version is needed.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-25 21:15:01 +00:00
cursor[bot] 4378926ac7 Merge PR #5: Security, validation, and UX improvements 2026-10-25 21:10:12 +00:00
by-aeandCursor Agent 924e4908b4 fix: prevent region overlap when bbox is missing
When importing captions with missing/invalid bbox data, elements are now
arranged in a 4-column grid (row/column layout) instead of a diagonal
pattern that overlapped after 6 elements.

- Change fallback positioning from modulo-6 diagonal to row/column grid
- Update both Python backend and JavaScript editor
- Add comprehensive test for 12+ elements with no overlap
- Fixes visual collision when pasting captions with many unbounded regions

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-25 20:59:42 +00:00
by-aeandCursor Agent 0ff49ca24e docs: clarify ComfyUI-KJNodes dependency requirement
- Add clear import error message when comfy_api.latest is missing
- Update README installation instructions to require KJNodes first
- Update troubleshooting section with dependency check
- Remove misleading statement that KJNodes is not needed

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-25 20:58:11 +00:00
by-aeandCursor Agent c5ec465cd7 fix: add input validation and payload size limits to HTTP routes
- Add MAX_PAYLOAD_SIZE constant (10 MB) to prevent memory exhaustion
- Validate store names against path traversal and special characters in routes layer (defense in depth)
- Check Content-Length header and body size before processing
- Return HTTP 413 for oversized payloads
- Add comprehensive test coverage for validation edge cases

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-25 20:57:26 +00:00
cursor[bot] 1a4478889b Merge pull request #4 from by-ae/cursor/bug-fixes-unicode-concurrency-js-errors-0c57
Fix Unicode support, concurrent writes, and JS error handling
2026-10-24 20:56:22 +00:00
by-aeandCursor Agent 5063df5eb1 docs: document Unicode support, troubleshooting, and development setup
- Add Unicode character support info with examples (角色, Персонаж, Émilie)
- Document preset naming requirements clearly
- Add troubleshooting section for save failures with browser console guidance
- Add Development section with test running and linting instructions
- Improve error debugging guidance for users

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 20:55:05 +00:00
by-aeandCursor Agent 23c362f2da ci: add ESLint to JS validation and fix linting issues
- Add package.json with ESLint configuration for JS code quality checks
- Configure ESLint with browser environment and ES2021 features
- Add npm install and lint steps to CI workflow
- Fix unused parameter warnings in ideogram4_prompt_builder_enhanced.js and utility.js
- Update .gitignore to exclude node_modules, Python cache, and build artifacts

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 20:54:28 +00:00
by-aeandCursor Agent e99c2b8fe8 fix: improve JS error handling visibility in editor
- Log errors to console when parsing elements_data or style_palette_data fails
- Show alerts and log errors when store operations (save/load scenes, characters, objects) fail
- Log clipboard access failures during import instead of silently ignoring
- Replace empty catch blocks with proper error logging for better debugging

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 20:53:13 +00:00
by-aeandCursor Agent 3a1dcd649d fix: support Unicode names and prevent concurrent write corruption in store
- Allow Unicode letters/numbers in preset names (e.g. 角色, Персонаж, Émilie)
- Add thread-safe locking per bucket to prevent race conditions during concurrent writes
- Use mkstemp() for atomic temp file creation to avoid tmp file name collisions
- Add tests demonstrating the bugs and verifying the fixes

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 20:52:01 +00:00
AE 249e4d7e95 Merge pull request #3 from by-ae/cursor/store-robustness-and-delete-api-8f8c
Fix store robustness and add DELETE API endpoint
2026-10-24 19:58:12 +10:00
by-aeandCursor Agent b3e2e53e66 docs: document store location, corrupt file recovery, and API endpoints
- Add store location in troubleshooting section
- Explain corrupt file backup behavior with timestamps
- Add API section with GET, PUT, and DELETE endpoint documentation

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 09:57:03 +00:00
by-aeandCursor Agent 048e0110c8 test: add coverage for corrupt file handling and DELETE endpoint
- Test corrupt JSON creates backup and returns empty bucket
- Test corrupt file does not affect other buckets
- Test save works after corrupt file recovery
- Test DELETE success, 404 not found, invalid bucket/name 400
- All existing tests continue to pass

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 09:56:58 +00:00
by-aeandCursor Agent 3956165b25 feat: add DELETE endpoint for store entries
- Add DELETE /byae/ideogram/stores/{bucket}/{name} route handler
- Return 400 for invalid bucket/name, 404 for not found, 200 on success
- Mirror error handling pattern from PUT route
- Add deleteStoreEntry() helper in ideogram4_shared.js
- Use same fetch/timeout/error-handling pattern as saveStoreEntry

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 09:56:53 +00:00
by-aeandCursor Agent 41a54fa376 fix: handle corrupt JSON files in store with backup recovery
- Add error handling for JSONDecodeError and UnicodeDecodeError in _read_json
- Move corrupt files to timestamped backup (e.g. characters.json.corrupt-1234567890)
- Treat corrupt bucket as empty, allowing other buckets to continue working
- Clean up temp files if _write_json fails
- Log warnings for corrupt file recovery and errors for backup failures

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 09:56:46 +00:00
AE 23577e9300 Merge pull request #2 from by-ae/cursor/test-improvements-590d
Add comprehensive testing, bug fixes, and CI improvements
2026-10-24 07:23:41 +10:00
by-aeandCursor Agent 223ec7e15b Add comprehensive test coverage for routes and nodes
Tests cover:
- routes.py: Input validation, path traversal protection, JSON
  error handling, GUID sanitization (12 new tests)
- nodes/ideogram4_nodes.py: Prompt assembly, bbox normalization,
  palette handling, JSON serialization, input coercion (28 new tests)

All tests use mocks via conftest.py to avoid ComfyUI dependencies.
Tests import the repo as a proper package so routes.py relative
imports work unchanged.

CI: Install aiohttp for route tests.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-23 21:16:56 +00:00
by-aeandCursor Agent 10176bc713 Add fetch timeout and improved error handling in JS
Add 5s timeout to fetch calls to prevent UI hangs on slow/failed
network requests. Timeout support degrades gracefully for older
browsers (AbortSignal.timeout check). Existing error handling
ensures empty store fallback on failure.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-23 21:15:18 +00:00
by-aeandCursor Agent ac895b1de8 store: fsync preset JSON before atomic replace
Ensures data is written to disk before the atomic rename. The write
was already atomic (tmp + os.replace), but adding fsync prevents
preset corruption if the process is killed between json.dump and
the file system sync.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-23 21:15:11 +00:00
cursor[bot] 1081fd923d Merge pull request #1 from by-ae/cursor/improvements-batch-622f
Quality improvements: error handling, tests, CI, and documentation
2026-10-22 21:54:38 +00:00
by-aeandCursor Agent 972828e095 Add input sanitization and error handling for API routes
Harden route handlers against malformed requests:

Store entry route (PUT):
- Validate name is non-empty and under 128 chars
- Verify request body is a JSON object, not array or primitive
- Return clear error messages for each validation failure

Background stat route (GET):
- Handle os.path.getmtime() failures (permissions, race conditions)
- Log file stat errors for debugging
- Return appropriate HTTP status codes

Prevents crashes from malicious or malformed API requests.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:52:55 +00:00
by-aeandCursor Agent 6b459d3211 Add graceful error handling for missing ComfyUI dependencies
Wrap imports in try-except blocks to provide clear error messages:
- Node imports: log helpful message if ComfyUI dependencies missing
- PromptServer import: log warning if server unavailable
- Export empty mappings instead of crashing ComfyUI startup

This allows the extension to fail gracefully when dependencies
are unavailable (e.g., during testing or accidental standalone
execution) while still providing diagnostic information.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:52:20 +00:00
by-aeandCursor Agent 7487718e4c Improve README with usage guide and troubleshooting section
Add practical documentation that helps users:

Usage section:
- Where to find nodes in the menu
- How to connect the nodes
- What output to expect

Troubleshooting section:
- Nodes not appearing (installation issues)
- Route/store errors (usually harmless)
- Background image not updating (connection issues)
- Workflow compatibility (breaking changes prevention)

Reduces user friction and provides self-service solutions
for common setup problems.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:51:55 +00:00
by-aeandCursor Agent 42ca7fc9eb Add GitHub Actions CI workflow for automated testing
Implement CI pipeline that runs on push and pull requests:

Python checks (3.10, 3.11, 3.12):
- Lint with flake8 (syntax errors and code quality)
- Compile all Python modules
- Run unit test suite

JavaScript checks:
- Validate syntax of all JS files with Node.js

This ensures code quality and catches issues before they reach users.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:51:31 +00:00
by-aeandCursor Agent 71cccd9504 Add comprehensive unit tests for store module
Implement 10 unit tests covering:
- Name validation (valid and invalid patterns)
- Save, load, and delete operations
- Multiple entries and overwrites
- Empty buckets and non-existent entries
- Invalid bucket names
- Persistence across reloads

Tests use unittest (stdlib) and mock folder_paths dependency,
ensuring the store logic is reliable without ComfyUI runtime.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:51:16 +00:00
by-aeandCursor Agent 4424d858dd Add robust error handling for malformed JSON inputs
Prevent crashes when users provide invalid JSON or malformed bbox data:
- Catch TypeError and ValueError in addition to JSONDecodeError
- Handle non-numeric bbox coordinates gracefully with try-except
- Fall back to default positioning when bbox parsing fails

This protects users from workflow crashes due to corrupted or
hand-edited JSON input.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:50:38 +00:00
by-aeandCursor feb8947b50 Initial release of Ideogram 4 Prompt Builder Pro.
Fork of KJNodes' Ideogram 4 Prompt Builder with stores, multi-select, scene save/load, live background preview, and separate width/height outputs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 17:27:52 +10:00