GuideLokal AI

Spara ComfyUI-arbetsflöde: JSON, bilder och modeller för återöppning

Bygg ett litet jobbpaket, öppna JSON och originalbild var för sig i tom arbetsyta och skilj saknad nod från saknad modell. Återöppningsbart är inte samma sak som pixelidentiskt.

Publicerad · Senast granskad

Ett svart datorchassi med tre lådor på en mörk bänk. De två översta är stängda och märkta med ett nodschema och en bildsymbol. Den understa står utdragen med tre modulkassetter. Till vänster syns en krukväxt och en mörkgrön ask.
Flödet, bilden och modellerna ligger i varsin låda. Ett paket som går att öppna igen håller reda på alla tre.

Du har kört ett bildjobb i ComfyUI och vill kunna komma tillbaka till det om ett halvår. En sparad JSON-fil eller en PNG med metadata kan öppna noderna igen, men modellfiler, indatabilder och miljön följer inte med. Den här guiden ger dig ett litet jobbpaket och ett protokoll där du provar vad som faktiskt går att återställa. Har du inte ComfyUI igång än börjar du i guiden om installation och första bild.

Det här har vi provat, och inte provat

Datorn där guiden skrevs har ingen ComfyUI-installation, så ingen återöppning eller bildkörning är gjord i ComfyUI. Stegen i gränssnittet kommer från dokumentationen. Det vi har kört är två skript mot ComfyUI:s officiella exempelbild: hur metadatan läses ut och vad som händer när bilden sparas om. Provet du gör själv i steg 5 och 6 är det som avgör ditt eget jobb.

1. Vad varje del bär

Delarna svarar på olika frågor. Tabellen visar varför en av dem inte kan ersätta en annan.

DelBärBär inte
Workflow i sparformatNoder, inställningar, placering, färger och grupper. Avsedd att öppnas i gränssnittet.Modellfiler och indatafiler
Workflow i API-formatNoder och värden för programstyrda körningar. Går att öppna, men utan layout.Placering, färger och grupper
Original-PNGBildpunkterna och, som standard, arbetsflödet som skapade bildenModellfiler och indatafiler
IndatafilerInnehållet som exempelvis en Load Image-nod läserFlödet
ModellistaDin uppgift om vilken fil som användes, varifrån den kom och dess kontrollsummaSjälva modellen
SnapshotComfyUI-commit, custom nodes med version och pip-paketModeller finns inte med i dokumentationens uppräkning

Skillnaden mellan formaten står i ComfyUI:s sida om API-formatet. Att modeller och indata ligger utanför flödet syns i Issues-fliken, som listar saknade nodpaket, modellfiler och indatamedia var för sig. Snapshot-sidan gäller Comfy Desktop.

2. Spara paketet direkt efter körningen

Skapa en mapp per jobb. Filnamnen är bara vårt förslag, men håll dem likadana mellan jobben så blir protokollet lättare att följa.

fjallstuga-2026-11-07/
  workflow.json
  workflow-api.json   (valfri)
  original.png
  indata/
  modeller.txt
  snapshot.json
  protokoll.txt

Workflow. File → Save eller Ctrl+S sparar i sparformat, och filen hamnar i installationens arbetsflödesbibliotek. Du behöver en kopia utanför installationen: använd File → Export om menyn har det, annars kopierar du filen ur biblioteket. Exportkommandot finns i gränssnittets källkod, men sidan om API-formatet nämner bara Save. API-exporten, som dokumentationen kallar File → Export Workflow (API), behöver du bara om du ska köra jobbet från ett program.

Original-PNG. Ta filen ur utdatamappen, inte en skärmbild eller en konverterad kopia. Guiden till första bilden säger att varje PNG från Save Image som standard innehåller sitt arbetsflöde. Källkoden i nodes.py visar två undantag: flaggan --disable-metadata stänger av metadatan, och Preview Image skriver till den tillfälliga mappen. Vi sparade om den officiella exempelbilden med Pillow utan att föra över metadatan. Bildpunkterna blev identiska, men fälten prompt och workflow försvann. Prompten följer alltså med en orörd PNG, så tänk efter innan du skickar den vidare.

