Add SubmitPromptResponse model and update submitPrompt method to return structured response

This commit is contained in:
Menno van Leeuwen 2025-03-20 15:43:15 +00:00
parent 697d2f812d
commit 41f85ae3c5
6 changed files with 46 additions and 464 deletions

View File

@ -1,459 +0,0 @@
{
"configVersion": 2,
"packages": [
{
"name": "_fe_analyzer_shared",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-80.0.0",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "analyzer",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/analyzer-7.3.0",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "args",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/args-2.7.0",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "async",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/async-2.13.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "boolean_selector",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/boolean_selector-2.1.2",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "build",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/build-2.4.2",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "build_config",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/build_config-1.1.2",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "build_daemon",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/build_daemon-4.0.4",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "build_resolvers",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/build_resolvers-2.4.4",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "build_runner",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/build_runner-2.4.15",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "build_runner_core",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/build_runner_core-8.0.0",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "built_collection",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/built_collection-5.1.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "built_value",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/built_value-8.9.5",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "checked_yaml",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/checked_yaml-2.0.3",
"packageUri": "lib/",
"languageVersion": "2.19"
},
{
"name": "code_builder",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/code_builder-4.10.1",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "collection",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/collection-1.19.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "convert",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/convert-3.1.2",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "coverage",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/coverage-1.11.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "crypto",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/crypto-3.0.6",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "dart_style",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/dart_style-3.0.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "file",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/file-7.0.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "fixnum",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/fixnum-1.1.1",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "freezed",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/freezed-3.0.4",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "freezed_annotation",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/freezed_annotation-3.0.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "frontend_server_client",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "glob",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/glob-2.1.3",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "graphs",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/graphs-2.3.2",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "http",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/http-1.3.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "http_multi_server",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/http_multi_server-3.2.2",
"packageUri": "lib/",
"languageVersion": "3.2"
},
{
"name": "http_parser",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/http_parser-4.1.2",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "io",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/io-1.0.5",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "js",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/js-0.7.2",
"packageUri": "lib/",
"languageVersion": "3.7"
},
{
"name": "json_annotation",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/json_annotation-4.9.0",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "json_serializable",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/json_serializable-6.9.4",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "lints",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/lints-5.1.1",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "logging",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/logging-1.3.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "matcher",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/matcher-0.12.17",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "meta",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/meta-1.16.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "mime",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/mime-2.0.0",
"packageUri": "lib/",
"languageVersion": "3.2"
},
{
"name": "mockito",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/mockito-5.4.5",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "node_preamble",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/node_preamble-2.0.2",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "package_config",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/package_config-2.2.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "path",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/path-1.9.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "pool",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/pool-1.5.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "pub_semver",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/pub_semver-2.2.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "pubspec_parse",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/pubspec_parse-1.5.0",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "shelf",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/shelf-1.4.2",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "shelf_packages_handler",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2",
"packageUri": "lib/",
"languageVersion": "2.17"
},
{
"name": "shelf_static",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/shelf_static-1.1.3",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "shelf_web_socket",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "source_gen",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/source_gen-2.0.0",
"packageUri": "lib/",
"languageVersion": "3.6"
},
{
"name": "source_helper",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/source_helper-1.3.5",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "source_map_stack_trace",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "source_maps",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/source_maps-0.10.13",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "source_span",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/source_span-1.10.1",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "sprintf",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/sprintf-7.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "stack_trace",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/stack_trace-1.12.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "stream_channel",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/stream_channel-2.1.4",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "stream_transform",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/stream_transform-2.1.1",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "string_scanner",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/string_scanner-1.4.1",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "term_glyph",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/term_glyph-1.2.2",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "test",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/test-1.25.15",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "test_api",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/test_api-0.7.4",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "test_core",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/test_core-0.6.8",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "timing",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/timing-1.0.2",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "typed_data",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/typed_data-1.4.0",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "uuid",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/uuid-4.5.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "vm_service",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/vm_service-15.0.0",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "watcher",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/watcher-1.1.1",
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "web",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/web-1.1.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "web_socket",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/web_socket-0.1.6",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "web_socket_channel",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.2",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "webkit_inspection_protocol",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1",
"packageUri": "lib/",
"languageVersion": "3.0"
},
{
"name": "yaml",
"rootUri": "file:///home/menno/.pub-cache/hosted/pub.dev/yaml-3.1.3",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "comfyui_api_sdk",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "3.0"
}
],
"generated": "2025-03-20T13:27:48.930532Z",
"generator": "pub",
"generatorVersion": "3.7.2",
"pubCache": "file:///home/menno/.pub-cache"
}

