Spaces:
Running
Running
<script lang="ts"> | |
import Prompt from "$lib/components/Prompt.svelte"; | |
import SelectModel from "$lib/components/SelectModel.svelte"; | |
import Input from "$lib/components/Input.svelte"; | |
import Toggle from "$lib/components/Toggle.svelte"; | |
import { IMAGE_GENERATIONS } from "$lib/utils/models"; | |
export let form: Record<string, any>; | |
export let onForm: (form: Record<string, any>) => void; | |
</script> | |
<SelectModel value={form.model} items={IMAGE_GENERATIONS} onChange={(model) => onForm({ ...form, model })} /> | |
<Prompt | |
value={form.inputs} | |
placeholder="A red apple on a table" | |
onChange={(inputs) => onForm({ ...form, inputs })} | |
/> | |
<div class="flex items-center justify-start gap-4 mt-3"> | |
<p class="text-slate-500 uppercase font-medium text-sm"> | |
Optional parameters | |
</p> | |
<div class="w-full flex-1 h-[1px] bg-slate-600" /> | |
</div> | |
<div class="grid grid-cols-2 gap-x-10 gap-y-6"> | |
<Input | |
label="Negative prompt" | |
type="text" | |
class="col-span-2" | |
tooltip="A text describing content that you want the model to steer away from." | |
value={form?.parameters?.negative_prompt} | |
onChange={(negative_prompt) => | |
onForm({ | |
...form, | |
parameters: { ...form.parameters, negative_prompt }, | |
}) | |
} | |
/> | |
<div class="flex flex-col gap-3"> | |
<Input | |
label="Guidance scale" | |
type="number" | |
tooltip="How closely you want the model to match the prompt. Lower numbers are less accurate, very high numbers might decrease image quality or generate artifacts." | |
min={1} | |
max={100} | |
sanitize={(value) => { | |
const valueAsNumber = Number(value); | |
if (valueAsNumber > 1) return 1; | |
if (valueAsNumber < 0) return 0; | |
return valueAsNumber; | |
}} | |
value={form?.parameters?.guidance_scale} | |
onChange={(guidance_scale) => | |
onForm({ | |
...form, | |
parameters: { ...form.parameters, guidance_scale }, | |
}) | |
} | |
/> | |
<Input | |
label="Inference steps" | |
type="number" | |
tooltip="The number of denoising steps to run. Larger numbers may produce better quality but will be slower. Typical values are between 20 and 50 steps." | |
min={20} | |
max={50} | |
sanitize={(value) => { | |
const valueAsNumber = Number(value); | |
if (valueAsNumber > 1) return 1; | |
if (valueAsNumber < 0) return 0; | |
return valueAsNumber; | |
}} | |
value={form?.parameters?.num_inference_steps} | |
onChange={(num_inference_steps) => | |
onForm({ | |
...form, | |
parameters: { ...form.parameters, num_inference_steps }, | |
}) | |
} | |
/> | |
</div> | |
<div class="flex flex-col gap-3"> | |
<Input | |
label="Width" | |
type="number" | |
tooltip="The desired image dimensions. SDXL works best for sizes between 768 and 1024." | |
sanitize={(value) => { | |
const valueAsNumber = Number(value); | |
if (valueAsNumber > 1) return 1; | |
if (valueAsNumber < 0) return 0; | |
return valueAsNumber; | |
}} | |
value={form?.parameters?.width} | |
onChange={(width) => | |
onForm({ | |
...form, | |
parameters: { ...form.parameters, width }, | |
}) | |
} | |
/> | |
<Input | |
label="Height" | |
type="number" | |
tooltip="The desired image dimensions. SDXL works best for sizes between 768 and 1024." | |
sanitize={(value) => { | |
const valueAsNumber = Number(value); | |
if (valueAsNumber > 1) return 1; | |
if (valueAsNumber < 0) return 0; | |
return valueAsNumber; | |
}} | |
value={form?.parameters?.height} | |
onChange={(height) => | |
onForm({ | |
...form, | |
parameters: { ...form.parameters, height }, | |
}) | |
} | |
/> | |
</div> | |
</div> | |