VYBS LoRAs

Hosting repo for VYBS LoRAs, published public so they can be loaded by bare URL from fal.ai workflows. fal fetches loras[].path without any Hugging Face token, so a private repo would fail with 401 partway through a generation.

Start here: illustration/flux/vybs-illustration-turbo-flux_Album_V2.safetensors is the production LoRA. Trigger vybs2d. It supersedes V1, which baked the background colour in unpromptably. The other base models were a bake-off and are kept for reference only.

Control complexity with plain language, not tags. V2 was trained with invented vybslv1…vybslv5 level tags and they do not work β€” measured 6.4–7.2 mean pixel distance against a 107.2 colour-word reference, i.e. inert. Describing the scene instead ("a single gold coin alone, nothing else" β†’ "a mountain of coins, flat confetti, a radial burst of hard-edged flat wedges") scores 43.8–65.5 on the same weights. Ignore the tags; write the description.


Naming convention

vybs-<domain>-<base-model>_<Dataset>_V<N>.safetensors

Every field answers a question you would otherwise have to open the file to answer:

Field Question it answers Values in use
vybs Whose LoRA is this? always vybs
<domain> What does it do? illustration (brand art style), ugc (a person/avatar for UGC ads)
<base-model> What can it be loaded onto? turbo-flux, dev-flux, flux, qwen-image, krea2, ideogram-v4, z-image-turbo, wan-22-a, wan-22-b
<Dataset> What was it trained on? Album (collectible-card album illustration set), Kayla (UGC character set)
V<N> Which retrain? V1, V2, … never overwrite a version

Hyphens inside a field, underscores between fields. The base model is repeated in the filename on purpose: a file downloaded out of its folder is still self-describing and cannot be loaded onto the wrong base by accident.


Folder layout

Folders are <domain>/<base>/. The base folder is load-bearing, not cosmetic β€” a Flux LoRA will not load on WAN, Qwen-Image or Z-Image, and the folder tells you which base a file is valid against before you open it.

illustration/          brand art style, trained on the Album set
  flux/                Flux dev + turbo   β€” transformer.single_transformer_blocks.*
  qwen/                Qwen-Image         β€” modelspec.architecture = qi/lora
  krea2/               Krea 2 (fal/krea-2)β€” blocks.*.attn.wk
  ideogram/            Ideogram v4        β€” conditional_transformer.layers.*
  z-image/             Z-Image Turbo      β€” transformer.layers.*.adaLN_modulation
  wan/                 WAN 2.2            β€” transformer.blocks.*.attn1.*
characters/            a specific person / avatar
  flux/
  z-image/
products/              reserved β€” product LoRAs (does not exist yet)

Those right-hand fingerprints are how the base model was actually determined. Filenames lie; safetensors tensor keys do not. To identify an unknown LoRA, read its header rather than trusting whoever named it.


URL pattern

https://huggingface.co/vybs-ai/vybs-loras/resolve/main/<path-in-repo>

Use /resolve/main/. Do not use /blob/main/ β€” that serves an HTML preview page with HTTP 200, so fal fails on a content error rather than an obvious 404.

βœ… .../resolve/main/illustration/flux/vybs-illustration-turbo-flux_Album_V1.safetensors
❌ .../blob/main/illustration/flux/vybs-illustration-turbo-flux_Album_V1.safetensors

Contents

illustration/ β€” brand art style, Album dataset

Path Base model Trigger phrase Steps Status
illustration/flux/vybs-illustration-turbo-flux_Album_V2.safetensors Flux turbo (rank 16) vybs2d 1800 production β€” use this one
illustration/flux/vybs-illustration-turbo-flux_Album_V1.safetensors Flux turbo ohwx-Vybs-turbo-flux-trainer 1000 superseded by V2 β€” background colour unpromptable, trigger leaked as garbled text
illustration/flux/vybs-illustration-dev-flux_Album_V1.safetensors Flux dev (none recorded) 1000 reference
illustration/qwen/vybs-illustration-qwen-image_Album_V1.safetensors Qwen-Image (rank 32, alpha 1) (none recorded) 1000 reference
illustration/krea2/vybs-illustration-krea2_Album_V1.safetensors Krea 2 (fal/krea-2, rank 32, alpha 32, bf16) vybs-illustration-Krea2 100 reference
illustration/ideogram/vybs-illustration-ideogram-v4_Album_V1.safetensors Ideogram v4 (ideogram-ai/ideogram-4-fp8, rank 16) vybs-ideogram 1000 reference
illustration/z-image/vybs-illustration-z-image-turbo_Album_V1.safetensors Z-Image Turbo Vybs-z-image-turbo-trainer-v2 2000 reference
illustration/wan/vybs-illustration-wan-22-a_Album_V1.safetensors WAN 2.2 vybs-art-wan-22 1000 reference
illustration/wan/vybs-illustration-wan-22-b_Album_V1.safetensors WAN 2.2 vybs-art-wan-22 1000 reference

Trigger phrases live in the fal trainer config JSON emitted next to each adapter, not in the weights β€” if you lose the config, the trigger phrase is gone. Record it here at upload time.

characters/ β€” Kayla UGC character

