Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
42472e3
Rework the visual system: tokens, elevation, and card alignment
joeyballentine Jul 29, 2026
3b4a8bb
Make the model page's comparison viewer legible and group its metadata
joeyballentine Jul 29, 2026
edbd705
Move the viewer's zoom controls out of the caption's corner
joeyballentine Jul 29, 2026
80e9382
Fill the model page's content column and make the card grid container…
joeyballentine Jul 29, 2026
04c0f8e
Size the model page stage by viewport instead of fixed steps
joeyballentine Jul 29, 2026
ec7b236
Hide carousel paging when a model has one image or none
joeyballentine Jul 29, 2026
3f6582d
Revert "Hide carousel paging when a model has one image or none"
joeyballentine Jul 29, 2026
536b04f
Replace the empty-image grey box with a contribution panel
joeyballentine Jul 29, 2026
8e738f1
Collapse training metadata behind a disclosure
joeyballentine Jul 29, 2026
f85c8b9
Split model facts and rights into side-by-side spec cards
joeyballentine Jul 29, 2026
bf2bf27
Extract the downloads block and hide it when there is one resource
joeyballentine Jul 29, 2026
632b7ee
Fix: keep the downloads block reachable in edit mode with zero resources
joeyballentine Jul 29, 2026
979bafb
Rebuild the model page as a stage-first single column
joeyballentine Jul 29, 2026
18abc0b
Revert "Rebuild the model page as a stage-first single column"
joeyballentine Jul 29, 2026
2f7bf10
Keep the two-column layout and move training details under the descri…
joeyballentine Jul 29, 2026
df37b09
Fold the thumbnail rail into the stage card
joeyballentine Jul 29, 2026
fb69452
Constrain images and wide blocks inside rendered markdown
joeyballentine Jul 29, 2026
f4413c0
Stop the filter group labels from breaking the heading outline
joeyballentine Jul 29, 2026
5f39241
Restore the vertical page padding the shorthand was eating
joeyballentine Jul 29, 2026
6058db7
Add a fullscreen viewer and move zoom into the carousel toolbar
joeyballentine Jul 29, 2026
7d91086
Stop the training details table drawing a second card inside the first
joeyballentine Jul 29, 2026
d7cd6ba
Give form controls a theme instead of the operating system's
joeyballentine Jul 29, 2026
a10ad2d
Stop the card's one-row tag clamp from swallowing the tag popover
joeyballentine Jul 30, 2026
44902a0
Give edit mode one set of controls instead of five kinds of grey
joeyballentine Jul 30, 2026
991598d
Show two rows of card tags, and count the ones that still don't fit
joeyballentine Jul 30, 2026
9260f04
Take the dead space out of the card, not just the tag row
joeyballentine Jul 30, 2026
13b971d
Let the tag row size to its tags again
joeyballentine Jul 30, 2026
c851eda
Let the image absorb the slack, the way the pre-redesign card did
joeyballentine Jul 30, 2026
0854d42
Stop the bottom row of card tags being sliced off
joeyballentine Jul 30, 2026
1b8c7c3
Replace Jest with Vitest and add a component-testing baseline
joeyballentine Jul 30, 2026
bb8be72
Upgrade to Next 16
joeyballentine Jul 30, 2026
1cf48ed
Merge remote-tracking branch 'origin/main' into redesign-attempt
joeyballentine Jul 31, 2026
baebb43
Clear every vulnerability in the shipped dependency tree
joeyballentine Jul 31, 2026
e839fb3
Cut the dev-tree advisories from 38 to 6 with one override
joeyballentine Jul 31, 2026
033e1ba
Move enhancr to unmaintained and add VapourKit
joeyballentine Jul 31, 2026
5a88c11
Fix the Sass deprecations and warn about the broken images
joeyballentine Jul 31, 2026
c0f24fd
Reword the image notice to sound like a person wrote it
joeyballentine Jul 31, 2026
618ac10
Use the wording from the maintainers for the image notice
joeyballentine Jul 31, 2026
5f1c46b
Bring the datasets page in line with the models page
joeyballentine Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
# testing
/coverage

# storybook
/storybook-static/

# next.js
/.next/
/out/
Expand Down
32 changes: 16 additions & 16 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import type { StorybookConfig } from '@storybook/nextjs';

const config: StorybookConfig = {
"stories": [
"../src/**/*.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions"
],
"framework": {
"name": "@storybook/nextjs",
"options": {}
},
"docs": {
"autodocs": true
}
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],

// `addon-essentials` and `addon-interactions` are no longer separate
// packages: from Storybook 9 on, controls, actions, viewport, backgrounds,
// docs and interactions all live in core, and naming them here fails to
// resolve.
addons: ['@storybook/addon-links'],

framework: {
name: '@storybook/nextjs',
options: {},
},

// `docs.autodocs` was replaced by the `autodocs` tag on individual stories.
docs: {},
};

export default config;
76 changes: 42 additions & 34 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,50 @@
import { Decorator } from '@storybook/react'
import { Parameters, GlobalTypes } from '@storybook/types'
import '../src/styles/globals.scss'
import type { Decorator, Preview } from '@storybook/react';
import '../src/styles/globals.scss';

