File size: 2,413 Bytes
83e35a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""
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
        }