Path Base model Rank Trainer
characters/flux/vybs-ugc-flux_Kayla_V1.safetensors Flux 16 diffusers-style keys, no metadata block
characters/z-image/vybs-ugc-z-image-turbo_Kayla_V1.safetensors Z-Image Turbo 32 ai-toolkit 0.9.13, ss_base_model_version: zimage

Both were trained on the same image set. The Flux one records no flavour, so it is named plain flux rather than guessing dev vs turbo. No trigger phrase was recorded for either.

⚠️ The two WAN 2.2 adapters

WAN 2.2 A14B uses a high-noise / low-noise expert pair, and these two files are almost certainly that pair β€” identical size and tensor layout, emitted two seconds apart by the same job. Neither file records which expert it is, so they are named neutrally rather than guessed at:

File SHA-256
illustration/wan/vybs-illustration-wan-22-a_Album_V1.safetensors 1b7241d315c7256e3792969f6aa5a275c18917e972fd759458d5b2129cdcaa34
illustration/wan/vybs-illustration-wan-22-b_Album_V1.safetensors 5c77561513005fc9d7cc362a3f88ccdb662ede775ba1168eefecea52e7d1316b

Once confirmed, rename to wan-22-high-noise / wan-22-low-noise.


Using these from fal.ai

fal-ai/flux-lora accepts a bare URL in loras[].path β€” no auth header, which is exactly why this repo is public.

These examples apply to the Flux LoRAs only. Qwen-Image, Krea 2, Ideogram v4, Z-Image and WAN each need their own base-matched fal endpoint; passing them to fal-ai/flux-lora will fail to load. Check fal's model catalogue for the current endpoint id per base.

JSON

{
  "prompt": "ohwx-Vybs-turbo-flux-trainer a toucan perched on a branch",
  "image_size": "square_hd",
  "num_inference_steps": 28,
  "guidance_scale": 3.5,
  "num_images": 1,
  "loras": [
    {
      "path": "https://huggingface.co/vybs-ai/vybs-loras/resolve/main/illustration/flux/vybs-illustration-turbo-flux_Album_V1.safetensors",
      "scale": 1.0
    }
  ]
}

JavaScript β€” @fal-ai/client

import { fal } from "@fal-ai/client";

fal.config({ credentials: process.env.FAL_KEY });

const LORA =
  "https://huggingface.co/vybs-ai/vybs-loras/resolve/main/" +
  "illustration/flux/vybs-illustration-turbo-flux_Album_V1.safetensors";

const result = await fal.subscribe("fal-ai/flux-lora", {
  input: {
    prompt: "ohwx-Vybs-turbo-flux-trainer a toucan perched on a branch",
    image_size: "square_hd",
    num_inference_steps: 28,
    guidance_scale: 3.5,
    loras: [{ path: LORA, scale: 1.0 }],
  },
  logs: true,
  onQueueUpdate: (u) => {
    if (u.status === "IN_PROGRESS") u.logs.map((l) => l.message).forEach(console.log);
  },
});

console.log(result.data.images[0].url);

Install with npm install @fal-ai/client.

Python β€” fal_client

import os
import fal_client

os.environ["FAL_KEY"] = "..."  # or export it in your shell

LORA_URL = (
    "https://huggingface.co/vybs-ai/vybs-loras/resolve/main/"
    "illustration/flux/vybs-illustration-turbo-flux_Album_V1.safetensors"
)

def on_queue_update(update):
    if isinstance(update, fal_client.InProgress):
        for log in update.logs:
            print(log["message"])

result = fal_client.subscribe(
    "fal-ai/flux-lora",
    arguments={
        "prompt": "ohwx-Vybs-turbo-flux-trainer a toucan perched on a branch",
        "image_size": "square_hd",
        "num_inference_steps": 28,
        "guidance_scale": 3.5,
        "loras": [{"path": LORA_URL, "scale": 1.0}],
    },
    with_logs=True,
    on_queue_update=on_queue_update,
)

print(result["images"][0]["url"])

Install with pip install fal-client.


Adding a new LoRA

hf upload vybs-ai/vybs-loras \
  <local-file> \
  <domain>/<base>/vybs-<domain>-<base>_<Dataset>_V<N>.safetensors

Then confirm the URL serves the file rather than an HTML page:

curl -sIL "https://huggingface.co/vybs-ai/vybs-loras/resolve/main/<path>" \
  | grep -iE "^HTTP|^content-type|^location"

Expect a final HTTP/2 200 with content-type: application/octet-stream (via a location: redirect to the CDN). content-type: text/html means the path is wrong or you used /blob/main/.

Then add a row to the Contents table above with the base model, trigger phrase and step count. The table is the only place that information survives.

Renaming an existing LoRA

Do not download and re-upload β€” Hugging Face can copy LFS files server-side, so a rename moves no bytes:

from huggingface_hub import HfApi, CommitOperationCopy, CommitOperationDelete

api = HfApi()
api.create_commit(
    "vybs-ai/vybs-loras",
    [
        CommitOperationCopy(src_path_in_repo="old/path.safetensors",
                            path_in_repo="new/path.safetensors"),
        CommitOperationDelete(path_in_repo="old/path.safetensors"),
    ],
    commit_message="Rename …",
)
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support