Akhmad123 commited on
Commit
adac156
Β·
verified Β·
1 Parent(s): 4ae11a0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -9
app.py CHANGED
@@ -112,9 +112,48 @@ def convert_panel_to_visual_prompt(panel_text, character_mode, character_desc):
112
  return f"{base_style} Scene: {panel_text}."
113
 
114
  # ============================
115
- # IMAGE GENERATOR (FLUX)
116
  # ============================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  def generate_image_flux(prompt):
 
 
 
118
  try:
119
  out = replicate.run(
120
  "black-forest-labs/flux-schnell-free",
@@ -126,6 +165,20 @@ def generate_image_flux(prompt):
126
  return ""
127
  return ""
128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  def download_image(url, filename):
130
  if not url:
131
  return ""
@@ -157,7 +210,8 @@ class ComicPDF(FPDF):
157
  self.cell(0, 10, f"Page {self.page_no()}", 0, 0, "C")
158
 
159
  def build_comic_pdf(username, goal, genre, tone, style, cover_brief,
160
- chapters_count, character_mode, character_desc, comic_name):
 
161
 
162
  ensure_outputs_dir()
163
  pdf = ComicPDF(format="A4")
@@ -168,7 +222,7 @@ def build_comic_pdf(username, goal, genre, tone, style, cover_brief,
168
  f"Cute pastel cartoon cover, soft colors, kid-friendly, Islamic-friendly, "
169
  f"{cover_brief}, theme: {goal}"
170
  )
171
- cover_url = generate_image_flux(cover_prompt)
172
  cover_path = download_image(cover_url, f"cover_{uuid.uuid4().hex}.png")
173
 
174
  pdf.add_page()
@@ -224,8 +278,8 @@ def build_comic_pdf(username, goal, genre, tone, style, cover_brief,
224
  character_desc
225
  )
226
 
227
- # Generate image
228
- illus_url = generate_image_flux(visual_prompt)
229
  illus_path = download_image(
230
  illus_url,
231
  f"chapter_{idx}_panel_{p_idx}_{uuid.uuid4().hex}.png"
@@ -284,7 +338,7 @@ with gr.Blocks() as demo:
284
  # MAIN UI
285
  with gr.Group(visible=False) as main_ui:
286
 
287
- gr.Markdown("# 🌟 AIPromptLab β€” Comic Generator 2.0 (Cartoon Pastel Edition)")
288
 
289
  with gr.Tabs():
290
 
@@ -362,6 +416,13 @@ with gr.Blocks() as demo:
362
  [character_desc]
363
  )
364
 
 
 
 
 
 
 
 
365
  generate_pdf_btn = gr.Button("πŸš€ Generate Comic PDF")
366
  pdf_output = gr.File(label="Download Comic PDF")
367
 
@@ -386,7 +447,8 @@ with gr.Blocks() as demo:
386
  # PDF GENERATOR HANDLER
387
  def handle_generate_pdf(login_status, login_user,
388
  comic_name, goal, genre, tone, style,
389
- chapters, cover_brief, character_mode, character_desc):
 
390
 
391
  if not login_status:
392
  return None
@@ -401,7 +463,8 @@ with gr.Blocks() as demo:
401
  chapters,
402
  character_mode,
403
  character_desc,
404
- comic_name
 
405
  )
406
  return pdf_path
407
 
@@ -411,7 +474,7 @@ with gr.Blocks() as demo:
411
  login_status, login_user,
412
  comic_name, comic_goal, comic_genre, comic_tone,
413
  comic_style, chapters_slider, cover_brief,
414
- character_mode, character_desc
415
  ],
416
  pdf_output
417
  )
 
112
  return f"{base_style} Scene: {panel_text}."
113
 
114
  # ============================
115
+ # IMAGE GENERATORS (3 MODEL)
116
  # ============================