Fröet. Enligt dokumentationen för KSampler kan control_after_generate ändra fröet efter varje körning, och exempelbildens flöde står på randomize. Sparar du JSON-filen efter körningen kan den därför bära nästa frö i stället för det som gav bilden. Det är vår slutsats och inget vi har sett i gränssnittet. Fältet prompt i PNG:n är det som skickades till körningen, så läs fröet där med skriptet i steg 3.

Indata. Load Image väljer en fil ur indatamappen. Kopiera varje sådan fil till indata/. I Comfy Desktop hittar du mappen som Shared Input på fliken Storage, om instansen inte har en egen.

Modeller. Eftersom modeller kan vara från ungefär 2 till över 15 GB räcker det oftast att lista dem i stället för att kopiera dem till varje jobb. Skriv en rad per fil, och glöm inte separata VAE-, LoRA- och ControlNet-filer: filnamn, undermapp under models/, källadress, revision om sidan visar den och SHA-256. Get-FileHash räknar ut kontrollsumman:

Get-FileHash "D:\Modeller\checkpoints\v1-5-pruned-emaonly-fp16.safetensors" -Algorithm SHA256

Kontrollera villkoren för modellen med guiden om modellicens innan du lägger en modellfil i ett paket som ska delas.

Miljö. I Comfy Desktop väljer du Create Snapshot på fliken Snapshots, sätter en etikett med jobbets namn och exporterar den som .json. Automatiska Boot- och Manager-snapshots utan etikett gallras när de blir fler än 200 per installation, medan manuella ligger kvar tills du tar bort dem. Exportera ändå: en kopia i paketet finns kvar även om instansen försvinner. Snapshot-sidan beskriver bara Comfy Desktop. Kör du en portabel eller manuell installation antecknar du motsvarande uppgifter själv: git rev-parse HEAD i ComfyUI-mappen, commit eller version för varje custom node och pip freeze. Skriv också upp grafikkort och drivrutin. Routen /system_stats på din lokala server ger bland annat Python-version, enheter och grafikminne.

3. Inventera noder och modeller ur filen

Skriptet nedan läser en sparad JSON, en API-export eller en PNG och skriver ut noder, värden och modellista. Det använder bara Pythons standardbibliotek och ändrar inget. Spara det som inventera.py utanför ComfyUI-mappen.

import json, struct, sys
from pathlib import Path

def png_fields(path):
    data, pos, fields = path.read_bytes(), 8, {}
    while pos < len(data):
        size, kind = struct.unpack(">I4s", data[pos:pos + 8])
        body = data[pos + 8:pos + 8 + size]
        pos += size + 12
        if kind == b"tEXt":
            key, value = body.split(b"\0", 1)
            fields[key.decode("latin-1")] = value.decode("utf-8", "replace")
    return fields

sys.stdout.reconfigure(encoding="utf-8")
path = Path(sys.argv[1])
if path.suffix.lower() == ".png":
    fields = png_fields(path)
    print("PNG-metadata:", sorted(fields) or "saknas")
    graph = json.loads(fields.get("workflow", "{}"))
    api = json.loads(fields.get("prompt", "{}"))
else:
    graph = json.loads(path.read_text(encoding="utf-8"))
    api = {} if "nodes" in graph else graph

for node in graph.get("nodes", []):
    print("Nod:", node["type"], node.get("widgets_values"))
for node_id, node in api.items():
    values = {k: v for k, v in node["inputs"].items() if not isinstance(v, list)}
    print("Körd:", node_id, node["class_type"], values)
print("Modellista:", graph.get("models", "saknas"))
print("Nodversioner:", graph.get("extra", {}).get("node_versions", "saknas"))

Kör python inventera.py original.png. Mot ComfyUI:s exempelbild gav det bland annat:

