1.0.6 • Published 26 days ago

@stable-canvas/comfyui-client-transpiler v1.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
26 days ago

Transpiler

The transpiler can translate ComfyUI's workflows to @stable-canvas/comfyui-client format.

npm install @stable-canvas/comfyui-client-transpiler

references:

Usage

Since the order of widgets may change at any time, the function from .png to code may be unstable. It is recommended to use .json(API Format) to code

From JSON (API Format)

import { JsonReader } from "@stable-canvas/cw-reader";
import { Transpiler } from "./src/main";
import fs from "fs";

const file1 = await fs.promises.readFile("./tests/workflow-min.json");
const reader = new JsonReader(JSON.parse(file1.toString("utf-8")));
const workflow = await reader.getWorkflow();
const transpiler = new Transpiler(workflow);
const code = transpiler.toCode();
await fs.promises.writeFile("./demo_output.ts", code, {
  encoding: "utf-8",
});

Expected Output

const [LATENT_1] = cls.EmptyLatentImage({
  width: 512,
  height: 512,
  batch_size: 1,
});
const [MODEL_1, CLIP_1, VAE_1] = cls.CheckpointLoaderSimple({
  ckpt_name: "lofi_v5.baked.fp16.safetensors",
});
const [CONDITIONING_2] = cls.CLIPTextEncode({
  text: "worst quality, bad anatomy, embedding:NG_DeepNegative_V1_75T",
  clip: CLIP_1,
});
const [CONDITIONING_1] = cls.CLIPTextEncode({
  text: "best quality, 1girl",
  clip: CLIP_1,
});
const [LATENT_2] = cls.KSampler({
  seed: 2765233096,
  steps: 35,
  cfg: 4,
  sampler_name: "dpmpp_2m_sde_gpu",
  scheduler: "karras",
  denoise: 1,
  model: MODEL_1,
  positive: CONDITIONING_1,
  negative: CONDITIONING_2,
  latent_image: LATENT_1,
});
const [IMAGE_1] = cls.VAEDecode({
  samples: LATENT_2,
  vae: VAE_1,
});
const [] = cls.SaveImage({
  filename_prefix: "from-sc-comfy-ui-client",
  images: IMAGE_1,
});

From Workflow.png

import { ImageReader } from "@stable-canvas/cw-reader";
import { Transpiler } from "./src/main";
import fs from "fs";

const file1 = await fs.promises.readFile("./tests/img2img_workflow.png");
const reader = new ImageReader(file1.buffer);
const workflow = await reader.getWorkflow();
const transpiler = new Transpiler(workflow);
const code = transpiler.toCode();
await fs.promises.writeFile("./img2img_workflow.ts", code, {
  encoding: "utf-8",
});

Expected Output

const [MODEL_1, CLIP_1, VAE_1] = cls.CheckpointLoaderSimple({
  ckpt_name: "v1-5-pruned-emaonly.ckpt",
});
const [CONDITIONING_2] = cls.CLIPTextEncode({
  text: "photograph of victorian woman with wings, sky clouds, meadow grass\n",
  clip: CLIP_1,
});
const [CONDITIONING_1] = cls.CLIPTextEncode({
  text: "watermark, text\n",
  clip: CLIP_1,
});
const [IMAGE_2, MASK_1] = cls.LoadImage({
  image: "example.png",
  upload: "image",
});
const [LATENT_1] = cls.VAEEncode({
  pixels: IMAGE_2,
  vae: VAE_1,
});
const [LATENT_2] = cls.KSampler({
  seed: 280823642470253,
  control_after_generate: "randomize",
  steps: 20,
  cfg: 8,
  sampler_name: "dpmpp_2m",
  scheduler: "normal",
  denoise: 0.8700000000000001,
  model: MODEL_1,
  positive: CONDITIONING_2,
  negative: CONDITIONING_1,
  latent_image: LATENT_1,
});
const [IMAGE_1] = cls.VAEDecode({
  samples: LATENT_2,
  vae: VAE_1,
});
const [] = cls.SaveImage({
  filename_prefix: "ComfyUI",
  images: IMAGE_1,
});
1.0.6

26 days ago

1.0.5

26 days ago

1.0.4

26 days ago

1.0.3

1 month ago

1.0.2

1 month ago

1.0.1

1 month ago

1.0.0

1 month ago