lsatone / backend /fixed_page_generator.py
3v324v23's picture
Update Comic123 with local comic folder files
83e35a7
"""
Fixed page generator that creates proper 12-panel comics
"""
from backend.class_def import panel, Page
def generate_12_panel_pages(frame_files, bubbles):
"""Generate pages with 12 panels in 3x4 grid"""
pages = []
num_frames = min(12, len(frame_files)) # Max 12 panels
print(f"📄 Generating comic with {num_frames} panels in 3x4 grid")
# Create single page with all panels
panels = []
# 3x4 grid = 3 rows, 4 columns
# Each panel: row_span=4, col_span=3 (total 12x12 grid)
for i in range(num_frames):
panel_obj = panel(
image=frame_files[i],
row_span=4, # 12/3 = 4
col_span=3 # 12/4 = 3
)
panels.append(panel_obj)
# Create arrangement string for 3x4 grid
arrangement = []
panel_idx = 0
for row in range(3):
row_str = ""
for col in range(4):
if panel_idx < num_frames:
row_str += str(panel_idx % 10)
panel_idx += 1
else:
row_str += "0" # Empty space
arrangement.append(row_str)
# Get corresponding bubbles
page_bubbles = bubbles[:num_frames] if bubbles else []
# Create page
page = Page(
panels=panels,
bubbles=page_bubbles,
panel_arrangement=arrangement
)
pages.append(page)
return pages
def generate_proper_layout(num_panels):
"""Generate proper layout configuration based on panel count"""
if num_panels <= 6:
return {
'pages': 1,
'panels_per_page': num_panels,
'rows': 2,
'cols': 3,
'row_span': 6,
'col_span': 4
}
elif num_panels <= 9:
return {
'pages': 1,
'panels_per_page': num_panels,
'rows': 3,
'cols': 3,
'row_span': 4,
'col_span': 4
}
elif num_panels <= 12:
return {
'pages': 1,
'panels_per_page': num_panels,
'rows': 3,
'cols': 4,
'row_span': 4,
'col_span': 3
}
else:
# More than 12 panels - use multiple pages
return {
'pages': 2,
'panels_per_page': 8,
'rows': 2,
'cols': 4,
'row_span': 6,
'col_span': 3
}