@mindstudio-ai/local-model-tunnel 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -115
- package/dist/chunk-PTK4SJQK.js +1768 -0
- package/dist/chunk-PTK4SJQK.js.map +1 -0
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +8 -517
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +24 -5
- package/dist/index.js +6 -13
- package/dist/index.js.map +1 -1
- package/dist/tui-QOSKXZWU.js +1560 -0
- package/dist/tui-QOSKXZWU.js.map +1 -0
- package/package.json +11 -4
- package/dist/api.d.ts +0 -88
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -168
- package/dist/api.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/config.d.ts +0 -27
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -109
- package/dist/config.js.map +0 -1
- package/dist/helpers.d.ts +0 -4
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js +0 -33
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/ollama.d.ts +0 -11
- package/dist/ollama.d.ts.map +0 -1
- package/dist/ollama.js +0 -36
- package/dist/ollama.js.map +0 -1
- package/dist/providers/comfyui.d.ts +0 -29
- package/dist/providers/comfyui.d.ts.map +0 -1
- package/dist/providers/comfyui.js +0 -359
- package/dist/providers/comfyui.js.map +0 -1
- package/dist/providers/index.d.ts +0 -63
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -126
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/lmstudio.d.ts +0 -11
- package/dist/providers/lmstudio.d.ts.map +0 -1
- package/dist/providers/lmstudio.js +0 -106
- package/dist/providers/lmstudio.js.map +0 -1
- package/dist/providers/ollama.d.ts +0 -11
- package/dist/providers/ollama.d.ts.map +0 -1
- package/dist/providers/ollama.js +0 -59
- package/dist/providers/ollama.js.map +0 -1
- package/dist/providers/stable-diffusion.d.ts +0 -41
- package/dist/providers/stable-diffusion.d.ts.map +0 -1
- package/dist/providers/stable-diffusion.js +0 -283
- package/dist/providers/stable-diffusion.js.map +0 -1
- package/dist/providers/types.d.ts +0 -196
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -19
- package/dist/providers/types.js.map +0 -1
- package/dist/quickstart/QuickstartScreen.d.ts +0 -5
- package/dist/quickstart/QuickstartScreen.d.ts.map +0 -1
- package/dist/quickstart/QuickstartScreen.js +0 -617
- package/dist/quickstart/QuickstartScreen.js.map +0 -1
- package/dist/quickstart/detect.d.ts +0 -22
- package/dist/quickstart/detect.d.ts.map +0 -1
- package/dist/quickstart/detect.js +0 -243
- package/dist/quickstart/detect.js.map +0 -1
- package/dist/quickstart/index.d.ts +0 -4
- package/dist/quickstart/index.d.ts.map +0 -1
- package/dist/quickstart/index.js +0 -274
- package/dist/quickstart/index.js.map +0 -1
- package/dist/quickstart/installers.d.ts +0 -109
- package/dist/quickstart/installers.d.ts.map +0 -1
- package/dist/quickstart/installers.js +0 -1296
- package/dist/quickstart/installers.js.map +0 -1
- package/dist/runner.d.ts +0 -19
- package/dist/runner.d.ts.map +0 -1
- package/dist/runner.js +0 -314
- package/dist/runner.js.map +0 -1
- package/dist/tui/App.d.ts +0 -7
- package/dist/tui/App.d.ts.map +0 -1
- package/dist/tui/App.js +0 -53
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/TunnelRunner.d.ts +0 -19
- package/dist/tui/TunnelRunner.d.ts.map +0 -1
- package/dist/tui/TunnelRunner.js +0 -228
- package/dist/tui/TunnelRunner.js.map +0 -1
- package/dist/tui/components/Header.d.ts +0 -9
- package/dist/tui/components/Header.d.ts.map +0 -1
- package/dist/tui/components/Header.js +0 -21
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/ModelsPanel.d.ts +0 -7
- package/dist/tui/components/ModelsPanel.d.ts.map +0 -1
- package/dist/tui/components/ModelsPanel.js +0 -28
- package/dist/tui/components/ModelsPanel.js.map +0 -1
- package/dist/tui/components/ProvidersPanel.d.ts +0 -7
- package/dist/tui/components/ProvidersPanel.d.ts.map +0 -1
- package/dist/tui/components/ProvidersPanel.js +0 -6
- package/dist/tui/components/ProvidersPanel.js.map +0 -1
- package/dist/tui/components/RequestLog.d.ts +0 -8
- package/dist/tui/components/RequestLog.d.ts.map +0 -1
- package/dist/tui/components/RequestLog.js +0 -60
- package/dist/tui/components/RequestLog.js.map +0 -1
- package/dist/tui/components/StatusBar.d.ts +0 -10
- package/dist/tui/components/StatusBar.d.ts.map +0 -1
- package/dist/tui/components/StatusBar.js +0 -7
- package/dist/tui/components/StatusBar.js.map +0 -1
- package/dist/tui/components/index.d.ts +0 -6
- package/dist/tui/components/index.d.ts.map +0 -1
- package/dist/tui/components/index.js +0 -6
- package/dist/tui/components/index.js.map +0 -1
- package/dist/tui/events.d.ts +0 -35
- package/dist/tui/events.d.ts.map +0 -1
- package/dist/tui/events.js +0 -26
- package/dist/tui/events.js.map +0 -1
- package/dist/tui/hooks/index.d.ts +0 -5
- package/dist/tui/hooks/index.d.ts.map +0 -1
- package/dist/tui/hooks/index.js +0 -5
- package/dist/tui/hooks/index.js.map +0 -1
- package/dist/tui/hooks/useConnection.d.ts +0 -10
- package/dist/tui/hooks/useConnection.d.ts.map +0 -1
- package/dist/tui/hooks/useConnection.js +0 -42
- package/dist/tui/hooks/useConnection.js.map +0 -1
- package/dist/tui/hooks/useModels.d.ts +0 -9
- package/dist/tui/hooks/useModels.d.ts.map +0 -1
- package/dist/tui/hooks/useModels.js +0 -28
- package/dist/tui/hooks/useModels.js.map +0 -1
- package/dist/tui/hooks/useProviders.d.ts +0 -9
- package/dist/tui/hooks/useProviders.d.ts.map +0 -1
- package/dist/tui/hooks/useProviders.js +0 -30
- package/dist/tui/hooks/useProviders.js.map +0 -1
- package/dist/tui/hooks/useRequests.d.ts +0 -9
- package/dist/tui/hooks/useRequests.d.ts.map +0 -1
- package/dist/tui/hooks/useRequests.js +0 -60
- package/dist/tui/hooks/useRequests.js.map +0 -1
- package/dist/tui/index.d.ts +0 -2
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js +0 -19
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/screens/ConfigScreen.d.ts +0 -2
- package/dist/tui/screens/ConfigScreen.d.ts.map +0 -1
- package/dist/tui/screens/ConfigScreen.js +0 -18
- package/dist/tui/screens/ConfigScreen.js.map +0 -1
- package/dist/tui/screens/HomeScreen.d.ts +0 -2
- package/dist/tui/screens/HomeScreen.d.ts.map +0 -1
- package/dist/tui/screens/HomeScreen.js +0 -156
- package/dist/tui/screens/HomeScreen.js.map +0 -1
- package/dist/tui/screens/ModelsScreen.d.ts +0 -2
- package/dist/tui/screens/ModelsScreen.d.ts.map +0 -1
- package/dist/tui/screens/ModelsScreen.js +0 -59
- package/dist/tui/screens/ModelsScreen.js.map +0 -1
- package/dist/tui/screens/StatusScreen.d.ts +0 -2
- package/dist/tui/screens/StatusScreen.d.ts.map +0 -1
- package/dist/tui/screens/StatusScreen.js +0 -53
- package/dist/tui/screens/StatusScreen.js.map +0 -1
- package/dist/tui/screens/index.d.ts +0 -9
- package/dist/tui/screens/index.d.ts.map +0 -1
- package/dist/tui/screens/index.js +0 -38
- package/dist/tui/screens/index.js.map +0 -1
- package/dist/tui/types.d.ts +0 -30
- package/dist/tui/types.d.ts.map +0 -1
- package/dist/tui/types.js +0 -2
- package/dist/tui/types.js.map +0 -1
- package/dist/workflows/index.d.ts +0 -47
- package/dist/workflows/index.d.ts.map +0 -1
- package/dist/workflows/index.js +0 -95
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/ltx-video.d.ts +0 -45
- package/dist/workflows/ltx-video.d.ts.map +0 -1
- package/dist/workflows/ltx-video.js +0 -114
- package/dist/workflows/ltx-video.js.map +0 -1
- package/dist/workflows/wan2.1.d.ts +0 -44
- package/dist/workflows/wan2.1.d.ts.map +0 -1
- package/dist/workflows/wan2.1.js +0 -119
- package/dist/workflows/wan2.1.js.map +0 -1
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from "react";
|
|
3
|
-
import { Box, Text, useApp } from "ink";
|
|
4
|
-
import Spinner from "ink-spinner";
|
|
5
|
-
import { verifyApiKey } from "../../api.js";
|
|
6
|
-
import { getApiKey, getEnvironment, getEnvironmentInfo } from "../../config.js";
|
|
7
|
-
import { getProviderStatuses, discoverAllModels, } from "../../providers/index.js";
|
|
8
|
-
import { LogoString } from "../../helpers.js";
|
|
9
|
-
export function StatusScreen() {
|
|
10
|
-
const { exit } = useApp();
|
|
11
|
-
const [connection, setConnection] = useState("checking");
|
|
12
|
-
const [providers, setProviders] = useState([]);
|
|
13
|
-
const [models, setModels] = useState([]);
|
|
14
|
-
const [loading, setLoading] = useState(true);
|
|
15
|
-
const environment = getEnvironment();
|
|
16
|
-
const info = getEnvironmentInfo();
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
async function loadStatus() {
|
|
19
|
-
// Check API key
|
|
20
|
-
const apiKey = getApiKey();
|
|
21
|
-
if (!apiKey) {
|
|
22
|
-
setConnection("not_set");
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
const isValid = await verifyApiKey();
|
|
26
|
-
setConnection(isValid ? "connected" : "invalid");
|
|
27
|
-
}
|
|
28
|
-
// Check providers
|
|
29
|
-
const statuses = await getProviderStatuses();
|
|
30
|
-
setProviders(statuses);
|
|
31
|
-
// Discover models
|
|
32
|
-
const discoveredModels = await discoverAllModels();
|
|
33
|
-
setModels(discoveredModels);
|
|
34
|
-
setLoading(false);
|
|
35
|
-
}
|
|
36
|
-
loadStatus();
|
|
37
|
-
}, []);
|
|
38
|
-
// Auto-exit after loading completes
|
|
39
|
-
useEffect(() => {
|
|
40
|
-
if (!loading) {
|
|
41
|
-
const timer = setTimeout(() => exit(), 50);
|
|
42
|
-
return () => clearTimeout(timer);
|
|
43
|
-
}
|
|
44
|
-
}, [loading, exit]);
|
|
45
|
-
const envColor = environment === "prod" ? "green" : "yellow";
|
|
46
|
-
const envBadge = environment === "prod" ? "PROD" : "LOCAL";
|
|
47
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { color: "cyan", children: LogoString }), _jsxs(Box, { marginTop: 1, marginBottom: 1, children: [_jsx(Text, { bold: true, children: "MindStudio Local Tunnel " }), _jsxs(Text, { color: envColor, bold: true, children: ["[", envBadge, "]"] })] }), _jsxs(Text, { color: "gray", children: ["API: ", info.apiBaseUrl] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "white", children: "Connection" }), _jsx(Box, { marginTop: 1, children: connection === "checking" ? (_jsxs(Text, { color: "cyan", children: [_jsx(Spinner, { type: "dots" }), " Checking..."] })) : connection === "connected" ? (_jsx(Text, { color: "green", children: "\u25CF MindStudio: Connected" })) : connection === "invalid" ? (_jsx(Text, { color: "red", children: "\u25CF MindStudio: Invalid API key" })) : (_jsx(Text, { color: "yellow", children: "\u25CB MindStudio: Not authenticated" })) })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "white", children: "Providers" }), loading ? (_jsxs(Text, { color: "cyan", children: [_jsx(Spinner, { type: "dots" }), " Loading..."] })) : (_jsx(Box, { flexDirection: "column", marginTop: 1, children: providers.map(({ provider, running }) => (_jsxs(Box, { children: [_jsxs(Text, { color: running ? "green" : "gray", children: [running ? "●" : "○", " ", provider.displayName, ":", " "] }), _jsx(Text, { color: running ? "green" : "gray", children: running ? "Running" : "Not running" })] }, provider.name))) }))] }), models.length > 0 && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "white", children: "Models" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [models.filter((m) => m.capability === "text").length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "Text Models" }), models
|
|
48
|
-
.filter((m) => m.capability === "text")
|
|
49
|
-
.map((model) => (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: " \u25CF " }), _jsxs(Text, { children: [model.name, " "] }), _jsxs(Text, { color: "gray", children: ["[", model.provider, "]"] })] }, model.name)))] })), models.filter((m) => m.capability === "image").length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "magenta", children: "Image Models" }), models
|
|
50
|
-
.filter((m) => m.capability === "image")
|
|
51
|
-
.map((model) => (_jsxs(Box, { children: [_jsx(Text, { color: "magenta", children: " \u25CF " }), _jsxs(Text, { children: [model.name, " "] }), _jsxs(Text, { color: "gray", children: ["[", model.provider, "]"] })] }, model.name)))] }))] })] }))] }));
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=StatusScreen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/StatusScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { StatusScreen } from "./StatusScreen.js";
|
|
2
|
-
export { ConfigScreen } from "./ConfigScreen.js";
|
|
3
|
-
export { HomeScreen } from "./HomeScreen.js";
|
|
4
|
-
export { ModelsScreen } from "./ModelsScreen.js";
|
|
5
|
-
export declare function showStatusScreen(): Promise<void>;
|
|
6
|
-
export declare function showConfigScreen(): Promise<void>;
|
|
7
|
-
export declare function showModelsScreen(): Promise<void>;
|
|
8
|
-
export declare function showHomeScreen(): Promise<string | null>;
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ7D"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { render } from "ink";
|
|
3
|
-
import { StatusScreen } from "./StatusScreen.js";
|
|
4
|
-
import { ConfigScreen } from "./ConfigScreen.js";
|
|
5
|
-
import { HomeScreen } from "./HomeScreen.js";
|
|
6
|
-
import { ModelsScreen } from "./ModelsScreen.js";
|
|
7
|
-
export { StatusScreen } from "./StatusScreen.js";
|
|
8
|
-
export { ConfigScreen } from "./ConfigScreen.js";
|
|
9
|
-
export { HomeScreen } from "./HomeScreen.js";
|
|
10
|
-
export { ModelsScreen } from "./ModelsScreen.js";
|
|
11
|
-
function clearTerminal() {
|
|
12
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
13
|
-
}
|
|
14
|
-
export async function showStatusScreen() {
|
|
15
|
-
clearTerminal();
|
|
16
|
-
const { waitUntilExit } = render(React.createElement(StatusScreen));
|
|
17
|
-
await waitUntilExit();
|
|
18
|
-
}
|
|
19
|
-
export async function showConfigScreen() {
|
|
20
|
-
clearTerminal();
|
|
21
|
-
const { waitUntilExit } = render(React.createElement(ConfigScreen));
|
|
22
|
-
await waitUntilExit();
|
|
23
|
-
}
|
|
24
|
-
export async function showModelsScreen() {
|
|
25
|
-
clearTerminal();
|
|
26
|
-
const { waitUntilExit } = render(React.createElement(ModelsScreen));
|
|
27
|
-
await waitUntilExit();
|
|
28
|
-
}
|
|
29
|
-
export async function showHomeScreen() {
|
|
30
|
-
clearTerminal();
|
|
31
|
-
const { waitUntilExit } = render(React.createElement(HomeScreen));
|
|
32
|
-
await waitUntilExit();
|
|
33
|
-
// Return the next command to run, if any
|
|
34
|
-
const nextCommand = process.env.MINDSTUDIO_NEXT_COMMAND;
|
|
35
|
-
delete process.env.MINDSTUDIO_NEXT_COMMAND;
|
|
36
|
-
return nextCommand || null;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/screens/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,SAAS,aAAa;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,MAAM,aAAa,EAAE,CAAC;IACtB,yCAAyC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACxD,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC3C,OAAO,WAAW,IAAI,IAAI,CAAC;AAC7B,CAAC"}
|
package/dist/tui/types.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { Provider, LocalModel } from "../providers/types.js";
|
|
2
|
-
export type ConnectionStatus = "connecting" | "connected" | "disconnected" | "error";
|
|
3
|
-
export interface ProviderStatus {
|
|
4
|
-
provider: Provider;
|
|
5
|
-
running: boolean;
|
|
6
|
-
}
|
|
7
|
-
export interface RequestLogEntry {
|
|
8
|
-
id: string;
|
|
9
|
-
modelId: string;
|
|
10
|
-
requestType: "llm_chat" | "image_generation" | "video_generation";
|
|
11
|
-
status: "processing" | "completed" | "failed";
|
|
12
|
-
startTime: number;
|
|
13
|
-
endTime?: number;
|
|
14
|
-
duration?: number;
|
|
15
|
-
result?: {
|
|
16
|
-
chars?: number;
|
|
17
|
-
imageSize?: number;
|
|
18
|
-
};
|
|
19
|
-
error?: string;
|
|
20
|
-
}
|
|
21
|
-
export interface AppState {
|
|
22
|
-
connection: ConnectionStatus;
|
|
23
|
-
environment: "prod" | "local";
|
|
24
|
-
providers: ProviderStatus[];
|
|
25
|
-
models: LocalModel[];
|
|
26
|
-
requests: RequestLogEntry[];
|
|
27
|
-
activeRequests: number;
|
|
28
|
-
isPolling: boolean;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/tui/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,WAAW,GACX,cAAc,GACd,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IAClE,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB"}
|
package/dist/tui/types.js
DELETED
package/dist/tui/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow registry - maps model filenames to workflow builders.
|
|
3
|
-
*/
|
|
4
|
-
export type ModelFamily = "ltx-video" | "wan2.1";
|
|
5
|
-
export interface WorkflowConfig {
|
|
6
|
-
family: ModelFamily;
|
|
7
|
-
displayName: string;
|
|
8
|
-
/** Build the workflow JSON for ComfyUI's /prompt endpoint */
|
|
9
|
-
buildWorkflow: (params: {
|
|
10
|
-
model: string;
|
|
11
|
-
prompt: string;
|
|
12
|
-
negativePrompt: string;
|
|
13
|
-
width: number;
|
|
14
|
-
height: number;
|
|
15
|
-
numFrames: number;
|
|
16
|
-
fps: number;
|
|
17
|
-
steps: number;
|
|
18
|
-
cfgScale: number;
|
|
19
|
-
seed: number;
|
|
20
|
-
}) => Record<string, unknown>;
|
|
21
|
-
/** Node ID that produces the output (for fetching results from /history) */
|
|
22
|
-
outputNodeId: string;
|
|
23
|
-
/** Default parameters */
|
|
24
|
-
defaults: {
|
|
25
|
-
width: number;
|
|
26
|
-
height: number;
|
|
27
|
-
numFrames: number;
|
|
28
|
-
fps: number;
|
|
29
|
-
steps: number;
|
|
30
|
-
cfgScale: number;
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Find the workflow configuration for a given model filename.
|
|
35
|
-
*/
|
|
36
|
-
export declare function getWorkflowForModel(modelFilename: string): WorkflowConfig | null;
|
|
37
|
-
/**
|
|
38
|
-
* Check if a model filename is recognized as a video model.
|
|
39
|
-
*/
|
|
40
|
-
export declare function isKnownVideoModel(modelFilename: string): boolean;
|
|
41
|
-
/**
|
|
42
|
-
* Get all supported model families.
|
|
43
|
-
*/
|
|
44
|
-
export declare function getSupportedFamilies(): WorkflowConfig[];
|
|
45
|
-
export { buildLtxVideoWorkflow } from "./ltx-video.js";
|
|
46
|
-
export { buildWan21Workflow } from "./wan2.1.js";
|
|
47
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,aAAa,EAAE,CAAC,MAAM,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAyED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,GACpB,cAAc,GAAG,IAAI,CAOvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,EAAE,CAEvD;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/workflows/index.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow registry - maps model filenames to workflow builders.
|
|
3
|
-
*/
|
|
4
|
-
import { buildLtxVideoWorkflow, LTX_VIDEO_OUTPUT_NODE, LTX_VIDEO_DEFAULTS, } from "./ltx-video.js";
|
|
5
|
-
import { buildWan21Workflow, WAN21_OUTPUT_NODE, WAN21_DEFAULTS, } from "./wan2.1.js";
|
|
6
|
-
/**
|
|
7
|
-
* Known model files and their workflow configurations.
|
|
8
|
-
* Keys are filename patterns (matched case-insensitively).
|
|
9
|
-
*/
|
|
10
|
-
const MODEL_REGISTRY = [
|
|
11
|
-
// LTX-Video models
|
|
12
|
-
{
|
|
13
|
-
pattern: /ltx[_-]?video/i,
|
|
14
|
-
config: {
|
|
15
|
-
family: "ltx-video",
|
|
16
|
-
displayName: "LTX-Video",
|
|
17
|
-
buildWorkflow: (params) => buildLtxVideoWorkflow({
|
|
18
|
-
model: params.model,
|
|
19
|
-
prompt: params.prompt,
|
|
20
|
-
negativePrompt: params.negativePrompt,
|
|
21
|
-
width: params.width,
|
|
22
|
-
height: params.height,
|
|
23
|
-
numFrames: params.numFrames,
|
|
24
|
-
fps: params.fps,
|
|
25
|
-
steps: params.steps,
|
|
26
|
-
cfgScale: params.cfgScale,
|
|
27
|
-
seed: params.seed,
|
|
28
|
-
}),
|
|
29
|
-
outputNodeId: LTX_VIDEO_OUTPUT_NODE,
|
|
30
|
-
defaults: {
|
|
31
|
-
width: LTX_VIDEO_DEFAULTS.width,
|
|
32
|
-
height: LTX_VIDEO_DEFAULTS.height,
|
|
33
|
-
numFrames: LTX_VIDEO_DEFAULTS.numFrames,
|
|
34
|
-
fps: LTX_VIDEO_DEFAULTS.fps,
|
|
35
|
-
steps: LTX_VIDEO_DEFAULTS.steps,
|
|
36
|
-
cfgScale: LTX_VIDEO_DEFAULTS.cfgScale,
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
// Wan 2.1 models
|
|
41
|
-
{
|
|
42
|
-
pattern: /wan2[\._]?1/i,
|
|
43
|
-
config: {
|
|
44
|
-
family: "wan2.1",
|
|
45
|
-
displayName: "Wan 2.1",
|
|
46
|
-
buildWorkflow: (params) => buildWan21Workflow({
|
|
47
|
-
model: params.model,
|
|
48
|
-
prompt: params.prompt,
|
|
49
|
-
negativePrompt: params.negativePrompt,
|
|
50
|
-
width: params.width,
|
|
51
|
-
height: params.height,
|
|
52
|
-
numFrames: params.numFrames,
|
|
53
|
-
fps: params.fps,
|
|
54
|
-
steps: params.steps,
|
|
55
|
-
cfgScale: params.cfgScale,
|
|
56
|
-
seed: params.seed,
|
|
57
|
-
}),
|
|
58
|
-
outputNodeId: WAN21_OUTPUT_NODE,
|
|
59
|
-
defaults: {
|
|
60
|
-
width: WAN21_DEFAULTS.width,
|
|
61
|
-
height: WAN21_DEFAULTS.height,
|
|
62
|
-
numFrames: WAN21_DEFAULTS.numFrames,
|
|
63
|
-
fps: WAN21_DEFAULTS.fps,
|
|
64
|
-
steps: WAN21_DEFAULTS.steps,
|
|
65
|
-
cfgScale: WAN21_DEFAULTS.cfgScale,
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
/**
|
|
71
|
-
* Find the workflow configuration for a given model filename.
|
|
72
|
-
*/
|
|
73
|
-
export function getWorkflowForModel(modelFilename) {
|
|
74
|
-
for (const entry of MODEL_REGISTRY) {
|
|
75
|
-
if (entry.pattern.test(modelFilename)) {
|
|
76
|
-
return entry.config;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Check if a model filename is recognized as a video model.
|
|
83
|
-
*/
|
|
84
|
-
export function isKnownVideoModel(modelFilename) {
|
|
85
|
-
return getWorkflowForModel(modelFilename) !== null;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Get all supported model families.
|
|
89
|
-
*/
|
|
90
|
-
export function getSupportedFamilies() {
|
|
91
|
-
return MODEL_REGISTRY.map((entry) => entry.config);
|
|
92
|
-
}
|
|
93
|
-
export { buildLtxVideoWorkflow } from "./ltx-video.js";
|
|
94
|
-
export { buildWan21Workflow } from "./wan2.1.js";
|
|
95
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LTX-Video text-to-video workflow template for ComfyUI.
|
|
3
|
-
*
|
|
4
|
-
* Based on the official ComfyUI LTX-Video example workflow.
|
|
5
|
-
* The checkpoint contains the MODEL + VAE but NOT the text encoder.
|
|
6
|
-
* A separate CLIPLoader with type "ltxv" loads the T5-XXL text encoder.
|
|
7
|
-
*
|
|
8
|
-
* Model: ltx-video-2b-v0.9.5.safetensors in models/checkpoints/
|
|
9
|
-
* Text encoder: t5xxl_fp16.safetensors in models/text_encoders/
|
|
10
|
-
*/
|
|
11
|
-
export interface LtxVideoParams {
|
|
12
|
-
/** Model checkpoint filename (in models/checkpoints/) */
|
|
13
|
-
model: string;
|
|
14
|
-
/** Text encoder filename (in models/text_encoders/) */
|
|
15
|
-
textEncoder: string;
|
|
16
|
-
/** Positive prompt */
|
|
17
|
-
prompt: string;
|
|
18
|
-
/** Negative prompt */
|
|
19
|
-
negativePrompt: string;
|
|
20
|
-
/** Video width */
|
|
21
|
-
width: number;
|
|
22
|
-
/** Video height */
|
|
23
|
-
height: number;
|
|
24
|
-
/** Number of frames to generate */
|
|
25
|
-
numFrames: number;
|
|
26
|
-
/** Frames per second for output */
|
|
27
|
-
fps: number;
|
|
28
|
-
/** Number of sampling steps */
|
|
29
|
-
steps: number;
|
|
30
|
-
/** CFG scale */
|
|
31
|
-
cfgScale: number;
|
|
32
|
-
/** Random seed (-1 for random) */
|
|
33
|
-
seed: number;
|
|
34
|
-
}
|
|
35
|
-
export declare const LTX_VIDEO_DEFAULTS: LtxVideoParams;
|
|
36
|
-
/**
|
|
37
|
-
* Build an LTX-Video text-to-video workflow in ComfyUI API format.
|
|
38
|
-
* Follows the official ComfyUI example workflow structure.
|
|
39
|
-
*/
|
|
40
|
-
export declare function buildLtxVideoWorkflow(params: Partial<LtxVideoParams> & {
|
|
41
|
-
prompt: string;
|
|
42
|
-
}): Record<string, unknown>;
|
|
43
|
-
/** Output node ID for fetching results */
|
|
44
|
-
export declare const LTX_VIDEO_OUTPUT_NODE = "8";
|
|
45
|
-
//# sourceMappingURL=ltx-video.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ltx-video.d.ts","sourceRoot":"","sources":["../../src/workflows/ltx-video.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,kBAAkB,EAAE,cAahC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoFzB;AAED,0CAA0C;AAC1C,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LTX-Video text-to-video workflow template for ComfyUI.
|
|
3
|
-
*
|
|
4
|
-
* Based on the official ComfyUI LTX-Video example workflow.
|
|
5
|
-
* The checkpoint contains the MODEL + VAE but NOT the text encoder.
|
|
6
|
-
* A separate CLIPLoader with type "ltxv" loads the T5-XXL text encoder.
|
|
7
|
-
*
|
|
8
|
-
* Model: ltx-video-2b-v0.9.5.safetensors in models/checkpoints/
|
|
9
|
-
* Text encoder: t5xxl_fp16.safetensors in models/text_encoders/
|
|
10
|
-
*/
|
|
11
|
-
export const LTX_VIDEO_DEFAULTS = {
|
|
12
|
-
model: "ltx-video-2b-v0.9.5.safetensors",
|
|
13
|
-
textEncoder: "t5xxl_fp16.safetensors",
|
|
14
|
-
prompt: "",
|
|
15
|
-
negativePrompt: "worst quality, blurry, distorted, disfigured, motion smear, motion artifacts",
|
|
16
|
-
width: 512,
|
|
17
|
-
height: 320,
|
|
18
|
-
numFrames: 41,
|
|
19
|
-
fps: 8,
|
|
20
|
-
steps: 20,
|
|
21
|
-
cfgScale: 3.0,
|
|
22
|
-
seed: -1,
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Build an LTX-Video text-to-video workflow in ComfyUI API format.
|
|
26
|
-
* Follows the official ComfyUI example workflow structure.
|
|
27
|
-
*/
|
|
28
|
-
export function buildLtxVideoWorkflow(params) {
|
|
29
|
-
const p = { ...LTX_VIDEO_DEFAULTS, ...params };
|
|
30
|
-
const seed = p.seed === -1 ? Math.floor(Math.random() * 2 ** 32) : p.seed;
|
|
31
|
-
return {
|
|
32
|
-
// Node 1: Load checkpoint (MODEL + VAE, CLIP output unused)
|
|
33
|
-
"1": {
|
|
34
|
-
class_type: "CheckpointLoaderSimple",
|
|
35
|
-
inputs: {
|
|
36
|
-
ckpt_name: p.model,
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
// Node 2: Load text encoder (T5-XXL) separately
|
|
40
|
-
"2": {
|
|
41
|
-
class_type: "CLIPLoader",
|
|
42
|
-
inputs: {
|
|
43
|
-
clip_name: p.textEncoder,
|
|
44
|
-
type: "ltxv",
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
// Node 3: Positive prompt encoding (CLIP from CLIPLoader, NOT from checkpoint)
|
|
48
|
-
"3": {
|
|
49
|
-
class_type: "CLIPTextEncode",
|
|
50
|
-
inputs: {
|
|
51
|
-
text: p.prompt,
|
|
52
|
-
clip: ["2", 0],
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
// Node 4: Negative prompt encoding
|
|
56
|
-
"4": {
|
|
57
|
-
class_type: "CLIPTextEncode",
|
|
58
|
-
inputs: {
|
|
59
|
-
text: p.negativePrompt,
|
|
60
|
-
clip: ["2", 0],
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
// Node 5: Empty latent video
|
|
64
|
-
"5": {
|
|
65
|
-
class_type: "EmptyLTXVLatentVideo",
|
|
66
|
-
inputs: {
|
|
67
|
-
width: p.width,
|
|
68
|
-
height: p.height,
|
|
69
|
-
length: p.numFrames,
|
|
70
|
-
batch_size: 1,
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
// Node 6: KSampler
|
|
74
|
-
"6": {
|
|
75
|
-
class_type: "KSampler",
|
|
76
|
-
inputs: {
|
|
77
|
-
model: ["1", 0],
|
|
78
|
-
positive: ["3", 0],
|
|
79
|
-
negative: ["4", 0],
|
|
80
|
-
latent_image: ["5", 0],
|
|
81
|
-
seed: seed,
|
|
82
|
-
steps: p.steps,
|
|
83
|
-
cfg: p.cfgScale,
|
|
84
|
-
sampler_name: "euler",
|
|
85
|
-
scheduler: "normal",
|
|
86
|
-
denoise: 1.0,
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
// Node 7: VAE Decode (VAE from checkpoint, slot 2)
|
|
90
|
-
"7": {
|
|
91
|
-
class_type: "VAEDecode",
|
|
92
|
-
inputs: {
|
|
93
|
-
samples: ["6", 0],
|
|
94
|
-
vae: ["1", 2],
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
// Node 8: Save as MP4 via VideoHelperSuite
|
|
98
|
-
"8": {
|
|
99
|
-
class_type: "VHS_VideoCombine",
|
|
100
|
-
inputs: {
|
|
101
|
-
images: ["7", 0],
|
|
102
|
-
frame_rate: p.fps,
|
|
103
|
-
loop_count: 0,
|
|
104
|
-
filename_prefix: "ltxv_output",
|
|
105
|
-
format: "video/h264-mp4",
|
|
106
|
-
pingpong: false,
|
|
107
|
-
save_output: true,
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/** Output node ID for fetching results */
|
|
113
|
-
export const LTX_VIDEO_OUTPUT_NODE = "8";
|
|
114
|
-
//# sourceMappingURL=ltx-video.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ltx-video.js","sourceRoot":"","sources":["../../src/workflows/ltx-video.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wan2.1 text-to-video workflow template for ComfyUI.
|
|
3
|
-
*
|
|
4
|
-
* Uses ComfyUI's native Wan 2.1 support (no custom nodes required).
|
|
5
|
-
* Diffusion model: wan2.1_t2v_1.3B_fp16.safetensors in models/diffusion_models/
|
|
6
|
-
* Text encoder: umt5_xxl_fp8_e4m3fn_scaled.safetensors in models/text_encoders/
|
|
7
|
-
* VAE: wan_2.1_vae.safetensors in models/vae/
|
|
8
|
-
*/
|
|
9
|
-
export interface Wan21Params {
|
|
10
|
-
/** Diffusion model filename */
|
|
11
|
-
model: string;
|
|
12
|
-
/** Text encoder filename */
|
|
13
|
-
textEncoder: string;
|
|
14
|
-
/** VAE filename */
|
|
15
|
-
vae: string;
|
|
16
|
-
/** Positive prompt */
|
|
17
|
-
prompt: string;
|
|
18
|
-
/** Negative prompt */
|
|
19
|
-
negativePrompt: string;
|
|
20
|
-
/** Video width */
|
|
21
|
-
width: number;
|
|
22
|
-
/** Video height */
|
|
23
|
-
height: number;
|
|
24
|
-
/** Number of frames to generate */
|
|
25
|
-
numFrames: number;
|
|
26
|
-
/** Frames per second for output */
|
|
27
|
-
fps: number;
|
|
28
|
-
/** Number of sampling steps */
|
|
29
|
-
steps: number;
|
|
30
|
-
/** CFG scale */
|
|
31
|
-
cfgScale: number;
|
|
32
|
-
/** Random seed (-1 for random) */
|
|
33
|
-
seed: number;
|
|
34
|
-
}
|
|
35
|
-
export declare const WAN21_DEFAULTS: Wan21Params;
|
|
36
|
-
/**
|
|
37
|
-
* Build a Wan2.1 text-to-video workflow in ComfyUI API format.
|
|
38
|
-
*/
|
|
39
|
-
export declare function buildWan21Workflow(params: Partial<Wan21Params> & {
|
|
40
|
-
prompt: string;
|
|
41
|
-
}): Record<string, unknown>;
|
|
42
|
-
/** Output node ID for fetching results */
|
|
43
|
-
export declare const WAN21_OUTPUT_NODE = "9";
|
|
44
|
-
//# sourceMappingURL=wan2.1.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wan2.1.d.ts","sourceRoot":"","sources":["../../src/workflows/wan2.1.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,cAAc,EAAE,WAa5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2FzB;AAED,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,MAAM,CAAC"}
|