// Resim edit (upload + ColorGrade + upscale) — app workflow kodu → ComfyUI. import 'dart:convert'; import 'dart:io'; import 'package:dio/dio.dart'; import '../lib/comfy/workflow/resim_edit_workflow.dart'; Future main() async { const base = 'http://127.0.0.1:8188'; final dio = Dio(BaseOptions(baseUrl: base)); // ComfyUI output'tan bir png bul final dir = Directory( r'D:\Comfy\App\ComfyUI_windows_portable\ComfyUI\output\fikoyt'); final png = dir .listSync() .whereType() .firstWhere((f) => f.path.endsWith('.png'), orElse: () => File('')); if (!png.existsSync()) { stdout.writeln('PNG yok'); exit(1); } final form = FormData.fromMap({ 'image': await MultipartFile.fromFile(png.path, filename: png.uri.pathSegments.last), 'overwrite': 'true', }); final up = await dio.post('/upload/image', data: form); final ad = (up.data as Map)['name'] as String; stdout.writeln('YUKLENDI: $ad'); Future calistir(Map wf, String etiket) async { final r = await dio.post('/prompt', data: {'prompt': wf, 'client_id': 'fikoyt-edit'}); final pid = (r.data as Map)['prompt_id'] as String; for (var i = 0; i < 40; i++) { await Future.delayed(const Duration(seconds: 3)); final h = await dio.get('/history/$pid'); final m = h.data as Map; if (m[pid] != null) { final st = (m[pid] as Map)['status'] as Map?; if (st?['status_str'] == 'error') { stdout.writeln('$etiket HATA'); return false; } if (st?['completed'] == true) { stdout.writeln('$etiket BASARILI: ${jsonEncode((m[pid] as Map)['outputs'])}'); return true; } } } return false; } final a = await calistir( resimEditWorkflowOlustur(ad, tur: ResimEditTuru.renk, colorPreset: 'noir'), 'RENK(noir)'); final b = await calistir( resimEditWorkflowOlustur(ad, tur: ResimEditTuru.buyut2x), 'UPSCALE 2x'); exit(a && b ? 0 : 1); }