Add a Workflows page that manages ComfyUI workflow JSON files as a first-class library alongside loras/checkpoints/embeddings: - opt-in via the new 'Workflow Management' settings toggle (default off) - dedicated workflow folder roots with sidecar/preview support, separate from ComfyUI's own workflow storage; 'Send to ComfyUI' loads a workflow straight into the graph - workflow scanner parses the graph document (UI/API format sniffing, node classes, model/civitai refs) and persists the analysis in the SQLite model cache - settings UI: workflow folder paths editor in the Library tab and the standalone Model Paths page Fixes from sandbox E2E verification: - include the workflow scanner in startup initialization so the page no longer hangs on 'initializing' when enabled without folders - add the missing workflows entry to the frontend page-state map (page init crashed and the sidebar fell back to the loras tree without it) - project workflow analysis fields through the scanner cache entry and persist them in the model cache (new columns with auto-migration) - keep symlinked paths intact in the directory picker (abspath instead of resolve), so stored library paths match what the user sees on disk Also rebuilds the vue-widgets bundle to sync it with web/comfyui/utils.js.
24 lines
849 B
JavaScript
24 lines
849 B
JavaScript
import { BaseModelApiClient } from './baseModelApi.js';
|
|
|
|
/**
|
|
* Workflow-specific API client (ComfyUI workflow JSON resources)
|
|
*/
|
|
export class WorkflowApiClient extends BaseModelApiClient {
|
|
/**
|
|
* Push a library workflow into the running ComfyUI graph.
|
|
* POST /api/lm/workflows/send-to-comfy { file_path }
|
|
*/
|
|
async sendToComfy(filePath) {
|
|
const response = await fetch(this.apiConfig.endpoints.specific.sendToComfy, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ file_path: filePath }),
|
|
});
|
|
const data = await response.json().catch(() => ({}));
|
|
if (!response.ok || data.success === false) {
|
|
throw new Error(data.error || data.message || `HTTP ${response.status}`);
|
|
}
|
|
return data;
|
|
}
|
|
}
|