Update app.py
Browse files
app.py
CHANGED
@@ -55,7 +55,7 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
55 |
letter_spacings = ["-1px", "0px", "1px", "2px"]
|
56 |
text_shadows = ["0px 0px 1px #000", "0px 0px 2px #000", "1px 0px 0px #000", "0px 0px 0px #000"]
|
57 |
skew_angles = ["-25deg", "-20deg", "-15deg", "-10deg", "0deg", "10deg", "15deg", "20deg", "25deg"]
|
58 |
-
|
59 |
else:
|
60 |
# Animated state values
|
61 |
font_sizes = ["20px", "22px", "24px", "26px"]
|
@@ -63,7 +63,7 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
63 |
letter_spacings = ["-3px", "-2px", "0px", "2px", "3px", "4px"]
|
64 |
text_shadows = ["0px 0px 5px", "2px 2px 4px", "0px 0px 8px", "3px 3px 6px", "1px 1px 10px"]
|
65 |
skew_angles = ["-35deg", "-25deg", "0deg", "25deg", "35deg", "45deg"]
|
66 |
-
|
67 |
|
68 |
letters = list(word)
|
69 |
styled_letters = []
|
@@ -77,7 +77,7 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
77 |
if not is_animated:
|
78 |
# Store original values for later animation
|
79 |
if word_id not in original_designs:
|
80 |
-
original_designs[word_id] = {'letters': []}
|
81 |
|
82 |
original_styles = {
|
83 |
'font_family': random.choice(fonts),
|
@@ -87,9 +87,10 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
87 |
'skew_angle': random.choice(skew_angles),
|
88 |
'margin_top': random.choice(["-0.02cm", "0.00cm", "0.02cm"]),
|
89 |
'top': random.choice(font_tops),
|
90 |
-
'color':
|
91 |
}
|
92 |
original_designs[word_id]['letters'].append(original_styles)
|
|
|
93 |
|
94 |
style = {
|
95 |
'font-family': original_styles['font_family'],
|
@@ -109,13 +110,13 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
109 |
else:
|
110 |
# Create animated version with keyframes
|
111 |
original_letter_styles = original_data['letters'][i] if i < len(original_data.get('letters', [])) else {}
|
|
|
112 |
|
113 |
-
# New target values
|
114 |
new_font_family = random.choice(fonts)
|
115 |
new_font_size = random.choice(font_sizes)
|
116 |
new_letter_spacing = random.choice(letter_spacings)
|
117 |
-
|
118 |
-
new_text_shadow = f"{random.choice(text_shadows)} {new_color}"
|
119 |
new_skew_angle = random.choice(skew_angles)
|
120 |
new_top = random.choice(font_tops)
|
121 |
new_margin_top = random.choice(["-0.05cm", "0.00cm", "0.03cm", "0.05cm"])
|
@@ -147,7 +148,7 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
147 |
25% {{
|
148 |
font-size: {new_font_size};
|
149 |
letter-spacing: {new_letter_spacing};
|
150 |
-
color: {
|
151 |
text-shadow: {new_text_shadow};
|
152 |
transform: skew({new_skew_angle}) scale(1.2);
|
153 |
top: {new_top};
|
@@ -162,7 +163,7 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
162 |
100% {{
|
163 |
font-size: {new_font_size};
|
164 |
letter-spacing: {new_letter_spacing};
|
165 |
-
color: {
|
166 |
text-shadow: {new_text_shadow};
|
167 |
transform: skew({new_skew_angle}) scale(1);
|
168 |
top: {new_top};
|
@@ -181,7 +182,7 @@ def generate_word_design(word, word_id, is_animated=False):
|
|
181 |
'margin-top': new_margin_top,
|
182 |
'position': 'relative',
|
183 |
'top': new_top,
|
184 |
-
'color':
|
185 |
'display': 'inline-block',
|
186 |
'margin': '0 1px',
|
187 |
'vertical-align': 'middle',
|
@@ -307,7 +308,7 @@ def trigger_movement(input_html):
|
|
307 |
|
308 |
# Create Gradio interface using Blocks
|
309 |
with gr.Blocks() as demo:
|
310 |
-
gr.Markdown("# Random Word Styler\
|
311 |
|
312 |
generate_button = gr.Button("Generate Random Words", variant="primary")
|
313 |
output_html = gr.HTML()
|
|
|
55 |
letter_spacings = ["-1px", "0px", "1px", "2px"]
|
56 |
text_shadows = ["0px 0px 1px #000", "0px 0px 2px #000", "1px 0px 0px #000", "0px 0px 0px #000"]
|
57 |
skew_angles = ["-25deg", "-20deg", "-15deg", "-10deg", "0deg", "10deg", "15deg", "20deg", "25deg"]
|
58 |
+
word_color = "#000000" # All letters in original word are black
|
59 |
else:
|
60 |
# Animated state values
|
61 |
font_sizes = ["20px", "22px", "24px", "26px"]
|
|
|
63 |
letter_spacings = ["-3px", "-2px", "0px", "2px", "3px", "4px"]
|
64 |
text_shadows = ["0px 0px 5px", "2px 2px 4px", "0px 0px 8px", "3px 3px 6px", "1px 1px 10px"]
|
65 |
skew_angles = ["-35deg", "-25deg", "0deg", "25deg", "35deg", "45deg"]
|
66 |
+
word_color = f"#{random.randint(0, 0xFFFFFF):06x}" # ONE color for the entire word
|
67 |
|
68 |
letters = list(word)
|
69 |
styled_letters = []
|
|
|
77 |
if not is_animated:
|
78 |
# Store original values for later animation
|
79 |
if word_id not in original_designs:
|
80 |
+
original_designs[word_id] = {'letters': [], 'word_color': word_color}
|
81 |
|
82 |
original_styles = {
|
83 |
'font_family': random.choice(fonts),
|
|
|
87 |
'skew_angle': random.choice(skew_angles),
|
88 |
'margin_top': random.choice(["-0.02cm", "0.00cm", "0.02cm"]),
|
89 |
'top': random.choice(font_tops),
|
90 |
+
'color': word_color # Same color for all letters in this word
|
91 |
}
|
92 |
original_designs[word_id]['letters'].append(original_styles)
|
93 |
+
original_designs[word_id]['word_color'] = word_color
|
94 |
|
95 |
style = {
|
96 |
'font-family': original_styles['font_family'],
|
|
|
110 |
else:
|
111 |
# Create animated version with keyframes
|
112 |
original_letter_styles = original_data['letters'][i] if i < len(original_data.get('letters', [])) else {}
|
113 |
+
original_word_color = original_data.get('word_color', '#000000')
|
114 |
|
115 |
+
# New target values (but same color for all letters in this word)
|
116 |
new_font_family = random.choice(fonts)
|
117 |
new_font_size = random.choice(font_sizes)
|
118 |
new_letter_spacing = random.choice(letter_spacings)
|
119 |
+
new_text_shadow = f"{random.choice(text_shadows)} {word_color}" # Use word_color for shadow
|
|
|
120 |
new_skew_angle = random.choice(skew_angles)
|
121 |
new_top = random.choice(font_tops)
|
122 |
new_margin_top = random.choice(["-0.05cm", "0.00cm", "0.03cm", "0.05cm"])
|
|
|
148 |
25% {{
|
149 |
font-size: {new_font_size};
|
150 |
letter-spacing: {new_letter_spacing};
|
151 |
+
color: {word_color};
|
152 |
text-shadow: {new_text_shadow};
|
153 |
transform: skew({new_skew_angle}) scale(1.2);
|
154 |
top: {new_top};
|
|
|
163 |
100% {{
|
164 |
font-size: {new_font_size};
|
165 |
letter-spacing: {new_letter_spacing};
|
166 |
+
color: {word_color};
|
167 |
text-shadow: {new_text_shadow};
|
168 |
transform: skew({new_skew_angle}) scale(1);
|
169 |
top: {new_top};
|
|
|
182 |
'margin-top': new_margin_top,
|
183 |
'position': 'relative',
|
184 |
'top': new_top,
|
185 |
+
'color': word_color, # Same color for all letters in this word
|
186 |
'display': 'inline-block',
|
187 |
'margin': '0 1px',
|
188 |
'vertical-align': 'middle',
|
|
|
308 |
|
309 |
# Create Gradio interface using Blocks
|
310 |
with gr.Blocks() as demo:
|
311 |
+
gr.Markdown("# Random Word Styler\nEach word gets ONE color and transitions from original to new styling!")
|
312 |
|
313 |
generate_button = gr.Button("Generate Random Words", variant="primary")
|
314 |
output_html = gr.HTML()
|