Commit Graph
38 Commits
Author SHA1 Message Date
Æmotion Studio 128e19a9b5 Merge pull request #49 from AEmotionStudio/perf/batch-processing-26794793800705711
⚡ Bolt: Optimize batch image processing
2026-01-23 18:47:13 -08:00
google-labs-jules[bot] 1697364e13 🎨 Palette: Improve overwrite_last tooltips
Explicitly warn users that 'overwrite_last' is negated by 'add_time'/'add_date' inputs in both image and video nodes. Also includes a specific warning for video nodes regarding Discord playback issues when disabling 'add_time'.
Updated tests to verify the presence of these warnings.
2026-01-24 01:23:56 +00:00
google-labs-jules[bot] ed2d1388ec Optimize image processing using batched tensor transfer 2026-01-24 01:19:49 +00:00
Æmotion Studio de5d753cdf Merge pull request #47 from AEmotionStudio/sentinel-symlink-fix-14452187009841973612
🛡️ Sentinel: Fix Symlink Overwrite Vulnerability
2026-01-22 18:48:22 -08:00
google-labs-jules[bot] 523fe68f6b Address PR review feedback: validation for non-existent dirs
- Updated `shared/path_utils.py`: `validate_path_is_safe` now walks up the directory tree to verify the first existing ancestor is not a symlink, preventing bypasses via non-existent intermediate directories.
- Updated `tests/test_symlink_attack.py`: Added regression test `test_non_existent_directory_symlink_bypass`.
2026-01-23 02:38:20 +00:00
google-labs-jules[bot] ad360061d7 Address PR review feedback: robust symlink validation
- Updated `shared/path_utils.py`: `validate_path_is_safe` now checks for symlinks in parent directories by verifying realpath vs abspath mismatch.
- Updated `nodes/video_node.py`: Added `validate_path_is_safe` check to the VHS format path recalculation block to prevent bypass.
- Updated `tests/test_symlink_attack.py`: Added regression tests for parent directory symlinks and VHS format bypass.
2026-01-23 02:05:40 +00:00
Æmotion Studio 98bbda1f94 Merge pull request #46 from AEmotionStudio/bolt/optimize-pil-batch-transfer-12357379419567633300
⚡ Bolt: Optimize PIL video generation with batched GPU-CPU transfer
2026-01-22 18:02:20 -08:00
google-labs-jules[bot] 0e655a4303 Fix symlink overwrite vulnerability in custom nodes
- Implemented `validate_path_is_safe` in `shared/path_utils.py` to reject writing to symlinks.
- Applied validation in `nodes/video_node.py` and `nodes/image_node.py` before file operations.
- Added regression test `tests/test_symlink_attack.py`.
- Updated sentinel journal with new vulnerability pattern.
2026-01-23 01:37:51 +00:00
google-labs-jules[bot] ec09d32cf6 feat: optimize PIL video generation with batched GPU-CPU transfer
Uses `process_batched_images` generator in the PIL fallback path to reduce GPU-CPU transfer overhead by processing frames in batches (default 20) instead of individually.

Also adds `tests/test_pil_batch_optimization.py` to verify the batch processing logic.
2026-01-23 01:22:23 +00:00
google-labs-jules[bot] 9c8e73e578 🎨 Palette: Improve tooltips for safety and clarity
- Added safety warnings for `overwrite_last` option in Image and Video nodes.
- Clarified `resize_method` dependency in Image node tooltip.
- Added actionable instructions for `github_token` setup in Base node tooltip.
- Updated `tests/test_ux_tooltips.py` to verify new tooltip content.
2026-01-23 01:12:45 +00:00
google-labs-jules[bot] 89def34b23 UX: Add critical warning to video timestamp tooltip
Adds a critical warning to the `add_time` tooltip in `DiscordSendSaveVideo`
to inform users that disabling this option can cause single-frame playback
issues on Discord.

This moves the warning from the README into the UI where users make the
configuration choice, preventing potential bugs.

Includes regression test in `tests/test_ux_tooltips.py`.
2026-01-22 01:34:09 +00:00
AEmotionStudio 4b2a99e5f5 Skip test_save_images_sanitization when torch unavailable
This test requires real PyTorch for tensor iteration which isn't available
in CI due to module mocking. The test runs correctly in local dev with torch.
2026-01-21 01:19:35 -08:00
AEmotionStudio 766168ec1b Fix remaining CI test failures
- test_media.py: Use Python math.log2 instead of numpy to avoid mock issues
- test_image_node_sanitization.py: Patch tensor_to_numpy_uint8 and Image.fromarray
  to properly handle mocked torch tensors