export const parameters: Parameters = {
backgrounds: {
default: 'light',
},
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
// A single default export, rather than the loose `parameters`/`globalTypes`/
// `decorators` exports the old config used. `@storybook/types` no longer
// exists as a package — those types come from the renderer now.
const preview: Preview = {
parameters: {
backgrounds: {
default: 'light',
},
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
},
},
}

export const globalTypes: GlobalTypes = {
theme: {
name: 'Theme',
description: 'Global theme for components',
defaultValue: 'light',
toolbar: {
icon: 'circlehollow',
// Array of plain string values or MenuItem shape (see below)
items: ['light', 'dark'],
// Property that specifies if the name of the item will be displayed
showName: true,
// Change title based on selected value
dynamicTitle: true,
globalTypes: {
theme: {
name: 'Theme',
description: 'Global theme for components',
toolbar: {
icon: 'circlehollow',
items: ['light', 'dark'],
showName: true,
dynamicTitle: true,
},
},
},

initialGlobals: {
theme: 'light',
},
},
};

const withThemeProvider: Decorator = (Story, context) => {
if (typeof document !== undefined) {
document.documentElement.dataset['theme'] = context.globals.theme;
}
// The site reads its palette off `data-theme` on <html>, so the toolbar toggle
// has to write there rather than wrap the story in a provider.
const withTheme: Decorator = (Story, context) => {
if (typeof document !== 'undefined') {
document.documentElement.dataset['theme'] = context.globals.theme as string;
}

return Story();
return Story();
};
export const decorators = [withThemeProvider];

export const decorators = [withTheme];

export default preview;
10 changes: 7 additions & 3 deletions docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ There are many programs that can perform AI upscaling, though not all are able t
- [GitHub](https://github.com/the-database/AnimeJaNaiConverterGui)
- Allows for fast video upscaling utilizing TensorRT (On Nvidia cards), DirectML, or NCNN within a clean GUI. Only supports ONNX. Use chaiNNer to convert PyTorch models to ONNX for usage.

- **enhancr** (open-source | paid)
- [GitHub](https://github.com/mafiosnik777/enhancr)
- Meant for fast video frame upscaling and interpolation, enhancr takes advantage of Nvidia's TensorRT to provide fast processing on video. It supports a variety of models, including many of the custom ESRGAN ones from OpenModelDB.
- **VapourKit** (open-source | free)
- [Website](https://www.vapourkit.app/) | [GitHub](https://github.com/Kim2091/vapourkit)
- A VapourSynth frontend focused on video upscaling, with a real-time preview and side-by-side comparison. Runs ONNX models on TensorRT (Nvidia) or DirectML (AMD/Intel/Nvidia), and fetches everything it needs on first launch rather than making you assemble a VapourSynth environment yourself. Handles plain upscales as well as fuller restoration work such as deinterlacing and temporal stability. Windows only.

- **VSGAN-TensorRT-docker** (open-source | free)
- [GitHub](https://github.com/styler00dollar/VSGAN-tensorrt-docker)
Expand All @@ -52,6 +52,10 @@ There are many programs that can perform AI upscaling, though not all are able t

### Unmaintained Programs

- **enhancr** (open-source | paid)
- [GitHub](https://github.com/mafiosnik777/enhancr)
- Meant for fast video frame upscaling and interpolation, enhancr takes advantage of Nvidia's TensorRT to provide fast processing on video. It supports a variety of models, including many of the custom ESRGAN ones from OpenModelDB. The last release was 0.9.9 in June 2023 and the last commit was in January 2024, so it is no longer actively maintained — for the same job, VapourKit is the maintained option.

- **Joey's ESRGAN fork** (open-source | free)
- [GitHub](https://github.com/joeyballentine/ESRGAN/)
- This is a fork (of a fork) of the original official ESRGAN CLI code by Xinntao. At one point, it was the best way to upscale as it was the only way to automatically run ESRGAN models of any configuration, and improving on vram-tiling and transparency splitting features from IEU. However, it is no longer actively maintained, and is only recommended if you just need to run ESRGAN models via CLI.
Expand Down
5 changes: 0 additions & 5 deletions jest.config.js

This file was deleted.

24 changes: 23 additions & 1 deletion next.config.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,34 @@
const path = require('path');

/**
* The static export is a separate build from the one used for local
* development: `output: 'export'` has no server, so the API routes that edit
* mode talks to cannot exist in it. `next export` used to be a second CLI step
* that made this distinction for us; Next 14 removed it, so the mode is now
* chosen by the environment variable the build script sets.
*/
const isExport = process.env.NEXT_OUTPUT_EXPORT === 'true';

/** @type {import('next').NextConfig} */
const nextConfig = {
// output: 'export',
output: isExport ? 'export' : undefined,
reactStrictMode: true,
sassOptions: {
includePaths: [path.join(__dirname, 'styles')],
},

// SVGs are imported as React components. Turbopack is the default bundler
// from Next 16 on, so the rule has to be declared for both bundlers — the
// webpack half still applies when a build opts out with `--webpack`.
turbopack: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},

webpack(config) {
config.module.rules.push({
test: /\.svg$/,
Expand Down
Loading
Loading