View File

@ -14,6 +14,7 @@ import 'models/checkpoint.dart';
import 'models/vae.dart'; import 'models/vae.dart';
import 'models/lora.dart'; import 'models/lora.dart';
import 'websocket_manager.dart'; import 'websocket_manager.dart';
import 'models/submit_prompt_response.dart';
/// A Dart SDK for interacting with the ComfyUI API /// A Dart SDK for interacting with the ComfyUI API
class ComfyUiApi { class ComfyUiApi {
@ -186,7 +187,7 @@ class ComfyUiApi {
} }
/// Submits a prompt (workflow) to generate an image /// Submits a prompt (workflow) to generate an image
Future<Map<String, dynamic>> submitPrompt(Map<String, dynamic> prompt) async { Future<SubmitPromptResponse> submitPrompt(Map<String, dynamic> prompt) async {
final response = await _httpClient.post( final response = await _httpClient.post(
Uri.parse('$host/api/prompt'), Uri.parse('$host/api/prompt'),
headers: {'Content-Type': 'application/json'}, headers: {'Content-Type': 'application/json'},
@ -201,7 +202,7 @@ class ComfyUiApi {
_webSocketManager.triggerOnPromptStart(promptId); _webSocketManager.triggerOnPromptStart(promptId);
} }
return responseData; return SubmitPromptResponse.fromJson(responseData);
} }
/// Validates HTTP response and throws an exception if needed /// Validates HTTP response and throws an exception if needed

View File

@ -1,3 +1,5 @@
import 'package:http/http.dart' as http;
class HistoryResponse { class HistoryResponse {
final Map<String, HistoryItem> items; final Map<String, HistoryItem> items;
@ -40,13 +42,13 @@ class Prompt {
final int id; final int id;
final String promptId; final String promptId;
final Map<String, Node> nodes; final Map<String, Node> nodes;
final ExtraPngInfo extraPngInfo; final ExtraPngInfo? extraPngInfo;
Prompt({ Prompt({
required this.id, required this.id,
required this.promptId, required this.promptId,
required this.nodes, required this.nodes,
required this.extraPngInfo, this.extraPngInfo,
}); });
factory Prompt.fromJson(List<dynamic> json) { factory Prompt.fromJson(List<dynamic> json) {
@ -56,7 +58,9 @@ class Prompt {
nodes: (json[2] as Map<String, dynamic>).map( nodes: (json[2] as Map<String, dynamic>).map(
(key, value) => MapEntry(key, Node.fromJson(value)), (key, value) => MapEntry(key, Node.fromJson(value)),
), ),
extraPngInfo: ExtraPngInfo.fromJson(json[3]['extra_pnginfo']), extraPngInfo: json[3]['extra_pnginfo'] != null
? ExtraPngInfo.fromJson(json[3]['extra_pnginfo'])
: null,
); );
} }
} }
@ -196,6 +200,15 @@ class Image {
type: json['type'] as String, type: json['type'] as String,
); );
} }
Future<List<int>> fetchImageBytes(String host) async {
final response =
await http.get(Uri.parse('$host/api/view?filename=$filename'));
if (response.statusCode != 200) {
throw Exception('Failed to fetch image: ${response.statusCode}');
}
return response.bodyBytes;
}
} }
class Status { class Status {

View File

@ -0,0 +1,27 @@
class SubmitPromptResponse {
final String promptId;
final int number;
final Map<String, dynamic> nodeErrors;
SubmitPromptResponse({
required this.promptId,
required this.number,
required this.nodeErrors,
});
factory SubmitPromptResponse.fromJson(Map<String, dynamic> json) {
return SubmitPromptResponse(
promptId: json['prompt_id'],
number: json['number'],
nodeErrors: json['node_errors'] ?? {},
);
}
Map<String, dynamic> toJson() {
return {
'prompt_id': promptId,
'number': number,
'node_errors': nodeErrors,
};
}
}