2026-01-21 01:17:34 -08:00
AEmotionStudio 87112b8b2a Fix CI tests: Improve test isolation and mock handling
- Add numpy to requirements-nodes.txt
- Create conftest.py for test configuration
- Fix test_numpy_subprocess.py to import real numpy before any mocking
- Fix test_media.py to import real numpy early
- Fix test_image_node_sanitization.py to use MockTensor instead of torch.zeros
2026-01-21 00:46:02 -08:00
AEmotionStudio b63dac6cad Refactor Image and Video nodes to inherit from BaseDiscordNode 2026-01-20 23:41:39 -08:00
google-labs-jules[bot] c1b1e2497c Fix: Sanitize webhook tokens from error messages
- Added `sanitize_token_from_text` helper to `shared/discord/webhook_client.py`.
- Updated `DiscordWebhookClient._send_with_retry` to sanitize `response.text` before returning it in error details.
- Updated `nodes/image_node.py` and `nodes/video_node.py` to sanitize `response.text` before printing error messages.
- Added regression test `tests/test_webhook_security.py`.

This prevents sensitive Discord webhook tokens from being leaked in ComfyUI console logs when the Discord API returns an error (e.g. 400 Bad Request) that echoes the request URL.
2026-01-21 01:26:33 +00:00
AEmotionStudioandClaude Opus 4.5 436b773bd8 chore: implement phase 6 - final cleanup
- Remove unused imports from nodes (time, torch, requests, itertools)
- Move uuid import to top-level in bot/bot.py
- Add 4 new test files with 86 tests for shared utilities
- Update CHANGELOG.md with version 2.0.0 refactoring summary
- Update REFACTOR_PRD.md to mark Phase 5 complete

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 10:20:51 -08:00
AEmotionStudioandClaude Opus 4.5 a208cd482b refactor(phase2): extract shared utilities and reduce node duplication
- Create shared/filename_utils.py for date/time/dimension filename building
- Create shared/path_utils.py for output directory handling
- Create shared/discord/message_builder.py for Discord message construction
- Create shared/discord/cdn_extractor.py for CDN URL extraction
- Refactor image_node.py to use shared utilities (-161 lines, 16.3%)
- Refactor video_node.py to use shared utilities (-361 lines, 23.1%)
- Fix setup_logging missing from logging_config.py
- Fix test imports to use new module paths (nodes.* instead of discord_*_node)
- Total reduction: 522 lines (20.5%), exceeding PRD target of ~200 lines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:33:10 -08:00
AEmotionStudio 852840dcae refactor(core): restructure project into shared/ and nodes/ modules 2026-01-19 22:02:47 -08:00
Æmotion Studio 64179a3170 Merge pull request #32 from AEmotionStudio/bolt-remove-redundant-sanitization-5640104545261640127
⚡ Bolt: Remove redundant sanitization in save_images
2026-01-19 19:57:10 -08:00
google-labs-jules[bot] 1a84f62ec1 ⚡ Bolt: Fix test input to include github_token
- Updated `tests/test_image_node_sanitization.py` to include `github_token` in test inputs.
- Verified test now correctly covers github token sanitization.
2026-01-20 03:05:28 +00:00
google-labs-jules[bot] d7b20fc717 ⚡ Bolt: Fix test to not swallow assertions
- Updated `tests/test_image_node_sanitization.py` to avoid bare `try...except` that swallowed `AssertionError`.
- Verified the test fails correctly when sanitization is broken.
2026-01-20 02:34:53 +00:00
google-labs-jules[bot] 5c6f15469d ⚡ Bolt: Remove redundant metadata sanitization in save_images
- Removed redundant calls to `sanitize_json_for_export` in `discord_image_node.py` loop.
- Verified ~33ms performance gain per batch via benchmark.
- Added regression test `tests/test_image_node_sanitization.py`.
2026-01-20 01:45:03 +00:00
google-labs-jules[bot] 83f0059720 Fix temporary file leak in discord_video_node.py 2026-01-20 01:23:20 +00:00
Æmotion Studio 7cc72606a5 Merge pull request #28 from AEmotionStudio/bolt-video-memory-optimization-3922534104789050158
⚡ Bolt: Zero-copy video frame writing
2026-01-18 19:16:33 -08:00
google-labs-jules[bot] 8be6270aef fix(video): ensure contiguous arrays for both audio and video paths
- Fix potential BufferError in video frame writing path by enforcing C-contiguity with np.ascontiguousarray
- Add regression tests for non-contiguous array writing to Popen.stdin
- Rename variables for clarity (images_bytes -> image_chunks)
- Ensure cross-platform compatibility in tests
2026-01-19 03:06:07 +00:00
google-labs-jules[bot] b944db244e fix(video): ensure contiguous array for audio subprocess and rename var
- Fix BufferError when passing non-contiguous transposed audio array to memoryview/subprocess by using np.ascontiguousarray
- Rename 'images_bytes' to 'image_chunks' to better reflect that it contains numpy arrays, not bytes objects
- Improve test portability by using sys.executable instead of 'cat'
2026-01-19 02:39:37 +00:00
google-labs-jules[bot] d99aa60623 ⚡ Optimize video frame writing to ffmpeg
Avoids unnecessary memory copying by passing numpy arrays/memoryviews directly to subprocess stdin instead of creating intermediate bytes objects. This reduces memory pressure and allocation overhead when processing high-resolution video frames.
2026-01-19 02:15:43 +00:00
google-labs-jules[bot] e1f9b50c3d Sentinel: Fix GitHub repo traversal vulnerability
Prevent arbitrary file write and repo traversal by strictly validating
`github_repo` and `file_path` inputs in `update_github_cdn_urls`.