PNG-metadata: ['prompt', 'workflow']
Nod: CheckpointLoaderSimple ['v1-5-pruned-emaonly-fp16.safetensors']
Körd: 3 KSampler {'seed': 156680208700286, 'steps': 20, 'cfg': 8.0, 'sampler_name': 'euler', 'scheduler': 'normal', 'denoise': 1.0}
Modellista: saknas
Nodversioner: {'comfy-core': '0.3.14'}

Lägg märke till vad som saknas. Exempelbilden pekar ut sin checkpoint med ett filnamn, utan adress och kontrollsumma. Schemat för version 1.0 har ett valfritt fält models, där namn, adress och mapp är obligatoriska delar och hash är frivillig. Exempelflödet är av den äldre versionen 0.4 och saknar fältet. Ett filnamn säger inget om innehållet, och därför behöver modellistan SHA-256. Gå igenom utskriften och kryssa av att varje modellnamn finns i modeller.txt och varje indatafil i indata/. Värden som bredd, frö och prompt är inställningar, inte filer du behöver samla in.

4. Skilj saknad nod från saknad modell

När du öppnar ett paket visar ComfyUI vad som saknas i Issues-fliken i högerpanelen. Fliken är på som standard. Felen har olika orsaker och olika åtgärder, så läs av raden här innan du hämtar något.

Du serDet betyderGör så här
En Load Image-nod i stället för flödetPNG-filen har inget sparat arbetsflödeHitta den riktiga originalfilen eller öppna JSON-filen
Saknat nodpaket, markerat på arbetsytanEn nod saknas: antingen en Comfy Core-nod från en nyare version, eller en custom nodeSe stycket under tabellen
… is missing under Missing ModelsModellfilen finns inte i modellmapparna. Under filnamnet står den mapp filen hör hemma i.Hämta filen enligt modellistan, lägg den i mappen, tryck R och jämför SHA-256
Saknad media i Issues-flikenEn indatafil kan inte hittasLägg tillbaka filen från indata/ i indatamappen
Value not in list: ckpt_name …Tomma [] i meddelandet betyder att inga passande modellfiler hittades för laddarenKontrollera undermappen under models/
Fel om tensorstorlek eller antal kanaler, ofta vid VAE DecodeModeller ur olika arkitekturfamiljer har blandatsJämför med modellistan; byt inte fil efter gissning
Error while deserializing headerFilen kan vara skadadJämför SHA-256 och hämta om vid avvikelse

Modellraderna kommer från guiden till första bilden och felsökningssidan för modeller. Saknas knappen Download på en modellrad kan det bero på att flödet inte har någon nedladdningslänk, vilket gäller exempelbilden. Då är din modellista den uppgift du har.

Dokumentationen om noder skiljer på två fall. Saknas en Comfy Core-nod beror det oftast på att din ComfyUI är äldre än flödet, och lösningen är att uppdatera. Det ändrar miljön, så ta en snapshot först. Saknas en custom node går det att hitta den med ComfyUI Manager. Välj där Open Manager och läs detaljerna hellre än Install All. Installera inte ett paket du inte känner igen bara för att få provet att gå igenom: skriv raden i protokollet och stanna där.

5. Öppna JSON och PNG var för sig i tom arbetsyta

  1. Öppna en tom arbetsyta med Menu → New eller plusknappen bredvid flikarna.
  2. Öppna workflow.json med File → Open eller Ctrl+O. Anteckna vad Issues-fliken visar.
  3. Öppna en ny tom arbetsyta och dra original.png dit. Anteckna samma sak.
  4. Jämför antalet noder, modellnamnen och fröet mellan flikarna. Facit är att båda öppnar samma flöde. Skiljer sig bara fröet kan JSON-filen ha sparats efter körningen, och då utgår du från värdet i PNG:ns prompt.

Det här visar bara att filerna öppnas i en miljö som redan har allt. Vill du pröva hela paketet kan du i Comfy Desktop välja ☰ → Load Snapshot, läsa förhandsvisningen och skapa en ny instans. Originalinstansen lämnas orörd. Tänk på tre saker. Instanser läser som standard de delade modellmapparna, så ett modellprov kräver att du stänger av Include Shared Directories på instansens Storage-flik. En återställning tar dessutom bort pip-paket som inte finns i snapshoten och kör installationsskript för nya noder, så läs förhandsvisningen först. Slutligen är custom nodes inget säkert kort: en nod som inte går att installera stoppar inte återställningen, men posten märks Restore did not complete.

