Commit Graph
23 Commits
Author SHA1 Message Date
Sebastian Monroy a29f1d411c black-formatter pass 2025-10-07 11:41:11 +01:00
Sly cfd8e2cfde feat: implement storage endpoints migration for ComfyUI nodes (#8)
feat: migrate ComfyUI nodes from presigned URLs to Brain API storage endpoints

## Core Architecture Changes
- Add new BrainApiClient for direct Brain API communication
- Replace presigned URL workflow with storage_id/filename pattern
- Update MediaStreamInput to use storage_id + filename instead of presigned_download_url
- Update MediaStreamOutput to use storage_id + filename instead of presigned_upload_url

## Brain API Client Implementation
- Add comprehensive BrainApiClient with authentication and error handling
- Implement get_presigned_upload_url() and get_presigned_download_url() methods
- Add proper Bearer token authentication for Brain API requests
- Include environment variable configuration for Brain API endpoint and credentials

## Media Stream Node Updates
- Refactor MediaStreamInput to request presigned URLs from Brain API using storage_id
- Update MediaStreamOutput to upload directly to MinIO using Brain API presigned URLs
- Simplify node interface by removing presigned URL inputs from workflow templates
- Update JavaScript frontend to hide system inputs and manage node UI state

## Infrastructure Improvements
- Add .idea/ to .gitignore for IDE file exclusions
- Update user_input.py to use new storage_id pattern
- Streamline web interface JavaScript for cleaner node management
2025-10-06 13:07:37 -07:00
Sebastian Monroy 5b8184cc33 make mediastreamoutput node have an output pin for the url it uploaded to 2025-10-01 17:15:02 +01:00
Sebastian Monroy 51777e3462 feat(workers): include required fields in status updates; honor optional status_policy
- copy content_id, venue, canvas, scene from job payload into status updates
- use running_status for first progress; fail_status on execution errors (fallbacks preserved)
- manage per-content context lifecycles
2025-09-26 16:06:33 +01:00
Sebastian Monroy a42221565d refactor(nilor-nodes): adopt content_id in worker_consumer and MediaStreamOutput
- read `content_id` from job payloads in `worker_consumer.py` (replace `client_id`)
- rename internal mappings (e.g., `prompt_id_to_content_id_map`)
- MediaStreamOutput: require `content_id` input (replace `job_id`)
- completion messages: `{ "content_id": <uuid>, "status": "completed", "outputs": { ... } }`
- web widget: hide `content_id` instead of `job_id`
- BREAKING CHANGE: older payloads with `job_id`/`client_id` are no longer accepted
2025-09-25 16:10:06 +01:00
Sebastian Monroy 75a45c6c34 further improve logging everywhere, using thinspace instead of brackets to fix terminal rendering, including all raised errors 2025-09-25 11:50:16 +01:00
Sebastian Monroy 414679c676 simplified the logging when worker_consumer.py fails to initialize SQS, improved logging everywhere 2025-09-25 11:30:25 +01:00
Sebastian Monroy 35428a8287 black formatter pass on all python scripts 2025-09-10 14:47:43 +01:00
Sebastian Monroy ccb2b14dfa updated MediaStreamOutput so that each instance of the node ONLY sends the dictionary related to its own output, rather than sending the entire final_outputs_dict
The purpose of this code is to notify the backend that a specific output file has been successfully generated and uploaded. The backend (ComfyUIContentHandler) needs to know which output file this message corresponds to.

The original code sent the entire final_outputs_dict. This would work, but it's inefficient and sends redundant information. If a workflow has five MediaStreamOutput nodes, each one would send a completion message containing the information for all five outputs. The backend would receive five identical messages.

The new code is more precise. It filters the dictionary to include only the key-value pair for the output it just handled. This is a much cleaner and more correct approach. It ensures that each completion message is atomic and only contains the information relevant to the event that triggered it.
2025-09-02 14:53:28 +01:00
Sebastian Monroy feedc4a002 add support for a "framerate" input to the MediaStreamOutput node 2025-09-01 18:10:50 +01:00
Sebastian Monroy 55d83abed0 Remove mask output from MediaStreamInput
Removes the MASK output from the MediaStreamInput node to simplify its API and align with the capabilities of the Brain API server.

- The `RETURN_TYPES` is now just `("IMAGE",)`.
- All internal processing methods (`_process_image`, `_process_video`, `_process_image_batch`) have been updated to no longer extract or generate mask data.
- This change simplifies the node's logic and removes an unused feature, improving maintainability.
2025-09-01 13:59:53 +01:00
Sebastian Monroy 85e28d01d5 implement two-phase download for image batches
feat:

- Add image_batch format support to MediaStreamInput node INPUT_TYPES
- Implement two-phase download: fetch manifest first, then download individual assets
- Add _process_image_batch method for converting multiple images to tensor batches
- Sort assets by sequence number from manifest to maintain proper ordering
- Add comprehensive error handling for network failures during asset downloads
- Preserve backward compatibility for existing single-file image and video workflows
- Create proper tensor concatenation along batch dimension for ComfyUI processing
- Handle varying image formats and alpha channels within batches consistently
- Add detailed logging for manifest processing and batch creation debugging

Completes Phase 4 of multi-image support plan enabling end-to-end batch processing from brain_rnd manifest generation to ComfyUI tensor consumption.
2025-09-01 13:55:50 +01:00
Sebastian Monroy b091d3057b MediaStreamInput: add "image_batch" option to format input, which downloads a video and outputs as tensor batch (WIP) 2025-09-01 10:36:20 +01:00
Sebastian Monroy f731a55292 made default values of now-un-hidden inputs for MediaStream nodes indicate that they do not need editing by the user 2025-08-25 13:44:59 +01:00
Sebastian Monroy 5e2aa12434 unhid some MediaSteam node inputs because they're required to be visible to appear in exported workflow API .jsons 2025-08-25 13:21:48 +01:00
Sebastian Monroy a76949e628 add "format" field to MediaStreamInput node 2025-08-22 13:42:42 +01:00
Sebastian Monroy afc68ccded hide more MediaStream fields for better UX 2025-08-18 11:10:48 +01:00
Sebastian Monroy 778ed5272f feat: Implement static naming for I/O contract (WIP)
This commit aligns the nilor-nodes with the project's new unified, name-based I/O system, as specified in the workflow override fix plan. This change establishes a stable, human-readable API contract for all workflows, replacing the previous fragile node-ID-based system.

Key Changes:
- **`MediaStreamInput` & `NilorUserInput`**: Added a static, non-overridable `input_name` string widget. Workflow authors now assign a logical name to each input, which is used by the Brain API to inject data.
- **`MediaStreamOutput`**: Added a static `output_name` widget. This provides a stable key for the Brain API to identify and retrieve specific outputs.
- **`MediaStreamOutput` (Logic)**: Corrected the completion logic to properly parse the full dictionary of named outputs it receives from the Brain API, ensuring it sends the correct, complete payload upon job completion.

These changes are a critical part of the larger refactor to improve the security, scalability, and maintainability of the ComfyUI integration.
2025-08-13 17:09:52 +01:00
Sebastian Monroy 67c5159cfc decouple ComfyUI workers from Brain API by introducing a second SQS queue to mediate job completion reporting, update requirements.txt and .env.example 2025-08-08 16:07:03 +01:00
Sebastian Monroy dd9e13e148 4.1: added support for job completion webhook payloads to media_stream nodes. 2025-08-04 14:59:03 +01:00
Sebastian Monroy 9e5ccb8bb7 added support for video to MediaStreamInput and MediaStreamOutput nodes 2025-08-04 14:25:03 +01:00
Sebastian Monroy e8c5c449ac 3.2: full test of ComfyUI MediaStream nodes successful. got nodes to show up in ComfyUI properly. 2025-08-04 12:33:14 +01:00
Sebastian Monroy 31ae8624d3 3.2: first pass at media_stream.py (WIP) 2025-07-31 17:30:54 +01:00