Skip to content

Latest commit

 

History

History
196 lines (163 loc) · 3.99 KB

README.md

File metadata and controls

196 lines (163 loc) · 3.99 KB

Omniinfer Js SDK

this SDK is based on the official API documentation

join our discord server for help

Installation, via npm

npm i omniinfer-sdk

Quick Start

Get api key refer to https://docs.omniinfer.io/get-started

We offer two ways to use the sdk

1.Called as a function

import { txt2ImgSync, setOmniinferKey } from "omniinfer-sdk";

setOmniinferKey("your api key");

txt2ImgSync({
  model_name: "",
  prompt: "a girl",
})
  .then((res) => {
    console.log("imgs", res);
  })
  .catch((err) => {
    console.log(err);
  });

2.Use by way of class

import { OmniinferSDK } from "omniinfer-sdk";

const sdk = new OmniinferSDK("your api key");

sdk
  .txt2ImgSync(params)
  .then((res) => {
    console.log("imgs", res);
  })
  .catch((err) => {
    alert(err);
  });

function list

  • setOmniinferKey
  • getModels
  • img2img
  • txt2Img
  • txt2ImgSync
  • img2imgSync
  • upscale
  • upscaleSync

Usage in React

import * as React from 'react';
import { txt2ImgSync } from 'omniinfer-sdk';
import './style.css';

const { useState, useCallback } = React;

export default function App() {
  const [imgs, setImgs] = useState<string[]>([]);
  const [loading, setLoading] = useState(false);
  const generateImg = useCallback(() => {
    setLoading(true);
    txt2ImgSync({
      model_name: '',
      prompt: 'a girl',
    })
      .then((res) => {
        setImgs(res);
        setLoading(false);
      })
      .catch((err) => {
        console.log(err);
        setLoading(false);
      });
  }, []);
  return (
    <div>
      <h1>Text to image</h1>
      <button onClick={generateImg} disabled={loading}>
        {loading ? 'progressing' : 'click to generate image'}
      </button>
      <div
        style={{
          marginTop: '20px',
        }}
      >
        {imgs.map((one) => (
          <img
            src={one}
            crossOrigin="anonymous"
            referrerPolicy="origin-when-cross-origin"
            style={{
              objectFit: 'cover',
            }}
          />
        ))}
      </div>
    </div>
  );
}

Model Search

When you use this model interface, keep an eye on dependency_status and download_status, which are only considered to be available if they are both 1

We recommend that you keep the interface data in memory, e.g. redux.

getModels().then((res) => {
  console.log(res.models.slice(0, 100));
});

Lora Usage

txt2ImgSync({
  model_name: "majicmixRealistic_v2.safetensors",
  prompt:
    "Best quality, masterpiece, ultra high res, (photorealistic:1.4), raw photo, 1girl, offshoulder, in the dark, deep shadow, low key, cold light",
  negative_prompt:
    "ng_deepnegative_v1_75t, badhandv4 (worst quality:2), (low quality:2), (normal quality:2), lowres, bad anatomy, bad hands, normal quality, ((monochrome)), ((grayscale))",
  sampler_name: "DPM++ 2M Karras",
  lora: [
    {
      sd_name: "film",
      weight: 0.4,
    },
  ],
}).then((res) => {
  console.log(res);
});

ControlNet QRCode

txt2ImgSync({
  prompt:
    "a beautify butterfly in the colorful flowers, best quality, best details, masterpiece",
  model_name: "",
  steps: 30,
  controlnet_units: [
    {
      input_image: imgbase64,
      module: ControlNetPreprocessor.NULL,
      control_mode: ControlNetMode.BALANCED,
      model: "control_v1p_sd15_qrcode_monster_v2",
      weight: 2.0,
    },
  ],
}).then((res) => {
  console.log(res);
});

Upscalse

.upscaleSync({
  image: base64String,
  resize_mode: 0,
  upscaling_resize: 2,
})
.then((res) => {
  if (res) {
    setImg(res[0]);
  }
  setLoading(false);
})
.catch((err) => {
  alert(err);
});