Commit
•
048071f
1
Parent(s):
6463491
experimenting with things
Browse files- README.md +2 -1
- package-lock.json +0 -0
- package.json +2 -0
- public/layouts/layout4 hd.jpg +0 -0
- public/layouts/layout4.jpg +0 -0
- src/app/engine/render.ts +6 -1
- src/app/interface/page/index.tsx +3 -7
- src/app/interface/top-menu/index.tsx +2 -1
- src/app/layouts/index.tsx +88 -5
- src/app/queries/getStory.ts +3 -0
- src/app/queries/mockLLMResponse.ts +24 -0
- src/components/ui/dialog.tsx +1 -2
- tailwind.config.js +8 -0
README.md
CHANGED
@@ -36,7 +36,8 @@ Rendering config:
|
|
36 |
- `RENDERING_HF_INFERENCE_ENDPOINT_URL`: necessary if you decide to use a custom inference endpoint
|
37 |
- `RENDERING_REPLICATE_API_MODEL_VERSION`: url to the VideoChain API server
|
38 |
- `RENDERING_HF_INFERENCE_ENDPOINT_URL`: optional, default to nothing
|
39 |
-
- `
|
|
|
40 |
- `RENDERING_REPLICATE_API_MODEL`: optional, defaults to "stabilityai/sdxl"
|
41 |
- `RENDERING_REPLICATE_API_MODEL_VERSION`: optional, in case you want to change the version
|
42 |
|
|
|
36 |
- `RENDERING_HF_INFERENCE_ENDPOINT_URL`: necessary if you decide to use a custom inference endpoint
|
37 |
- `RENDERING_REPLICATE_API_MODEL_VERSION`: url to the VideoChain API server
|
38 |
- `RENDERING_HF_INFERENCE_ENDPOINT_URL`: optional, default to nothing
|
39 |
+
- `RENDERING_HF_INFERENCE_API_BASE_MODEL`: optional, defaults to "stabilityai/stable-diffusion-xl-base-1.0"
|
40 |
+
- `RENDERING_HF_INFERENCE_API_REFINER_MODEL`: optional, defaults to "stabilityai/stable-diffusion-xl-refiner-1.0"
|
41 |
- `RENDERING_REPLICATE_API_MODEL`: optional, defaults to "stabilityai/sdxl"
|
42 |
- `RENDERING_REPLICATE_API_MODEL_VERSION`: optional, in case you want to change the version
|
43 |
|
package-lock.json
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
package.json
CHANGED
@@ -42,6 +42,7 @@
|
|
42 |
"eslint": "8.45.0",
|
43 |
"eslint-config-next": "13.4.10",
|
44 |
"html2canvas": "^1.4.1",
|
|
|
45 |
"lucide-react": "^0.260.0",
|
46 |
"next": "13.4.10",
|
47 |
"openai": "^4.10.0",
|
@@ -51,6 +52,7 @@
|
|
51 |
"react-circular-progressbar": "^2.1.0",
|
52 |
"react-dom": "18.2.0",
|
53 |
"react-icons": "^4.11.0",
|
|
|
54 |
"react-virtualized-auto-sizer": "^1.0.20",
|
55 |
"replicate": "^0.17.0",
|
56 |
"sbd": "^1.0.19",
|
|
|
42 |
"eslint": "8.45.0",
|
43 |
"eslint-config-next": "13.4.10",
|
44 |
"html2canvas": "^1.4.1",
|
45 |
+
"konva": "^9.2.2",
|
46 |
"lucide-react": "^0.260.0",
|
47 |
"next": "13.4.10",
|
48 |
"openai": "^4.10.0",
|
|
|
52 |
"react-circular-progressbar": "^2.1.0",
|
53 |
"react-dom": "18.2.0",
|
54 |
"react-icons": "^4.11.0",
|
55 |
+
"react-konva": "^18.2.10",
|
56 |
"react-virtualized-auto-sizer": "^1.0.20",
|
57 |
"replicate": "^0.17.0",
|
58 |
"sbd": "^1.0.19",
|
public/layouts/layout4 hd.jpg
ADDED
public/layouts/layout4.jpg
ADDED
src/app/engine/render.ts
CHANGED
@@ -169,6 +169,10 @@ export async function newRender({
|
|
169 |
|
170 |
// note: there is no "refiner" step yet for custom inference endpoint
|
171 |
// you probably don't need it anyway, as you probably want to deploy an all-in-one model instead for perf reasons
|
|
|
|
|
|
|
|
|
172 |
if (renderingEngine === "INFERENCE_API") {
|
173 |
try {
|
174 |
const refinerModelUrl = `https://api-inference.huggingface.co/models/${huggingFaceInferenceApiRefinerModel}`
|
@@ -213,7 +217,8 @@ export async function newRender({
|
|
213 |
} catch (err) {
|
214 |
console.log(`Refiner step failed, but this is not a blocker. Error details: ${err}`)
|
215 |
}
|
216 |
-
}
|
|
|
217 |
|
218 |
return {
|
219 |
renderId: uuidv4(),
|
|
|
169 |
|
170 |
// note: there is no "refiner" step yet for custom inference endpoint
|
171 |
// you probably don't need it anyway, as you probably want to deploy an all-in-one model instead for perf reasons
|
172 |
+
|
173 |
+
// update: right now it is not possible to use it from the Inference API either:
|
174 |
+
// "Model type not found or pipeline not implemented"
|
175 |
+
/*
|
176 |
if (renderingEngine === "INFERENCE_API") {
|
177 |
try {
|
178 |
const refinerModelUrl = `https://api-inference.huggingface.co/models/${huggingFaceInferenceApiRefinerModel}`
|
|
|
217 |
} catch (err) {
|
218 |
console.log(`Refiner step failed, but this is not a blocker. Error details: ${err}`)
|
219 |
}
|
220 |
+
} */
|
221 |
+
|
222 |
|
223 |
return {
|
224 |
renderId: uuidv4(),
|
src/app/interface/page/index.tsx
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
import { allLayouts } from "@/app/layouts"
|
2 |
import { useStore } from "@/app/store"
|
3 |
import { cn } from "@/lib/utils"
|
4 |
import { useEffect, useRef } from "react"
|
@@ -9,7 +9,7 @@ export function Page({ page }: { page: number }) {
|
|
9 |
// const prompt = useStore(state => state.prompt)
|
10 |
|
11 |
const LayoutElement = (allLayouts as any)[layouts[page]]
|
12 |
-
|
13 |
/*
|
14 |
const [canLoad, setCanLoad] = useState(false)
|
15 |
useEffect(() => {
|
@@ -36,11 +36,7 @@ export function Page({ page }: { page: number }) {
|
|
36 |
ref={pageRef}
|
37 |
className={cn(
|
38 |
`w-full`,
|
39 |
-
|
40 |
-
// we are using aspect-[297/210] because it matches A4 (297mm x 210mm)
|
41 |
-
// `aspect-[210/297]`,
|
42 |
-
`aspect-[250/297]`,
|
43 |
-
|
44 |
`transition-all duration-100 ease-in-out`,
|
45 |
`border border-stone-200`,
|
46 |
`shadow-2xl`,
|
|
|
1 |
+
import { allLayoutAspectRatios, allLayouts } from "@/app/layouts"
|
2 |
import { useStore } from "@/app/store"
|
3 |
import { cn } from "@/lib/utils"
|
4 |
import { useEffect, useRef } from "react"
|
|
|
9 |
// const prompt = useStore(state => state.prompt)
|
10 |
|
11 |
const LayoutElement = (allLayouts as any)[layouts[page]]
|
12 |
+
const aspectRatio = ((allLayoutAspectRatios as any)[layouts[page]] as string) || "aspect-[250/297]"
|
13 |
/*
|
14 |
const [canLoad, setCanLoad] = useState(false)
|
15 |
useEffect(() => {
|
|
|
36 |
ref={pageRef}
|
37 |
className={cn(
|
38 |
`w-full`,
|
39 |
+
aspectRatio,
|
|
|
|
|
|
|
|
|
40 |
`transition-all duration-100 ease-in-out`,
|
41 |
`border border-stone-200`,
|
42 |
`shadow-2xl`,
|
src/app/interface/top-menu/index.tsx
CHANGED
@@ -31,7 +31,8 @@ const layoutIcons: Partial<Record<LayoutName, StaticImageData>> = {
|
|
31 |
Layout0: layoutPreview0,
|
32 |
Layout1: layoutPreview1,
|
33 |
Layout2: layoutPreview2,
|
34 |
-
Layout3: layoutPreview3
|
|
|
35 |
}
|
36 |
|
37 |
export function TopMenu() {
|
|
|
31 |
Layout0: layoutPreview0,
|
32 |
Layout1: layoutPreview1,
|
33 |
Layout2: layoutPreview2,
|
34 |
+
Layout3: layoutPreview3,
|
35 |
+
Layout4: undefined,
|
36 |
}
|
37 |
|
38 |
export function TopMenu() {
|
src/app/layouts/index.tsx
CHANGED
@@ -252,21 +252,104 @@ export function Layout3() {
|
|
252 |
)
|
253 |
}
|
254 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
// export const layouts = { Layout1, Layout2_todo, Layout3_todo, Layout4_todo, Layout2, Layout3 }
|
256 |
export const allLayouts = {
|
257 |
random: <></>,
|
258 |
Layout0,
|
259 |
Layout1,
|
260 |
Layout2,
|
261 |
-
Layout3
|
|
|
262 |
}
|
263 |
|
264 |
export const allLayoutLabels = {
|
265 |
random: "Random layout",
|
266 |
-
Layout0: "
|
267 |
-
Layout1: "
|
268 |
-
Layout2: "
|
269 |
-
Layout3: "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
}
|
271 |
|
272 |
export type LayoutName = keyof typeof allLayouts
|
|
|
252 |
)
|
253 |
}
|
254 |
|
255 |
+
// squares + vertical
|
256 |
+
export function Layout4() {
|
257 |
+
return (
|
258 |
+
<Grid className="grid-cols-8 grid-rows-8">
|
259 |
+
<div className="bg-zinc-100 col-start-1 col-end-7 row-start-1 row-end-3">
|
260 |
+
<Panel
|
261 |
+
panel={0}
|
262 |
+
width={512}
|
263 |
+
height={1024}
|
264 |
+
/>
|
265 |
+
</div>
|
266 |
+
<div className="bg-zinc-100 col-start-3 col-end-9 row-start-3 row-end-4">
|
267 |
+
<Panel
|
268 |
+
panel={1}
|
269 |
+
width={1024}
|
270 |
+
height={768}
|
271 |
+
/>
|
272 |
+
</div>
|
273 |
+
<div className="bg-stone-100 col-start-2 col-end-8 row-start-4 row-end-6">
|
274 |
+
<Panel
|
275 |
+
panel={2}
|
276 |
+
width={768}
|
277 |
+
height={1024}
|
278 |
+
/>
|
279 |
+
</div>
|
280 |
+
<div className="bg-slate-100 col-start-1 col-end-9 row-start-6 row-end-8">
|
281 |
+
<Panel
|
282 |
+
panel={3}
|
283 |
+
width={1024}
|
284 |
+
height={512}
|
285 |
+
/>
|
286 |
+
</div>
|
287 |
+
</Grid>
|
288 |
+
)
|
289 |
+
}
|
290 |
+
|
291 |
+
// squares + horizontal
|
292 |
+
export function Layout5() {
|
293 |
+
return (
|
294 |
+
<Grid className="grid-cols-4 grid-rows-4">
|
295 |
+
<div className="bg-zinc-100">
|
296 |
+
<Panel
|
297 |
+
panel={0}
|
298 |
+
width={1024}
|
299 |
+
height={1024}
|
300 |
+
/>
|
301 |
+
</div>
|
302 |
+
<div className="bg-zinc-100">
|
303 |
+
<Panel
|
304 |
+
panel={1}
|
305 |
+
width={1024}
|
306 |
+
height={1024}
|
307 |
+
/>
|
308 |
+
</div>
|
309 |
+
<div className="bg-stone-100">
|
310 |
+
<Panel
|
311 |
+
panel={2}
|
312 |
+
width={1024}
|
313 |
+
height={1024}
|
314 |
+
/>
|
315 |
+
</div>
|
316 |
+
<div className="bg-slate-100">
|
317 |
+
<Panel
|
318 |
+
panel={3}
|
319 |
+
width={1024}
|
320 |
+
height={1024}
|
321 |
+
/>
|
322 |
+
</div>
|
323 |
+
</Grid>
|
324 |
+
)
|
325 |
+
}
|
326 |
+
|
327 |
// export const layouts = { Layout1, Layout2_todo, Layout3_todo, Layout4_todo, Layout2, Layout3 }
|
328 |
export const allLayouts = {
|
329 |
random: <></>,
|
330 |
Layout0,
|
331 |
Layout1,
|
332 |
Layout2,
|
333 |
+
Layout3,
|
334 |
+
Layout4
|
335 |
}
|
336 |
|
337 |
export const allLayoutLabels = {
|
338 |
random: "Random layout",
|
339 |
+
Layout0: "Grid 0",
|
340 |
+
Layout1: "Grid 1",
|
341 |
+
Layout2: "Grid 2",
|
342 |
+
Layout3: "Grid 3",
|
343 |
+
// Layout4: "Blocks 1",
|
344 |
+
}
|
345 |
+
|
346 |
+
// note for reference: A4 (297mm x 210mm)
|
347 |
+
export const allLayoutAspectRatios = {
|
348 |
+
Layout0: "aspect-[250/297]",
|
349 |
+
Layout1: "aspect-[250/297]",
|
350 |
+
Layout2: "aspect-[250/297]",
|
351 |
+
Layout3: "aspect-[250/297]",
|
352 |
+
// Layout4: "aspect-[1/3]",
|
353 |
}
|
354 |
|
355 |
export type LayoutName = keyof typeof allLayouts
|
src/app/queries/getStory.ts
CHANGED
@@ -16,6 +16,9 @@ export const getStory = async ({
|
|
16 |
prompt: string;
|
17 |
}): Promise<LLMResponse> => {
|
18 |
|
|
|
|
|
|
|
19 |
const query = createLlamaPrompt([
|
20 |
{
|
21 |
role: "system",
|
|
|
16 |
prompt: string;
|
17 |
}): Promise<LLMResponse> => {
|
18 |
|
19 |
+
// In case you need to quickly debug the RENDERING engine you can uncomment this:
|
20 |
+
// return mockLLMResponse
|
21 |
+
|
22 |
const query = createLlamaPrompt([
|
23 |
{
|
24 |
role: "system",
|
src/app/queries/mockLLMResponse.ts
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { LLMResponse } from "@/types"
|
2 |
+
|
3 |
+
export const mockLLMResponse: LLMResponse = [
|
4 |
+
{
|
5 |
+
"panel": 1,
|
6 |
+
"instructions": "Close-up of cat's face, looking straight at reader with a smirk on its face",
|
7 |
+
"caption": "Feline mischief"
|
8 |
+
},
|
9 |
+
{
|
10 |
+
"panel": 2,
|
11 |
+
"instructions": "Medium shot of cat sniffing a glass of milk, with a surprised expression",
|
12 |
+
"caption": "Uh oh, what's this?"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"panel": 3,
|
16 |
+
"instructions": "Wide shot of cat knocking over the glass of milk, with a crazed look in its eyes",
|
17 |
+
"caption": "Cat-astrophe!"
|
18 |
+
},
|
19 |
+
{
|
20 |
+
"panel": 4,
|
21 |
+
"instructions": "Close-up of cat's face, looking satisfied with a milk moustache",
|
22 |
+
"caption": "Mission accomplished"
|
23 |
+
}
|
24 |
+
]
|
src/components/ui/dialog.tsx
CHANGED
@@ -11,10 +11,9 @@ const Dialog = DialogPrimitive.Root
|
|
11 |
const DialogTrigger = DialogPrimitive.Trigger
|
12 |
|
13 |
const DialogPortal = ({
|
14 |
-
className,
|
15 |
...props
|
16 |
}: DialogPrimitive.DialogPortalProps) => (
|
17 |
-
<DialogPrimitive.Portal
|
18 |
)
|
19 |
DialogPortal.displayName = DialogPrimitive.Portal.displayName
|
20 |
|
|
|
11 |
const DialogTrigger = DialogPrimitive.Trigger
|
12 |
|
13 |
const DialogPortal = ({
|
|
|
14 |
...props
|
15 |
}: DialogPrimitive.DialogPortalProps) => (
|
16 |
+
<DialogPrimitive.Portal {...props} />
|
17 |
)
|
18 |
DialogPortal.displayName = DialogPrimitive.Portal.displayName
|
19 |
|
tailwind.config.js
CHANGED
@@ -57,6 +57,14 @@ module.exports = {
|
|
57 |
},
|
58 |
screens: {
|
59 |
'print': { 'raw': 'print' },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
},
|
62 |
},
|
|
|
57 |
},
|
58 |
screens: {
|
59 |
'print': { 'raw': 'print' },
|
60 |
+
},
|
61 |
+
gridTemplateColumns: {
|
62 |
+
'12': 'repeat(12, minmax(0, 1fr))',
|
63 |
+
'16': 'repeat(16, minmax(0, 1fr))',
|
64 |
+
},
|
65 |
+
gridTemplateRows: {
|
66 |
+
'12': 'repeat(12, minmax(0, 1fr))',
|
67 |
+
'16': 'repeat(16, minmax(0, 1fr))',
|
68 |
}
|
69 |
},
|
70 |
},
|