diff --git a/docs/images/settings-refresh-preview.png b/docs/images/settings-refresh-preview.png new file mode 100644 index 0000000..7f40df7 Binary files /dev/null and b/docs/images/settings-refresh-preview.png differ diff --git a/docs/user-guide/custom-models.md b/docs/user-guide/custom-models.md index 2122ad5..6c49a28 100644 --- a/docs/user-guide/custom-models.md +++ b/docs/user-guide/custom-models.md @@ -1,6 +1,6 @@ # Using your own weights: base model / VAE / text encoder -In Settings → **Training Models**, every category of weights can be swapped out from the official download for a file you already have on disk: +In Settings → **Models**, every category of weights can be swapped out from the official download for a file you already have on disk: | Weight | Form | Card | |---|---|---| @@ -14,7 +14,7 @@ In Settings → **Training Models**, every category of weights can be swapped ou 2. The selected path appears as a "local" candidate row below the official variant; click its radio button to make it the default. 3. To stop using it, click **Unregister** — this only removes it from the list, **the file on disk is left untouched**. If the unregistered entry was the currently selected one, the selection automatically falls back to the official weights. -> **The path is relative to the machine running Studio.** In local mode that's your own computer; in cloud modes like Colab / Kaggle, the file picker browses the container's disk, so a local `D:\...` path doesn't exist there — upload the weights to the cloud drive (or the Drive mount point) first, then select them. The gray text next to the button tells you which case you're in. +> **The path is relative to the machine running Studio.** In local mode that's your own computer; in cloud modes like Colab / Kaggle, the file picker browses the container's disk, so a local `D:\...` path doesn't exist there — upload the weights to the cloud drive (or the Drive mount point) first, then select them. Hover over the file or directory button for the hint about your current mode. If a file is deleted or moved, resolution automatically falls back to the official location instead of writing a dead path into the training config; the corresponding row on the card is marked "file not found" and its radio button is grayed out. diff --git a/studio/web/index.html b/studio/web/index.html index d3e5633..7b505b7 100644 --- a/studio/web/index.html +++ b/studio/web/index.html @@ -6,18 +6,9 @@ AnimaTrainHub - - + + +
diff --git a/studio/web/public/icons/noal-180.png b/studio/web/public/icons/noal-180.png new file mode 100644 index 0000000..7776984 Binary files /dev/null and b/studio/web/public/icons/noal-180.png differ diff --git a/studio/web/public/icons/noal.ico b/studio/web/public/icons/noal.ico new file mode 100644 index 0000000..186babc Binary files /dev/null and b/studio/web/public/icons/noal.ico differ diff --git a/studio/web/public/icons/noal.png b/studio/web/public/icons/noal.png new file mode 100644 index 0000000..ca54df9 Binary files /dev/null and b/studio/web/public/icons/noal.png differ diff --git a/studio/web/public/icons/noal_conf2.png b/studio/web/public/icons/noal_conf2.png deleted file mode 100644 index a3bafba..0000000 Binary files a/studio/web/public/icons/noal_conf2.png and /dev/null differ diff --git a/studio/web/public/icons/noal_confused.png b/studio/web/public/icons/noal_confused.png deleted file mode 100644 index f4e9876..0000000 Binary files a/studio/web/public/icons/noal_confused.png and /dev/null differ diff --git a/studio/web/public/icons/noal_emb.png b/studio/web/public/icons/noal_emb.png deleted file mode 100644 index 7faafee..0000000 Binary files a/studio/web/public/icons/noal_emb.png and /dev/null differ diff --git a/studio/web/public/icons/noal_heart.png b/studio/web/public/icons/noal_heart.png deleted file mode 100644 index 9b543ad..0000000 Binary files a/studio/web/public/icons/noal_heart.png and /dev/null differ diff --git a/studio/web/public/icons/noal_sad.png b/studio/web/public/icons/noal_sad.png deleted file mode 100644 index fd29661..0000000 Binary files a/studio/web/public/icons/noal_sad.png and /dev/null differ diff --git a/studio/web/public/icons/noal_shock.png b/studio/web/public/icons/noal_shock.png deleted file mode 100644 index 1566b47..0000000 Binary files a/studio/web/public/icons/noal_shock.png and /dev/null differ diff --git a/studio/web/public/icons/noal_shy_mad.png b/studio/web/public/icons/noal_shy_mad.png deleted file mode 100644 index df82de4..0000000 Binary files a/studio/web/public/icons/noal_shy_mad.png and /dev/null differ diff --git a/studio/web/public/icons/noal_shy_mad2.png b/studio/web/public/icons/noal_shy_mad2.png deleted file mode 100644 index 05d20bc..0000000 Binary files a/studio/web/public/icons/noal_shy_mad2.png and /dev/null differ diff --git a/studio/web/public/icons/noal_sleepy.png b/studio/web/public/icons/noal_sleepy.png deleted file mode 100644 index 3b3f098..0000000 Binary files a/studio/web/public/icons/noal_sleepy.png and /dev/null differ diff --git a/studio/web/public/icons/noal_smug.png b/studio/web/public/icons/noal_smug.png deleted file mode 100644 index 0ff6bc9..0000000 Binary files a/studio/web/public/icons/noal_smug.png and /dev/null differ diff --git a/studio/web/src/components/LocalModelSources.tsx b/studio/web/src/components/LocalModelSources.tsx index b9bad24..6ea0322 100644 --- a/studio/web/src/components/LocalModelSources.tsx +++ b/studio/web/src/components/LocalModelSources.tsx @@ -100,7 +100,7 @@ export function LocalModelRows({ } return ( - )} -
-