117
+ def generate_image_pastel_mix(prompt):
118
+ """
119
+ fofr/pastel-mix β€” paling cocok untuk komik pastel
120
+ """
121
+ try:
122
+ out = replicate.run(
123
+ "fofr/pastel-mix",
124
+ input={"prompt": prompt}
125
+ )
126
+ if isinstance(out, list) and out:
127
+ return out[0]
128
+ except:
129
+ return ""
130
+ return ""
131
+
132
+ def generate_image_sdxl(prompt):
133
+ """
134
+ stability-ai/sdxl β€” detail tinggi
135
+ """
136
+ try:
137
+ out = replicate.run(
138
+ "stability-ai/sdxl",
139
+ input={
140
+ "prompt": prompt,
141
+ "cfg_scale": 7,
142
+ "steps": 30
143
+ }
144
+ )
145
+ if isinstance(out, dict) and "output" in out and out["output"]:
146
+ return out["output"][0]
147
+ if isinstance(out, list) and out:
148
+ return out[0]
149
+ except:
150
+ return ""
151
+ return ""
152
+
153
  def generate_image_flux(prompt):
154
+ """
155
+ black-forest-labs/flux-schnell-free β€” cepat, tapi tidak selalu stabil
156
+ """
157
  try:
158
  out = replicate.run(
159
  "black-forest-labs/flux-schnell-free",
 
165
  return ""
166
  return ""
167
 
168
+ def generate_image_by_model(prompt, model_name):
169
+ """
170
+ Pilih model berdasarkan dropdown user.
171
+ """
172
+ if model_name == "Pastel-Mix":
173
+ return generate_image_pastel_mix(prompt)
174
+ elif model_name == "SDXL":
175
+ return generate_image_sdxl(prompt)
176
+ elif model_name == "Flux":
177
+ return generate_image_flux(prompt)
178
+ else:
179
+ # fallback ke Pastel-Mix
180
+ return generate_image_pastel_mix(prompt)
181
+
182
  def download_image(url, filename):
183
  if not url:
184
  return ""
 
210
  self.cell(0, 10, f"Page {self.page_no()}", 0, 0, "C")
211
 
212
  def build_comic_pdf(username, goal, genre, tone, style, cover_brief,
213
+ chapters_count, character_mode, character_desc,
214
+ comic_name, image_model):
215
 
216
  ensure_outputs_dir()
217
  pdf = ComicPDF(format="A4")
 
222
  f"Cute pastel cartoon cover, soft colors, kid-friendly, Islamic-friendly, "
223
  f"{cover_brief}, theme: {goal}"
224
  )
225
+ cover_url = generate_image_by_model(cover_prompt, image_model)
226
  cover_path = download_image(cover_url, f"cover_{uuid.uuid4().hex}.png")
227
 
228
  pdf.add_page()
 
278
  character_desc
279
  )
280
 
281
+ # Generate image by selected model
282
+ illus_url = generate_image_by_model(visual_prompt, image_model)
283
  illus_path = download_image(
284
  illus_url,
285
  f"chapter_{idx}_panel_{p_idx}_{uuid.uuid4().hex}.png"
 
338
  # MAIN UI
339
  with gr.Group(visible=False) as main_ui:
340
 
341
+ gr.Markdown("# 🌟 AIPromptLab β€” Comic Generator 2.1 (Cartoon Pastel Edition)")
342
 
343
  with gr.Tabs():
344
 
 
416
  [character_desc]
417
  )
418
 
419
+ # IMAGE MODEL DROPDOWN
420
+ image_model = gr.Dropdown(
421
+ label="Model Gambar",
422
+ choices=["Pastel-Mix", "SDXL", "Flux"],
423
+ value="Pastel-Mix" # default sesuai pilihanmu
424
+ )
425
+
426
  generate_pdf_btn = gr.Button("πŸš€ Generate Comic PDF")
427
  pdf_output = gr.File(label="Download Comic PDF")
428
 
 
447
  # PDF GENERATOR HANDLER
448
  def handle_generate_pdf(login_status, login_user,
449
  comic_name, goal, genre, tone, style,
450
+ chapters, cover_brief, character_mode,
451
+ character_desc, image_model):
452
 
453
  if not login_status:
454
  return None
 
463
  chapters,
464
  character_mode,
465
  character_desc,
466
+ comic_name,
467
+ image_model
468
  )
469
  return pdf_path
470
 
 
474
  login_status, login_user,
475
  comic_name, comic_goal, comic_genre, comic_tone,
476
  comic_style, chapters_slider, cover_brief,
477
+ character_mode, character_desc, image_model
478
  ],
479
  pdf_output
480
  )