提交剩余

This commit is contained in:
2023-02-07 00:43:16 +08:00
parent 4758dcf20c
commit fabccbaf7d
4 changed files with 210 additions and 28 deletions

View File

@@ -1,6 +1,6 @@
<template lang="pug"> <template lang="pug">
div.min-h-screen.flex.flex-nowrap(style="background-color: #15191e") div.min-h-screen.flex.flex-nowrap(style="background-color: #15191e")
header.fixed.w-full.flex.justify-center.items-center.px-4.py-2.text-white(style="background-color: #06070de3") header.fixed.w-full.flex.justify-center.items-center.px-4.py-2.text-white(class="h-[60px]" style="background-color: #06070de3")
span.w-64.font-bold.text-2xl Logo span.w-64.font-bold.text-2xl Logo
input.rounded-lg.h-9.px-4.bg-dark-900.border.border-gray-700.text-gray-500(value="Search" type="text" class="focus:outline-none") input.rounded-lg.h-9.px-4.bg-dark-900.border.border-gray-700.text-gray-500(value="Search" type="text" class="focus:outline-none")
nav.flex.gap-4.text-white(class="container mx-auto px-4 py-2") nav.flex.gap-4.text-white(class="container mx-auto px-4 py-2")
@@ -16,4 +16,9 @@ html, body {
font-size: 14px; font-size: 14px;
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
} }
.scrollbar-hide::-webkit-scrollbar { width: 0 !important }
.scrollbar-hide {
-ms-overflow-style: none;
overflow: -moz-scrollbars-none;
}
</style> </style>

View File

@@ -0,0 +1,41 @@
<template lang="pug">
.flex.items-center.gap-x-4.slider-container
div(tabindex="-1" style="position: relative; touch-action: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); user-select: none; outline: 0px; padding-top: 8px; padding-bottom: 8px;" class="chakra-slider css-1t1xvy7")
div(style="position:absolute;top:50%;transform:translateY(-50%);width:100%" class="chakra-slider__track css-8v2r68")
div(class="css-11z5obk")
div(aria-valuenow="50" class="chakra-slider__filled-track css-19vmo6h" style="position: absolute; top: 50%; transform: translateY(-50%); width: 28.5714%; left: 0%;")
div.absolute.select-none.touch-none(
role="slider" tabindex="0" aria-valuemin="10" aria-valuemax="150" aria-valuenow="25" aria-orientation="horizontal"
style="left: calc(28.5714% - 8px);"
class="chakra-slider__thumb css-12qisgv"
)
input(type="hidden" value="50")
</template>
<style>
.css-1t1xvy7 {
display: inline-block;
position: relative;
cursor: pointer;
width: 100%;
--slider-thumb-size: var(--chakra-sizes-3-5);
--slider-track-size: var(--chakra-sizes-1);
}
.css-8v2r68 {
height: var(--slider-track-size);
overflow: hidden;
border-radius: var(--chakra-radii-sm);
background: var(--chakra-colors-gray-200);
background-color: var(--toned-out-gray);
}
.css-19vmo6h {
width: inherit;
height: inherit;
background: var(--chakra-colors-blue-500);
background-color: var(--accent-blue);
}
.css-11z5obk {
position: relative;
right: var(--chakra-space-10);
}
</style>

View File

@@ -11,5 +11,15 @@
"nuxt": "3.0.0", "nuxt": "3.0.0",
"nuxt-windicss": "^2.6.0", "nuxt-windicss": "^2.6.0",
"pug": "^3.0.2" "pug": "^3.0.2"
} },
"name": "drawing",
"description": "Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.",
"version": "1.0.0",
"main": "index.js",
"repository": {
"type": "git",
"url": "gitea@git.satori.love:gameui/drawing.git"
},
"author": "satori.love",
"license": "MIT"
} }

View File