6. Kör igen med låst frö

Har du modellerna kvar: ställ control_after_generate på fast värde (Fixed Value), skriv in fröet från PNG:n, kör och jämför sedan bildpunkterna. Pillow, som ComfyUI självt använder, räcker:

python -c "from PIL import Image, ImageChops; a=Image.open('original.png').convert('RGB'); b=Image.open('omkorning.png').convert('RGB'); print(a.size==b.size and ImageChops.difference(a,b).getbbox() is None)"

Jämför inte SHA-256 för två PNG-filer här. Exempelbilden och vår omsparade kopia hade olika kontrollsummor men gav True i provet ovan, eftersom filen rymmer mer än bildpunkterna. Skriv sedan in utfallet i protokollet som en av tre nivåer:

NivåFacit
ÅteröppningsbartFlödet öppnas och Issues-fliken visar inga saknade delar
KörbartKörningen går hela vägen till en ny bild i Save Image
PixelidentisktJämförelsen ger True i just den här miljön

Räkna inte med den tredje nivån. KSampler-sidan säger att samma frö ger identiska bilder, men PyTorchs dokumentation säger att helt reproducerbara resultat inte garanteras mellan versioner, enskilda commits eller plattformar, och att CPU och GPU kan skilja sig även med samma frö. ComfyUI:s flagga --deterministic beskrivs lika försiktigt: den gör kanske inte bilderna deterministiska i alla lägen. Ger provet False är paketet alltså inte nödvändigtvis trasigt. Kontrollera modellens SHA-256, snapshoten och grafikkortet, ändra en sak i taget och skriv ned vad du ser.

Jobb: fjallstuga-2026-11-07
Provat: 2027-05-07, samma dator, Comfy Desktop
JSON öppnad: ja. Issues: inga
PNG öppnad: ja. Issues: inga
Frö ur PNG: 156680208700286
Modell-SHA stämmer: ja
Nivå: körbart. Pixelprov: False
Avvikelse: ComfyUI uppdaterad sedan originalet

Raderna ovan är ett påhittat exempel på hur protokollet kan se ut, inte ett resultat vi har mätt.

Så vet du att du är klar

FAQ

Räcker det att spara PNG-filen från ComfyUI?

Det räcker för att öppna flödet om metadatan finns kvar. Bilden innehåller inte modellfiler eller indatafiler, så spara också en modellista och indata.

Vad är skillnaden mellan vanlig workflow JSON och API-format?

Sparformatet har placering, färger och grupper och är avsett för att öppnas i gränssnittet. API-formatet saknar dem och är avsett för programstyrda körningar. Det går att öppna, men utan layout.

Innehåller en snapshot modellerna?

Dokumentationens uppräkning tar upp ComfyUI-version, custom nodes och pip-paket, inte modeller. Modellernas identitet sparar du därför separat i modellistan.

Blir bilden likadan om jag använder samma seed?

Det är inte garanterat. PyTorch garanterar inte helt reproducerbara resultat mellan versioner eller plattformar, så jämför bildpunkterna och skriv ned miljön i stället för att utgå från att bilden blir identisk.

Relaterade guider


Källor och metod

Källorna hämtades 7 november 2026. Vårt prov kördes samma dag med Python 3.14.2 och Pillow på Windows 11: inventeringsskriptet mot exempelbilden och utdragna JSON-filer samt omsparning och pixeljämförelse av exempelbilden. Datorn har ett grafikkort, men ComfyUI var inte installerat och ingen modell eller custom node hämtades. Inga gränssnittssteg, återöppningar, omkörningar eller Issues-meddelanden har alltså provats av redaktionen.

Nästa steg
Kontrollera villkoren för modellerna i paketet
→