2022-12-17 14:39:42 +00:00
|
|
|
#!/usr/bin/python
|
2022-12-24 13:54:33 +00:00
|
|
|
import importlib.util
|
|
|
|
torch_enabled = importlib.util.find_spec('torch') != None
|
2022-12-17 14:39:42 +00:00
|
|
|
|
|
|
|
import os
|
|
|
|
import json
|
|
|
|
|
|
|
|
from typing import Optional
|
|
|
|
from functools import partial
|
|
|
|
|
|
|
|
import trio
|
|
|
|
import click
|
2022-12-21 14:53:50 +00:00
|
|
|
import trio_asyncio
|
2022-12-17 14:39:42 +00:00
|
|
|
|
2022-12-24 13:54:33 +00:00
|
|
|
if torch_enabled:
|
|
|
|
from . import utils
|
|
|
|
from .dgpu import open_dgpu_node
|
|
|
|
|
2022-12-19 15:36:02 +00:00
|
|
|
from .brain import run_skynet
|
2022-12-24 14:10:49 +00:00
|
|
|
from .constants import ALGOS, DEFAULT_RPC_ADDR, DEFAULT_DGPU_ADDR
|
2022-12-19 15:36:02 +00:00
|
|
|
|
|
|
|
from .frontend.telegram import run_skynet_telegram
|
2022-12-17 14:39:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
@click.group()
|
|
|
|
def skynet(*args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
2022-12-19 15:36:02 +00:00
|
|
|
|
|
|
|
@click.command()
|
|
|
|
@click.option('--model', '-m', default='midj')
|
2022-12-17 14:39:42 +00:00
|
|
|
@click.option(
|
2022-12-19 15:36:02 +00:00
|
|
|
'--prompt', '-p', default='a red old tractor in a sunny wheat field')
|
2022-12-17 14:39:42 +00:00
|
|
|
@click.option('--output', '-o', default='output.png')
|
|
|
|
@click.option('--width', '-w', default=512)
|
|
|
|
@click.option('--height', '-h', default=512)
|
|
|
|
@click.option('--guidance', '-g', default=10.0)
|
|
|
|
@click.option('--steps', '-s', default=26)
|
|
|
|
@click.option('--seed', '-S', default=None)
|
2022-12-19 15:36:02 +00:00
|
|
|
def txt2img(*args, **kwargs):
|
|
|
|
assert 'HF_TOKEN' in os.environ
|
|
|
|
utils.txt2img(os.environ['HF_TOKEN'], **kwargs)
|
|
|
|
|
2023-01-16 02:42:45 +00:00
|
|
|
@click.command()
|
|
|
|
@click.option('--model', '-m', default='midj')
|
|
|
|
@click.option(
|
|
|
|
'--prompt', '-p', default='a red old tractor in a sunny wheat field')
|
|
|
|
@click.option('--input', '-i', default='input.png')
|
|
|
|
@click.option('--output', '-o', default='output.png')
|
2023-01-17 22:01:31 +00:00
|
|
|
@click.option('--strength', '-Z', default=1.0)
|
2023-01-16 02:42:45 +00:00
|
|
|
@click.option('--guidance', '-g', default=10.0)
|
|
|
|
@click.option('--steps', '-s', default=26)
|
|
|
|
@click.option('--seed', '-S', default=None)
|
2023-01-17 22:01:31 +00:00
|
|
|
def img2img(model, prompt, input, output, strength, guidance, steps, seed):
|
2023-01-16 02:42:45 +00:00
|
|
|
assert 'HF_TOKEN' in os.environ
|
|
|
|
utils.img2img(
|
|
|
|
os.environ['HF_TOKEN'],
|
|
|
|
model=model,
|
|
|
|
prompt=prompt,
|
|
|
|
img_path=input,
|
|
|
|
output=output,
|
2023-01-17 22:01:31 +00:00
|
|
|
strength=strength,
|
2023-01-16 02:42:45 +00:00
|
|
|
guidance=guidance,
|
|
|
|
steps=steps,
|
|
|
|
seed=seed
|
|
|
|
)
|
|
|
|
|
2022-12-19 15:36:02 +00:00
|
|
|
@click.command()
|
|
|
|
@click.option('--input', '-i', default='input.png')
|
|
|
|
@click.option('--output', '-o', default='output.png')
|
2022-12-24 13:39:40 +00:00
|
|
|
@click.option('--model', '-m', default='weights/RealESRGAN_x4plus.pth')
|
|
|
|
def upscale(input, output, model):
|
2022-12-19 15:36:02 +00:00
|
|
|
utils.upscale(
|
|
|
|
img_path=input,
|
|
|
|
output=output,
|
2022-12-24 13:39:40 +00:00
|
|
|
model_path=model)
|
2022-12-19 15:36:02 +00:00
|
|
|
|
2022-12-17 14:39:42 +00:00
|
|
|
|
|
|
|
@skynet.group()
|
|
|
|
def run(*args, **kwargs):
|
|
|
|
pass
|
|
|
|
|
2022-12-19 15:36:02 +00:00
|
|
|
|
|
|
|
@run.command()
|
|
|
|
@click.option('--loglevel', '-l', default='warning', help='Logging level')
|
|
|
|
@click.option(
|
2022-12-24 14:10:49 +00:00
|
|
|
'--host', '-H', default=DEFAULT_RPC_ADDR)
|
2022-12-19 15:36:02 +00:00
|
|
|
@click.option(
|
2022-12-24 14:10:49 +00:00
|
|
|
'--host-dgpu', '-D', default=DEFAULT_DGPU_ADDR)
|
|
|
|
@click.option(
|
|
|
|
'--db-host', '-h', default='localhost:5432')
|
|
|
|
@click.option(
|
|
|
|
'--db-pass', '-p', default='password')
|
2022-12-21 14:53:50 +00:00
|
|
|
def brain(
|
2022-12-19 15:36:02 +00:00
|
|
|
loglevel: str,
|
|
|
|
host: str,
|
2022-12-24 14:10:49 +00:00
|
|
|
host_dgpu: str,
|
|
|
|
db_host: str,
|
|
|
|
db_pass: str
|
2022-12-19 15:36:02 +00:00
|
|
|
):
|
|
|
|
async def _run_skynet():
|
|
|
|
async with run_skynet(
|
2022-12-24 14:10:49 +00:00
|
|
|
db_host=db_host,
|
|
|
|
db_pass=db_pass,
|
|
|
|
rpc_address=host,
|
|
|
|
dgpu_address=host_dgpu
|
2022-12-19 15:36:02 +00:00
|
|
|
):
|
|
|
|
await trio.sleep_forever()
|
|
|
|
|
|
|
|
trio_asyncio.run(_run_skynet)
|
|
|
|
|
|
|
|
|
2022-12-17 14:39:42 +00:00
|
|
|
@run.command()
|
|
|
|
@click.option('--loglevel', '-l', default='warning', help='Logging level')
|
2022-12-19 15:36:02 +00:00
|
|
|
@click.option(
|
|
|
|
'--uid', '-u', required=True)
|
2022-12-17 14:39:42 +00:00
|
|
|
@click.option(
|
|
|
|
'--key', '-k', default='dgpu')
|
|
|
|
@click.option(
|
|
|
|
'--cert', '-c', default='whitelist/dgpu')
|
|
|
|
@click.option(
|
2022-12-21 14:53:50 +00:00
|
|
|
'--algos', '-a', default=json.dumps(['midj']))
|
2022-12-24 14:10:49 +00:00
|
|
|
@click.option(
|
|
|
|
'--rpc', '-r', default=DEFAULT_RPC_ADDR)
|
|
|
|
@click.option(
|
|
|
|
'--dgpu', '-d', default=DEFAULT_DGPU_ADDR)
|
2022-12-17 14:39:42 +00:00
|
|
|
def dgpu(
|
|
|
|
loglevel: str,
|
2022-12-19 15:36:02 +00:00
|
|
|
uid: str,
|
2022-12-17 14:39:42 +00:00
|
|
|
key: str,
|
|
|
|
cert: str,
|
2022-12-24 14:10:49 +00:00
|
|
|
algos: str,
|
|
|
|
rpc: str,
|
|
|
|
dgpu: str
|
2022-12-17 14:39:42 +00:00
|
|
|
):
|
|
|
|
trio.run(
|
|
|
|
partial(
|
|
|
|
open_dgpu_node,
|
|
|
|
cert,
|
2022-12-19 15:36:02 +00:00
|
|
|
uid,
|
2022-12-17 14:39:42 +00:00
|
|
|
key_name=key,
|
2022-12-24 14:10:49 +00:00
|
|
|
rpc_address=rpc,
|
|
|
|
dgpu_address=dgpu,
|
2022-12-17 14:39:42 +00:00
|
|
|
initial_algos=json.loads(algos)
|
|
|
|
))
|
2022-12-19 15:36:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
@run.command()
|
|
|
|
@click.option('--loglevel', '-l', default='warning', help='Logging level')
|
|
|
|
@click.option(
|
|
|
|
'--key', '-k', default='telegram-frontend')
|
|
|
|
@click.option(
|
|
|
|
'--cert', '-c', default='whitelist/telegram-frontend')
|
2022-12-24 14:10:49 +00:00
|
|
|
@click.option(
|
|
|
|
'--rpc', '-r', default=DEFAULT_RPC_ADDR)
|
2022-12-19 15:36:02 +00:00
|
|
|
def telegram(
|
|
|
|
loglevel: str,
|
|
|
|
key: str,
|
2022-12-24 14:10:49 +00:00
|
|
|
cert: str,
|
|
|
|
rpc: str
|
2022-12-19 15:36:02 +00:00
|
|
|
):
|
|
|
|
assert 'TG_TOKEN' in os.environ
|
|
|
|
trio_asyncio.run(
|
|
|
|
partial(
|
|
|
|
run_skynet_telegram,
|
|
|
|
os.environ['TG_TOKEN'],
|
|
|
|
key_name=key,
|
2022-12-24 14:10:49 +00:00
|
|
|
cert_name=cert,
|
|
|
|
rpc_address=rpc
|
2022-12-19 15:36:02 +00:00
|
|
|
))
|