Add custom nodes, Civitai loras (LFS), and vast.ai setup script
Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled

Includes 30 custom nodes committed directly, 7 Civitai-exclusive
loras stored via Git LFS, and a setup script that installs all
dependencies and downloads HuggingFace-hosted models on vast.ai.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-09 00:55:26 +00:00
parent 2b70ab9ad0
commit f09734b0ee
2274 changed files with 748556 additions and 3 deletions

View File

@@ -0,0 +1,18 @@
<template>
<div class="rgthree-model-info-card">
<figure class="rgthree-model-info-card-media-container">
<video if="images.0 && images.0.type == 'video'" bind="images.0.url:src" loop autoplay></video>
<img if="images.0 && images.0.type != 'video'" bind="images.0.url:src" loading="lazy" />
</figure>
<div class="rgthree-model-info-card-data-container">
<div bind="name:text"></div>
<div bind="file:text"></div>
<div bind="getModified(modified):text"></div>
<div bind="sha256:text"></div>
<div bind="hasInfoFile"></div>
<a if="getCivitaiLink(links)" bind="getCivitaiLink(links):href">Civitai</a>
</div>
</div>
</template>

View File

@@ -0,0 +1,42 @@
$space: 8px;
.rgthree-model-info-card {
display: block;
padding: $space;
}
.-is-hidden {
display: none;
}
.rgthree-model-info-card {
display: flex;
flex-direction: row;
>.rgthree-model-info-card-media-container {
width: 100px;
height: auto;
display: block;
margin: 0 $space 0 0;
padding: 0;
flex: 0 0 auto;
>img,
>video {
width: 100%;
height: 100%;
object-fit: contain;
}
}
>.rgthree-model-info-card-data-container {
[bind*="name:"] {
font-size: 1.3em;
margin-bottom: calc($space / 2);
font-weight: bold;
}
}
}

View File

@@ -0,0 +1,53 @@
import {RgthreeCustomElement} from "rgthree/common/components/base_custom_element";
import {RgthreeModelInfo} from "typings/rgthree";
export class RgthreeModelInfoCard extends RgthreeCustomElement {
static override readonly NAME = "rgthree-model-info-card";
static override readonly TEMPLATES = "components/model-info-card.html";
static override readonly CSS = "components/model-info-card.css";
static override readonly USE_SHADOW = false;
private data: RgthreeModelInfo = {};
getModified(
value: number,
data: any,
currentElement: HTMLElement,
contextElement: RgthreeModelInfoCard,
) {
const date = new Date(value);
return String(`${date.toLocaleDateString()} ${date.toLocaleTimeString()}`);
}
getCivitaiLink(links: string[] | undefined) {
return links?.find((i) => i.includes("civitai.com/models")) || null;
}
setModelData(data: RgthreeModelInfo) {
this.data = data;
}
hasBaseModel(baseModel: string) {
return this.data.baseModel === baseModel;
}
hasData(field: string) {
// return !!this.data.hasInfoFile;
if (field === "civitai") {
return !!this.getCivitaiLink(this.data.links)?.length;
}
return !!(this.data as any)[field];
}
matchesQueryText(query: string) {
return (this.data.name || this.data.file)?.includes(query);
}
hide() {
this.classList.add("-is-hidden");
}
show() {
this.classList.remove("-is-hidden");
}
}