@@ -1,7 +1,7 @@
<template lang="pug"> <template lang="pug">
div.text-white.w-full.flex.bg-dark-900 div(class="mt-[60px] grid grid-cols-1 lg:grid-cols-4 xl:grid-cols-5 text-white bg-[#05020E] h-[calc(100vh-62px)] border-t border-white/10 2xl:border-t-0 mx-auto 2xl:border-x")
// 左侧信息 // 左侧信息
div.w-md.border-r-1.border-gray-500.border-opacity-10.pt-24.px-8.flex.flex-col.gap-4 aside(class="flex flex-col divide-y divide-white/10 pt-6 space-y-6 lg:overflow-y-auto scrollbar-hide")
div div
p.font-bold 迅速に開発できる p.font-bold 迅速に開発できる
p.text-gray-400 あなたのアイデアを素早く実現するためのフレームワークです p.text-gray-400 あなたのアイデアを素早く実現するためのフレームワークです
@@ -17,6 +17,24 @@ div.text-white.w-full.flex.bg-dark-900
p.font-bold 筛选 p.font-bold 筛选
p.text-gray-400 尝试可以应用于您的图像的不同风格样式 p.text-gray-400 尝试可以应用于您的图像的不同风格样式
input.mt-4.rounded-lg.h-9.w-full.px-4.py-2.bg-gray-500.bg-opacity-5.border.border-gray-500.border-opacity-20.text-gray-500(value="Search" type="text" class="focus:outline-none") input.mt-4.rounded-lg.h-9.w-full.px-4.py-2.bg-gray-500.bg-opacity-5.border.border-gray-500.border-opacity-20.text-gray-500(value="Search" type="text" class="focus:outline-none")
div(class="absolute w-screen lg:w-[400px] bottom-2 flex flex-col" style="max-height: 80vh; left: 418.797px; top: min(747px - min(1326.22px, 80vh), 582.656px);")
div(class="overflow-auto scrollbar-hide transition-[transform,opacity] duration-[50ms] z-50 pai-border rounded-lg bg-gray-900 shadow-2xl opacity-100")
div(class="space-y-2 items-center absolute overflow-hidden w-[calc(100%-2px)] px-4 pb-2 pt-4 lg:pt-2 z-50 bg-inherit rounded-t-lg border-b border-low border-white border-opacity-10")
div(class="flex justify-between")
h3(class="text-white font-bold") Filter
button(class="text-gray-600 pb-1 lg:hidden")
<svg viewBox="0 0 24 24" focusable="false" class="chakra-icon css-onkibi"><path fill="currentColor" d="M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"></path></svg>
div(class="relative")
input(type="text" placeholder="Search" class="input pai-border bg-gray-900 rounded-md mb-2 outline-none w-full p-2 pl-8" value="")
span(class="absolute left-2 top-2.5 text-gray-500")
<svg fill="none" height="20" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" width="20"><path d="M11 17.25a6.25 6.25 0 110-12.5 6.25 6.25 0 010 12.5z"></path><path d="M16 16l4.5 4.5"></path></svg>
div(class="h-32 lg:h-28")
div(class="grid grid-cols-3 sm:grid-cols-4 lg:grid-cols-3 gap-2 p-2 pt-0")
template(v-for="item in 18" :key="item")
button.h-24(class="transition-[transform,opacity] origin-center filter-button relative aspect-[6/5] duration-200 border-2 rounded-lg overflow-hidden active:border-blue-300/50 border-transparent hover:border-high" aria-label="Select filter style: Colorpop" style="transition-delay: 10ms;")
span( style="box-sizing: border-box; display: block; overflow: hidden; width: initial; height: initial; background: none; opacity: 1; border: 0px; margin: 0px; padding: 0px; position: absolute; inset: 0px;")
img( alt="Colorpop" src="https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png" decoding="async" data-nimg="fill" style="position: absolute; inset: 0px; box-sizing: border-box; padding: 0px; border: none; margin: auto; display: block; width: 0px; height: 0px; min-width: 100%; max-width: 100%; min-height: 100%; max-height: 100%; object-fit: cover;" sizes="100vw" srcset="https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 640w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 750w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 828w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 1080w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 1200w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 1920w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 2048w, https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png 3840w")
div( class="absolute inset-0 bg-gradient-to-t from-black/90 via-black/40 flex flex-col justify-end text-gray-100 text-left text-sm p-1") Colorpop
div div
p.font-bold 通过图像生成图像 p.font-bold 通过图像生成图像
p.text-gray-400 上传或绘制图像以用作灵感 p.text-gray-400 上传或绘制图像以用作灵感
@@ -27,7 +45,7 @@ div.text-white.w-full.flex.bg-dark-900
div div
button.mt-4.rounded-lg.h-9.w-full.px-4.py-2.bg-gray-500.bg-opacity-5.border.border-gray-500.border-opacity-20.text-gray-500(value="Search" type="text" class="focus:outline-none") 开始绘制 button.mt-4.rounded-lg.h-9.w-full.px-4.py-2.bg-gray-500.bg-opacity-5.border.border-gray-500.border-opacity-20.text-gray-500(value="Search" type="text" class="focus:outline-none") 开始绘制
// 中间输出 // 中间输出
div.flex-1.pt-24.px-4 main(class="xl:col-span-3 lg:col-span-2 lg:overflow-y-auto lg:overflow-x-hidden border-x border-white/10 relative scrollbar-hide")
div.flex.gap-2.pb-8 div.flex.gap-2.pb-8
button.rounded-full.w-14.h-14.flex.justify-center.items-center( button.rounded-full.w-14.h-14.flex.justify-center.items-center(
:class="{ 'bg-gray-800': views.cardMode }" :class="{ 'bg-gray-800': views.cardMode }"
@@ -46,29 +64,130 @@ div.text-white.w-full.flex.bg-dark-900
class="hover:cursor-pointer hover:opacity-100 from-black/90" class="hover:cursor-pointer hover:opacity-100 from-black/90"
) )
// 右侧参数 // 右侧参数
div.w-md.border-l-1.border-gray-500.border-opacity-10.pt-24.px-4.flex.flex-col.gap-8 aside(class="lg:overflow-y-auto relative z-20 transition-all scrollbar-hide")
div div(class="px-6 divide-y divide-white/10")
p.font-bold 模型 <fieldset class="create-fieldset py-8">
p.text-gray-400 Different AI models can produce different or better results so fell free to experiment. <label for="model-type">Model</label>
div <p>Different AI models can produce different or better results so feel free to experiment.</p>
p.font-bold Image Dimensions <div class="select">
p.text-gray-400 width x height of the finished image. <select name="model-type" id="model-type">
div.flex.flex-wrap.gap-2 <option value="stable-diffusion" data-version="1.5" selected="">Stable Diffusion 1.5</option>
button.border.border-2.border-gray-500.rounded-md.px-4.py-1(:class="{'border-light-blue-500':views.active, 'text-light-blue-500':views.active}") 512 x 512 <option value="stable-diffusion-2" data-version="2.0">Stable Diffusion 2.1</option>
button.border.border-2.border-gray-500.rounded-md.px-4.py-1(:class="{'border-light-blue-500':!views.active}") 1024 x 1024 <option value="dalle-2" data-version="2.0">DALL·E 2</option>
button.border.border-2.border-gray-500.rounded-md.px-4.py-1(:class="{'border-light-blue-500':!views.active}") 640 x 384 </select>
button.border.border-2.border-gray-500.rounded-md.px-4.py-1(:class="{'border-light-blue-500':!views.active}") 384 x 640 <svg data-testid="geist-icon" fill="none" height="16" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" width="24"><path d="M6 9l6 6 6-6"></path></svg>
button.border.border-2.border-gray-500.rounded-md.px-4.py-1(:class="{'border-light-blue-500':!views.active}") 768 x 512 </div>
button.border.border-2.border-gray-500.rounded-md.px-4.py-1(:class="{'border-light-blue-500':!views.active}") 512 x 768 </fieldset>
p Buy a paid plan for any width or height up to 1536px div(class="flex flex-col gap-y-8 py-8")
div fieldset(class="create-fieldset")
p.font-bold Prompt Guidnce label 图像尺寸
p.text-gray-400 Higher guidance will make your image closer to your prompt. p 完成图像的宽度×高度.
div --------------------------- div(class="flex flex-row flex-wrap gap-x-2 gap-y-2")
div div(class="flex flex-row flex-wrap")
p.font-bold 质量与细节 input.hidden(type="radio" class="radio-input" id="image-dim-1" checked="")
p.text-gray-400 Higher guidance will make your image closer to your prompt. label.border.border-2.border-gray-500.rounded-md.px-4.py-1(for="image-dim-1" class="!text-[11px]" style="width:98px") 512 × 512
div --------------------------- div(class="flex flex-row flex-wrap")
input.hidden(type="radio" class="radio-input" id="image-dim-2")
label.border.border-2.border-gray-500.rounded-md.px-4.py-1(for="image-dim-2" class="!text-[11px]" style="width:98px") 1024 × 1024
div(class="flex flex-row flex-wrap")
input.hidden(type="radio" class="radio-input" id="image-dim-3")
label.border.border-2.border-gray-500.rounded-md.px-4.py-1(for="image-dim-3" class="!text-[11px]" style="width:98px") 640 × 384
div(class="flex flex-row flex-wrap")
input.hidden(type="radio" class="radio-input" id="image-dim-4")
label.border.border-2.border-gray-500.rounded-md.px-4.py-1(for="image-dim-4" class="!text-[11px]" style="width:98px") 384 × 640
div(class="flex flex-row flex-wrap")
input.hidden(type="radio" class="radio-input" id="image-dim-5")
label.border.border-2.border-gray-500.rounded-md.px-4.py-1(for="image-dim-5" class="!text-[11px]" style="width:98px") 768 × 512
div(class="flex flex-row flex-wrap")
input.hidden(type="radio" class="radio-input" id="image-dim-6")
label.border.border-2.border-gray-500.rounded-md.px-4.py-1(for="image-dim-6" class="!text-[11px]" style="width:98px") 512 × 768
div(class="text-sm grey-100 mt-1")
p Buy a <a target="_blank" style="color:rgb(118 173 255)" href="/pricing">paid plan</a> for any width or height up to 1536px
fieldset(class="create-fieldset")
label Prompt Guidance
p Higher guidance will make your image closer to your prompt.
SliderUndefined
//div(id="slider-undefined" class="flex items-center gap-x-4 slider-container")
// div(tabindex="-1" style="position: relative; touch-action: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); user-select: none; outline: 0px; padding-top: 8px; padding-bottom: 8px;" class="chakra-slider css-1t1xvy7")
// div(id="slider-track-:R5mnqmqulm:" style="position:absolute;top:50%;transform:translateY(-50%);width:100%" class="chakra-slider__track css-8v2r68")
// div(class="css-11z5obk")
// div(aria-valuenow="6" class="chakra-slider__filled-track css-19vmo6h" style="position: absolute; top: 50%; transform: translateY(-50%); width: 20%; left: 0%;")
// div(role="slider" tabindex="0" id="slider-thumb-:R5mnqmqulm:" aria-valuemin="0" aria-valuemax="30" aria-valuenow="6" aria-orientation="horizontal" style="position: absolute; user-select: none; touch-action: none; left: calc(20% - 8px);" class="chakra-slider__thumb css-12qisgv")
// input(type="hidden" value="6")
// input(type="text" class="w-12 rounded-full bg-gray-900 text-xs text-center py-1 text-gray-200" value="6")
fieldset(class="create-fieldset")
label Quality &amp; Details
p More steps will result in a high quality image but will take longer.
div(id="slider-undefined" class="flex items-center gap-x-4 slider-container")
div(tabindex="-1" style="position: relative; touch-action: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); user-select: none; outline: 0px; padding-top: 8px; padding-bottom: 8px;" class="chakra-slider css-1t1xvy7")
div(id="slider-track-:R9onqmqulm:" style="position:absolute;top:50%;transform:translateY(-50%);width:100%" class="chakra-slider__track css-8v2r68")
div(class="css-11z5obk")
div(aria-valuenow="50" class="chakra-slider__filled-track css-19vmo6h" style="position: absolute; top: 50%; transform: translateY(-50%); width: 28.5714%; left: 0%;")
div(role="slider" tabindex="0" id="slider-thumb-:R9onqmqulm:" aria-valuemin="10" aria-valuemax="150" aria-valuenow="25" aria-orientation="horizontal" style="position: absolute; user-select: none; touch-action: none; left: calc(28.5714% - 8px);" class="chakra-slider__thumb css-12qisgv")
input(type="hidden" value="50")
input(type="text" class="w-12 rounded-full bg-gray-900 text-xs text-center py-1 text-gray-200" value="50")
div(class="flex flex-col gap-y-4 py-8")
<fieldset class="create-fieldset">
<label for="seed-input">Seed</label>
<p>Different numbers result in new variations of your image.</p>
<input id="seed-input" class="text-input" type="number" value="" disabled="">
<div class="flex items-center gap-x-2">
<label class="chakra-checkbox css-192puf7" data-checked="">
<input class="chakra-checkbox__input" type="checkbox" id="randomize-seed" style="border:0px;clip:rect(0px, 0px, 0px, 0px);height:1px;width:1px;margin:-1px;padding:0px;overflow:hidden;white-space:nowrap;position:absolute" checked="" value="">
<span class="chakra-checkbox__control css-19ag05x" aria-hidden="true" data-checked="">
<div style="display: flex; align-items: center; justify-content: center; height: 100%; transform: none;">
<svg viewBox="0 0 12 10" class="css-1x1o9fj" opacity="1" stroke-dashoffset="0" style="fill: none; stroke-width: 2; stroke: currentcolor; stroke-dasharray: 16;"><polyline points="1.5 6 4.5 9 10.5 1"></polyline></svg>
</div>
</span>
</label>
<label for="randomize-seed" class="text-sm text-gray-300 mt-1">Randomize each number to get new variations</label>
</div>
</fieldset>
<div class="flex flex-col gap-y-4" style="border-color:transparent">
<fieldset class="create-fieldset">
<button aria-label="Toggle advanced options" id="advanced-options-toggle"><div class="flex flex-row justify-center"><p class="advanced-options-toggle">Hide <!-- -->Advanced Options</p></div></button>
<div class="advanced-options-container transition-all overflow-hidden opacity-100 max-h-[99rem] pb-8">
<label>Sampler</label>
<p>The diffusion sampling method.</p>
<div class="select">
<select name="advanced-options" id="advanced-options">
<option value="1" selected="">pndm (plms)</option>
<option value="0">ddim</option>
<option value="2">k_euler</option>
<option value="3">k_euler_ancestral</option>
<option value="4">k_heun</option>
<option value="5">k_dpm_2</option>
<option value="6">k_dpm_2_ancestral</option>
<option value="7">k_lms</option>
</select>
<svg data-testid="geist-icon" fill="none" height="16" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" width="24"><path d="M6 9l6 6 6-6"></path></svg>
</div>
</div>
</fieldset>
</div>
<fieldset class="create-fieldset py-8">
<label>Number of Images</label>
<p>Select the number of images you would like to generate.</p>
<div class="flex gap-x-2">
<input type="radio" class="radio-input" id="num-images-1" checked="">
<label for="num-images-1">1</label><input type="radio" class="radio-input" id="num-images-2">
<label for="num-images-2">2</label><input type="radio" class="radio-input" id="num-images-3">
<label for="num-images-3">3</label><input type="radio" class="radio-input" id="num-images-4">
<label for="num-images-4">4</label>
</div>
</fieldset>
div(class="flex flex-col gap-y-4 py-8")
fieldset(class="create-fieldset")
<label>Private Session</label>
<p>Images will only be visible to you until you're ready to share them. <span> Buy a <a target="_blank" href="/pricing" style="color: rgb(118, 173, 255);">paid plan</a> to persist this setting across sessions.</span></p>
<div class="flex gap-x-3 w-44 items-center">
<label class="chakra-switch [&amp;>span]:bg-[#39324E] [&amp;>span[data-checked]]:bg-[#76ADFF] [&amp;>span]:p-1 css-ghot30" data-checked="">
<input class="chakra-switch__input" type="checkbox" value="" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; width: 1px; margin: -1px; padding: 0px; overflow: hidden; white-space: nowrap; position: absolute;">
<span aria-hidden="true" class="chakra-switch__track css-j1l0qk" data-checked="">
<span class="chakra-switch__thumb css-7roig" data-checked=""></span>
</span>
</label>
</div>
</template> </template>
<script setup> <script setup>
@@ -104,6 +223,13 @@ const imageCreate = ref({
</script> </script>
<style> <style>
.pai-border {
border-width: 1px;
border-style: solid;
border-color: rgba(255, 255, 255, 0.08);
border-image: initial;
}
.switch { .switch {
position: relative; position: relative;
display: inline-block; display: inline-block;