jbilcke-hf HF staff commited on
Commit
ace5a12
1 Parent(s): 27974c0

we only support non-animated panels for now

Browse files
src/app/engine/presets.ts CHANGED
@@ -48,6 +48,20 @@ export const presets: Record<string, Preset> = {
48
  ],
49
  negativePrompt: () => [ ],
50
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  japanese_manga: {
52
  id: "japanese_manga",
53
  label: "Japanese",
 
48
  ],
49
  negativePrompt: () => [ ],
50
  },
51
+ /*
52
+ video_3d_style: {
53
+ id: "video_3d_style",
54
+ label: "[video] 3D style",
55
+ family: "european",
56
+ color: "color",
57
+ font: "actionman",
58
+ llmPrompt: "new movie",
59
+ imagePrompt: (prompt: string) => [
60
+ prompt,
61
+ ],
62
+ negativePrompt: () => [ ],
63
+ },
64
+ */
65
  japanese_manga: {
66
  id: "japanese_manga",
67
  label: "Japanese",
src/app/engine/render.ts CHANGED
@@ -32,6 +32,7 @@ const serverOpenaiApiModel = `${process.env.RENDERING_OPENAI_API_MODEL || "dall-
32
  export async function newRender({
33
  prompt,
34
  // negativePrompt,
 
35
  width,
36
  height,
37
  withCache,
@@ -41,6 +42,7 @@ export async function newRender({
41
  // negativePrompt: string[]
42
  width: number
43
  height: number
 
44
  withCache: boolean
45
  settings: Settings
46
  }) {
@@ -392,7 +394,9 @@ export async function newRender({
392
  body: JSON.stringify({
393
  prompt,
394
  // negativePrompt, unused for now
395
- nbFrames: 1,
 
 
396
  nbSteps: nbInferenceSteps, // 20 = fast, 30 = better, 50 = best
397
  actionnables: [], // ["text block"],
398
  segmentation: "disabled", // "firstframe", // one day we will remove this param, to make it automatic
 
32
  export async function newRender({
33
  prompt,
34
  // negativePrompt,
35
+ nbFrames,
36
  width,
37
  height,
38
  withCache,
 
42
  // negativePrompt: string[]
43
  width: number
44
  height: number
45
+ nbFrames: number
46
  withCache: boolean
47
  settings: Settings
48
  }) {
 
394
  body: JSON.stringify({
395
  prompt,
396
  // negativePrompt, unused for now
397
+
398
+ nbFrames,
399
+
400
  nbSteps: nbInferenceSteps, // 20 = fast, 30 = better, 50 = best
401
  actionnables: [], // ["text block"],
402
  segmentation: "disabled", // "firstframe", // one day we will remove this param, to make it automatic
src/app/interface/panel/index.tsx CHANGED
@@ -99,10 +99,22 @@ export function Panel({
99
  delay += 8000
100
  }
101
 
102
- const startImageGeneration = ({ prompt, width, height, revision }: {
 
 
 
 
 
 
 
 
 
 
 
103
  prompt: string
104
  width: number
105
  height: number
 
106
  revision: number
107
  }) => {
108
  if (!prompt?.length) { return }
@@ -134,6 +146,7 @@ export function Panel({
134
  prompt: cacheInvalidationHack + " " + prompt,
135
  width,
136
  height,
 
137
 
138
  // TODO: here we never reset the revision, so only the first user
139
  // comic will be cached (we should fix that later)
@@ -151,6 +164,7 @@ export function Panel({
151
  prompt: cacheInvalidationHack + " " + prompt,
152
  width,
153
  height,
 
154
  withCache,
155
  settings: getSettings(),
156
  })
@@ -230,6 +244,7 @@ export function Panel({
230
  prompt,
231
  width,
232
  height,
 
233
  withCache: false,
234
  settings: getSettings(),
235
  })
@@ -257,7 +272,7 @@ export function Panel({
257
  useEffect(() => {
258
  if (!prompt.length) { return }
259
 
260
- startImageGeneration({ prompt, width, height, revision })
261
 
262
  clearTimeout(timeoutRef.current)
263
 
@@ -267,7 +282,7 @@ export function Panel({
267
  return () => {
268
  clearTimeout(timeoutRef.current)
269
  }
270
- }, [prompt, width, height, revision])
271
 
272
  /*
273
  doing the captionning from the browser is expensive
 
99
  delay += 8000
100
  }
101
 
102
+ // nbFrames == 1 -> image
103
+ // nbFrames >= 2 -> video
104
+ // for AnimateLCM (the current supported engine)
105
+ // the value is between 12 and 20, default is 16
106
+ // This is not the ideal wait to configure this,
107
+ // but the AI Comic Factory is a just a prototype, so it will do
108
+
109
+ const nbFrames = preset.id.startsWith("video")
110
+ ? 16
111
+ : 1
112
+
113
+ const startImageGeneration = ({ prompt, width, height, nbFrames, revision }: {
114
  prompt: string
115
  width: number
116
  height: number
117
+ nbFrames: number
118
  revision: number
119
  }) => {
120
  if (!prompt?.length) { return }
 
146
  prompt: cacheInvalidationHack + " " + prompt,
147
  width,
148
  height,
149
+ nbFrames,
150
 
151
  // TODO: here we never reset the revision, so only the first user
152
  // comic will be cached (we should fix that later)
 
164
  prompt: cacheInvalidationHack + " " + prompt,
165
  width,
166
  height,
167
+ nbFrames,
168
  withCache,
169
  settings: getSettings(),
170
  })
 
244
  prompt,
245
  width,
246
  height,
247
+ nbFrames,
248
  withCache: false,
249
  settings: getSettings(),
250
  })
 
272
  useEffect(() => {
273
  if (!prompt.length) { return }
274
 
275
+ startImageGeneration({ prompt, width, height, nbFrames, revision })
276
 
277
  clearTimeout(timeoutRef.current)
278
 
 
282
  return () => {
283
  clearTimeout(timeoutRef.current)
284
  }
285
+ }, [prompt, width, height, nbFrames, revision])
286
 
287
  /*
288
  doing the captionning from the browser is expensive