Added `validate_github_repo` and `validate_file_path` functions to
enforce strict whitelisting of characters and reject path traversal sequences.
Added comprehensive unit tests in `tests/test_github_validation.py`.
2026-01-19 01:25:52 +00:00
google-labs-jules[bot] 1c9ab10e16 security: fix token leakage in API error handling
- Sanitize `DiscordWebhookClient` exception messages to redact webhook tokens.
- Sanitize GitHub API response text in error messages to prevent token leakage.
- Update `tests/test_utils.py` with mocks and new security test cases.
- Record security learning in `.jules/sentinel.md`.

This addresses potential credential exposure in logs and error messages.
2026-01-18 01:36:51 +00:00
google-labs-jules[bot] cd2052757a Enforce HTTPS for Discord webhooks
This change updates the `validate_webhook_url` function to strictly enforce the use of `https://` for Discord webhook URLs. This prevents the accidental transmission of sensitive webhook tokens over unencrypted HTTP connections.

Security Impact:
- Prevents potential Man-in-the-Middle (MitM) attacks from capturing webhook tokens if a user inadvertently copies an `http://` URL (e.g. from a proxy or non-standard source).
- Aligns with Discord's API security best practices.

Changes:
- Updated `WEBHOOK_URL_PATTERNS` regex to require `https`.
- Updated `validate_webhook_url` logic to check for `https://` prefix.
- Added unit test `test_http_url_rejected` to verify the fix.
2026-01-17 01:14:33 +00:00
AEmotionStudio 7ace1668d7 fix: address PR feedback for prompt classification logic 2026-01-14 23:14:54 -08:00
AEmotionStudio b05b89148e feat: implement comprehensive test suite and enhance security validation 2026-01-14 22:52:38 -08:00
AEmotionStudio 90ad202495 🛡️ Fix SSRF vulnerability in Discord webhook client
- Removed lenient URL validation fallback that allowed bypass attacks
- Added URL validation to send_to_discord_with_retry() before any HTTP request
- Added SSRF regression tests
Resolves: PR #7
2026-01-14 20:04:04 -08:00
AEmotionStudio 6c282d3f1b refactor: Rename utils to discordsend_utils 2026-01-14 16:33:32 -08:00
AEmotionStudio 2220f76fea feat: Implement Phase 3 (Queue & Permissions) with DM safety fix 2026-01-12 21:40:44 -08:00
AEmotionStudio 5755166e41 feat: Implement Phase 1 & 2 of ComfyUI Companion Bot 2026-01-12 21:21:16 -08:00
AEmotionStudio 29a48ae943 Implement structured logging and add tests
- Add `utils/logging_config.py` for logger setup.
- Replace print statements with logging in `utils/discord_api.py`.
- Add `tests/test_utils.py` unit tests.
2026-01-10 18:10:35 -08:00