load config from JSON, expand on setup instructions
This commit is contained in:
parent
ccbce9abe8
commit
6cb04fcbba
17
README.md
17
README.md
|
@ -120,14 +120,19 @@ Sign up for an account at https://huggingface.co and find the models you want to
|
|||
|
||||
- https://huggingface.co/runwayml/stable-diffusion-v1-5
|
||||
|
||||
Download the conversion script from the `huggingface/diffusers` repository:
|
||||
|
||||
- https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py
|
||||
Log into the HuggingFace CLI:
|
||||
|
||||
```shell
|
||||
> wget https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py
|
||||
> huggingface-cli.exe login
|
||||
```
|
||||
|
||||
Issue an API token from https://huggingface.co/settings/tokens, naming it something memorable like `onnx-web`, and then
|
||||
paste it into the prompt.
|
||||
|
||||
Download the conversion script from the `huggingface/diffusers` repository to the root of this project:
|
||||
|
||||
- https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py
|
||||
|
||||
Run the conversion script with your desired model(s):
|
||||
|
||||
```shell
|
||||
|
@ -136,8 +141,8 @@ Run the conversion script with your desired model(s):
|
|||
|
||||
This will take a little while to convert each model. Stable diffusion v1.4 is about 6GB, v1.5 is at least 10GB or so.
|
||||
|
||||
You can verify that all of the steps up to this point worked correctly by attempting to run the basic `txt2img` script
|
||||
provided with `diffusers` and included here as `api/setup-test.py`.
|
||||
You can verify that all of the steps up to this point worked correctly by attempting to run the `api/setup-test.py`
|
||||
script, which is a slight variation on the original txt2img script.
|
||||
|
||||
## Usage
|
||||
|
||||
|
|
|
@ -117,4 +117,4 @@ def txt2img():
|
|||
|
||||
res = make_response(send_file(img_io, mimetype='image/png'))
|
||||
res.headers.add('Access-Control-Allow-Origin', '*')
|
||||
return res
|
||||
return res
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 346 KiB After Width: | Height: | Size: 340 KiB |
14
gui/Makefile
14
gui/Makefile
|
@ -30,6 +30,7 @@ build-shebang: build
|
|||
bundle: build
|
||||
node esbuild.js
|
||||
cp -v src/index.html out/
|
||||
cp -v examples/config.json out/
|
||||
|
||||
COVER_OPTS := --all \
|
||||
--exclude ".eslintrc.js" \
|
||||
|
@ -54,16 +55,3 @@ lint: deps
|
|||
|
||||
test: build
|
||||
MOCHA_FILE=out/test-results.xml yarn c8 $(COVER_OPTS) mocha $(MOCHA_OPTS) "out/**/Test*.js"
|
||||
|
||||
# image-building targets
|
||||
image:
|
||||
podman build -t docker-push.artifacts.apextoaster.com/ssube/conan-discord:main -f Containerfile .
|
||||
|
||||
image-local: ci
|
||||
podman pull docker-push.artifacts.apextoaster.com/ssube/conan-discord:main
|
||||
$(MAKE) image
|
||||
podman push docker-push.artifacts.apextoaster.com/ssube/conan-discord:main
|
||||
|
||||
# run targets
|
||||
run: build
|
||||
node out/src/index.js
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"api": {
|
||||
"root": "http://ssube-desktop.home.holdmyran.ch:5000"
|
||||
}
|
||||
}
|
23
gui/serve.js
23
gui/serve.js
|
@ -11,14 +11,33 @@ const root = process.cwd();
|
|||
|
||||
const portNum = parseInt(port, 10);
|
||||
|
||||
const contentTypes = [
|
||||
[/^.*\.html$/, 'text/html'],
|
||||
[/^.*\.js$/, 'application/javascript'],
|
||||
[/^.*\.json$/, 'text/json'],
|
||||
];
|
||||
|
||||
function getContentType(path) {
|
||||
for (const [regex, type] of contentTypes) {
|
||||
if (regex.test(path)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
return 'unknown';
|
||||
}
|
||||
|
||||
const server = createServer((req, res) => {
|
||||
readFile(join(root, 'out', req.url || 'index.html'), function (err, data) {
|
||||
const path = join(root, 'out', req.url || 'index.html');
|
||||
readFile(path, function (err, data) {
|
||||
if (err) {
|
||||
res.writeHead(404);
|
||||
res.end(JSON.stringify(err));
|
||||
return;
|
||||
}
|
||||
res.writeHead(200);
|
||||
res.writeHead(200, {
|
||||
'Content-Type': getContentType(path),
|
||||
});
|
||||
res.end(data);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
export const CONFIG = {
|
||||
api: {
|
||||
root: 'http://ssube-desktop.home.holdmyran.ch:5000',
|
||||
},
|
||||
};
|
|
@ -1,5 +1,4 @@
|
|||
<html>
|
||||
<div id="app"></div>
|
||||
<script src="./bundle/main.js">
|
||||
</script>
|
||||
<script id="bundle" src="./bundle/main.js" type="module"></script>
|
||||
</html>
|
|
@ -1,15 +1,36 @@
|
|||
import { mustExist } from '@apextoaster/js-utils';
|
||||
import * as React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import { makeClient } from './api/client';
|
||||
import { OnnxWeb } from './components/OnnxWeb';
|
||||
import { CONFIG } from './config';
|
||||
|
||||
export function main() {
|
||||
import { makeClient } from './api/client.js';
|
||||
import { OnnxWeb } from './components/OnnxWeb.js';
|
||||
|
||||
export interface Config {
|
||||
api: {
|
||||
root: string;
|
||||
}
|
||||
}
|
||||
|
||||
export async function loadConfig() {
|
||||
const configPath = new URL('./config.json', window.origin);
|
||||
const configReq = await fetch(configPath);
|
||||
if (configReq.status === 200) {
|
||||
return configReq.json();
|
||||
} else {
|
||||
throw new Error('could not load config');
|
||||
}
|
||||
}
|
||||
|
||||
export async function main() {
|
||||
const config = await loadConfig();
|
||||
|
||||
const appElement = mustExist(document.getElementById('app'));
|
||||
const app = ReactDOM.createRoot(appElement);
|
||||
const client = makeClient(CONFIG.api.root);
|
||||
const client = makeClient(config.api.root);
|
||||
app.render(<OnnxWeb client={client} />);
|
||||
}
|
||||
|
||||
main();
|
||||
window.addEventListener('load', () => {
|
||||
console.log('launching onnx-web');
|
||||
main();
|
||||
}, false);
|
||||
|
|
Loading…
Reference in New Issue