{t('settings.manualUrl')}

-
+
+
{t('settings.manualUrl')}
+
setManualUrl(e.target.value)} placeholder="https://github.com/.../flash_attn-...whl" - className={`${textInputClass} flex-1`} + className={`${textInputClass} ds-mono`} />
@@ -2129,7 +2065,7 @@ function FlashAttentionSection() { )} )}
- + ) } @@ -2188,41 +2124,29 @@ function XformersSection() { const hasIssue = !!error return ( -
- - ▸ -

- -

, code: }} />

-

{t('settings.xformersHelp2')}

-

{t('settings.xformersHelp3')}

- } - /> -

- {t('settings.xformersSubtitle')} - {statusLabel} -
- -
- {error &&
{error}
} - {!error && !status &&
{t('settings.loadingStatus')}
} + +

{t('settings.xformersSubtitle')}

+

, code: }} />

+

{t('settings.xformersHelp2')}

+

{t('settings.xformersHelp3')}

+ } + open={!!hasIssue} + extra={{statusLabel}} + > +
+ {error &&
{error}
} + {!error && !status &&
{t('settings.loadingStatus')}
} {status && (<> -
- xformers: - - {status.installed ? `v${status.version ?? '?'}` : t('settings.notInstalledParen')} - - {status.installed && } -
- -
+ +
- + void refresh()} disabled={busy} />
)}
-
+ ) } diff --git a/studio/web/src/styles/ds.css b/studio/web/src/styles/ds.css index 15e7744..75d349a 100644 --- a/studio/web/src/styles/ds.css +++ b/studio/web/src/styles/ds.css @@ -1002,3 +1002,48 @@ main,.ds-train-scroll,.ds-scroll,.ds-pp-side,.ds-crop-side,.ds-set-rail,.overflo /* the tab strip's own hairline is the only line under the tabs */ .ds-tabs + .ds-fgroups,.ds-tabs + * + .ds-fgroups{border-top:0} + +/* ── Settings v2: the same grey cards on white as the training config ── */ +.ds-set-scroll{overflow-y:auto;min-height:0;background:var(--card)} +.ds-set-cards{display:flex;flex-direction:column;gap:12px;padding:16px 18px 28px;min-width:0} +.ds-set-card{scroll-margin-top:12px} +.ds-set-card h2.ds-fgroup-title{margin:0} +.ds-set-extra{margin-left:auto;display:flex;align-items:center;gap:6px;min-width:0} +.ds-set-pad{display:flex;flex-direction:column;gap:10px;padding:10px 16px 16px;font-size:12.5px;min-width:0} +.ds-set-pad + .ds-set-pad,.ds-set-pad + .ds-fgrid,.ds-fgrid + .ds-set-pad{padding-top:0} +.ds-set-fold > summary{cursor:pointer;list-style:none;padding-bottom:14px;user-select:none} +.ds-set-fold > summary::-webkit-details-marker{display:none} +.ds-set-fold[open] > summary{padding-bottom:2px} +.ds-set-chev{color:var(--ink-3);flex:none;transition:transform .15s ease} +.ds-set-fold[open] .ds-set-chev{transform:rotate(90deg)} +.ds-set-inline{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0} +.ds-set-inline > .ds-inp{flex:1;min-width:160px;width:auto} +.ds-set-sub{display:flex;flex-direction:column;gap:10px;padding-top:12px;border-top:1px solid var(--line)} +.ds-set-inline.ds-set-sub{flex-direction:row} +.ds-set-list{list-style:none;margin:0;padding:3px;display:flex;flex-direction:column;gap:2px;background:var(--card);border:1px solid var(--line);border-radius:10px} +.ds-set-list .ds-model-row{flex-wrap:nowrap;min-height:38px;padding:5px 6px 5px 10px;gap:8px} +.ds-model-row input[type=radio]{flex:none;margin:0} +.ds-model-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:12px;color:var(--ink)} +.ds-model-row .ds-badge{flex:none} +.ds-set-minisel{height:26px;padding:0 6px;width:92px;flex:none;font-size:11.5px} +.ds-set-kv{display:flex;flex-wrap:wrap;gap:6px 18px;padding:9px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px;font-size:12px} +.ds-set-kv-k{color:var(--ink-3);margin-right:6px} +.ds-set-kv code{font-family:var(--mono);color:var(--ink)} +.ds-ctl.ds-is-on{box-shadow:inset 0 0 0 1px var(--green-600);color:var(--green-text)} +.ds-set-url{flex:1;min-width:200px;height:32px;display:flex;align-items:center;padding:0 11px;border-radius:var(--r-ctl);background:var(--card);border:1px solid var(--line);font-family:var(--mono);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.ds-set-link{margin-left:auto;font-size:11.5px;color:var(--ink-3);text-decoration:underline;text-underline-offset:2px} +.ds-set-link:hover{color:var(--ink)} +.ds-set-note-row{align-items:center} +.ds-set-empty{font-size:12px;color:var(--ink-3)} +.ds-set-box{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:9px 12px;display:flex;flex-direction:column;gap:6px} +.ds-set-log{margin:0;max-height:128px;overflow:auto;white-space:pre-wrap;font-family:var(--mono);font-size:11px;color:var(--ink-3)} +.ds-set-errline{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--red-text);font-size:11.5px} +.ds-set-warnline{color:var(--amber-text);font-size:10.5px} +label.ds-optcard{cursor:pointer} +.ds-optcard.ds-is-locked{cursor:not-allowed;opacity:.7} +.ds-optcards.ds-set-provs{grid-template-columns:repeat(3,minmax(0,1fr))} +@media (max-width:900px){.ds-optcards.ds-set-provs{grid-template-columns:minmax(0,1fr)}} +.ds-set-foot{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex:none;padding:11px 18px;border-top:1px solid var(--line)} +.ds-set-foot:empty{display:none} +.ds-set-card .ds-seg{background:var(--card);box-shadow:inset 0 0 0 1px var(--line)} +.ds-set-card .ds-seg-item.ds-is-active{background:var(--sunken)}