queue and append
This commit is contained in:
parent
4daac2c5b2
commit
ed13a48f12
33
src/index.ts
33
src/index.ts
|
|
@ -1,7 +1,7 @@
|
||||||
#!node
|
#!node
|
||||||
import { program } from 'commander';
|
import { program } from 'commander';
|
||||||
import * as fs from 'fs/promises';
|
import * as fs from 'fs/promises';
|
||||||
import { defaultProdiaParams, fetchProdia } from './prodia';
|
import { awaitProdiaJob, defaultProdiaParams, fetchProdia } from './prodia';
|
||||||
|
|
||||||
program
|
program
|
||||||
.name('prodia-scripts')
|
.name('prodia-scripts')
|
||||||
|
|
@ -13,9 +13,9 @@ program
|
||||||
.description('generate an image with sdxl')
|
.description('generate an image with sdxl')
|
||||||
.argument('[config]', 'path to the config json', './sdxl.gen.json')
|
.argument('[config]', 'path to the config json', './sdxl.gen.json')
|
||||||
.option('--init', 'create a default sdxl.gen.json')
|
.option('--init', 'create a default sdxl.gen.json')
|
||||||
|
.option('--append [where]', 'saves generated url to a text file')
|
||||||
|
.option('--queue [amount]', 'queues jobs without waiting for them')
|
||||||
.action(async (config, flags) => {
|
.action(async (config, flags) => {
|
||||||
console.log(config, flags);
|
|
||||||
|
|
||||||
if (flags.init) {
|
if (flags.init) {
|
||||||
console.log('Creating sdxl.gen.json...');
|
console.log('Creating sdxl.gen.json...');
|
||||||
await fs.writeFile(
|
await fs.writeFile(
|
||||||
|
|
@ -29,8 +29,31 @@ program
|
||||||
const json = JSON.parse(txt);
|
const json = JSON.parse(txt);
|
||||||
|
|
||||||
console.log(`Fetching prodia api...`);
|
console.log(`Fetching prodia api...`);
|
||||||
const status = await fetchProdia(json);
|
if (flags.queue) {
|
||||||
console.log('done:', status);
|
const queue = parseInt(flags.queue);
|
||||||
|
if (isNaN(queue) || queue < 1)
|
||||||
|
throw new Error(`invalid queue number=${flags.queue}`);
|
||||||
|
|
||||||
|
for (let i = 0; i < queue; i++) {
|
||||||
|
console.log(`Fetching ${i + 1}/${queue}...`);
|
||||||
|
const job = await fetchProdia(json);
|
||||||
|
if (flags.append)
|
||||||
|
await fs.appendFile(
|
||||||
|
flags.append,
|
||||||
|
`https://images.prodia.xyz/${job.job}.png\n`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
console.log('Done!');
|
||||||
|
} else {
|
||||||
|
const job = await fetchProdia(json);
|
||||||
|
const status = await awaitProdiaJob(job);
|
||||||
|
|
||||||
|
console.log('Done: ', status);
|
||||||
|
|
||||||
|
if (status.imageUrl && flags.append) {
|
||||||
|
await fs.appendFile(flags.append, `${status.imageUrl}\n`);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,10 @@ export async function fetchProdia(
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
const json = (await resp.json()) as ProdiaResponse;
|
return (await resp.json()) as ProdiaResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function awaitProdiaJob(json: ProdiaResponse) {
|
||||||
if ('job' in json) {
|
if ('job' in json) {
|
||||||
while (true) {
|
while (true) {
|
||||||
const query = await fetch(
|
const query = await fetch(
|
||||||
|
|
@ -64,7 +67,6 @@ export async function fetchProdia(
|
||||||
|
|
||||||
const status = (await query.json()) as ProdiaResponse;
|
const status = (await query.json()) as ProdiaResponse;
|
||||||
if (status.imageUrl) return status;
|
if (status.imageUrl) return status;
|
||||||
|
|
||||||
console.log(status);
|
console.log(status);
|
||||||
|
|
||||||
await new Promise((r) => setTimeout(r, 5000));
|
await new Promise((r) => setTimeout(r, 5000));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue