circulartext commited on
Commit
c21f565
·
verified ·
1 Parent(s): 4ee7b46

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -45
app.py CHANGED
@@ -47,9 +47,10 @@ SPECIAL_WORDS = [
47
 
48
  # Global variables
49
  initial_word_design = ""
50
- special_words = []
51
 
52
  def generate_initial_design(word):
 
53
  fonts = [
54
  "'VT323', monospace",
55
  "'Josefin Sans', sans-serif",
@@ -60,7 +61,12 @@ def generate_initial_design(word):
60
  "'Nothing You Could Do', cursive",
61
  "'Reenie Beanie', cursive",
62
  "'Orbitron', sans-serif",
63
- "'Raleway', sans-serif"
 
 
 
 
 
64
  ]
65
  font_sizes = ["18px", "19px", "20px"]
66
  font_tops = ["0px", "1px", "-1px"]
@@ -110,7 +116,8 @@ def generate_initial_design(word):
110
  {" ".join(styled_letters)}
111
  </span>'''
112
 
113
- def generate_movement_design(words):
 
114
  fonts = [
115
  "'VT323', monospace",
116
  "'Josefin Sans', sans-serif",
@@ -139,9 +146,13 @@ def generate_movement_design(words):
139
  ]
140
  skew_angles = ["-25deg", "-20deg", "-15deg", "-10deg", "0deg", "10deg", "15deg", "20deg", "25deg"]
141
 
 
142
  random_color = f'#{random.randint(0, 0xFFFFFF):06x}'
 
 
143
  animation_name = f"animate_{random.randint(0, 10000)}"
144
 
 
145
  keyframes = f"""
146
  @keyframes {animation_name} {{
147
  0% {{ transform: scale(1) rotate(0deg); }}
@@ -150,35 +161,31 @@ def generate_movement_design(words):
150
  }}
151
  """
152
 
153
- styled_words = []
154
- for word in words:
155
- letters = list(word)
156
- styled_letters = []
157
-
158
- for i, letter in enumerate(letters):
159
- style = {
160
- 'font-family': random.choice(fonts),
161
- 'line-height': '1.6',
162
- 'font-size': random.choice(font_sizes),
163
- 'letter-spacing': random.choice(letter_spacings),
164
- 'text-shadow': random.choice(text_shadows),
165
- 'transform': f'skew({random.choice(skew_angles)})',
166
- 'margin-top': random.choice(["-0.02cm", "0.00cm", "0.02cm"]),
167
- 'position': 'relative',
168
- 'top': random.choice(font_tops),
169
- 'color': random_color,
170
- 'display': 'inline-block',
171
- 'margin': '0 1px',
172
- 'vertical-align': 'middle',
173
- 'animation': f'{animation_name} 0.5s ease-in-out',
174
- 'animation-delay': f'{i * 0.1}s'
175
- }
176
-
177
- style_str = '; '.join([f'{k}: {v}' for k, v in style.items()])
178
- styled_letter = f'<span class="styled-letter" style="{style_str}">{letter}</span>'
179
- styled_letters.append(styled_letter)
180
 
181
- styled_words.append("".join(styled_letters))
 
 
182
 
183
  return f'''
184
  <style>
@@ -191,13 +198,14 @@ def generate_movement_design(words):
191
  align-items: baseline;
192
  vertical-align: middle;
193
  margin: 0 2px;">
194
- {" ".join(styled_words)}
195
  </span>
196
  '''
197
 
198
  def process_text(input_text):
199
- global initial_word_design, special_words
200
 
 
201
  generated = generator(
202
  input_text,
203
  max_new_tokens=MAX_NEW_TOKENS,
@@ -208,17 +216,17 @@ def process_text(input_text):
208
 
209
  generated_text = generated[0]['generated_text']
210
  generated_text = generated_text[:1000]
211
- words = generated_text.split()
212
 
213
- special_words = []
214
- if len(words) >= 2:
215
- special_words = [words[-2], words[-1]] # Get last two words
216
-
217
- for word in special_words:
218
  clean_word = ''.join(filter(str.isalnum, word)).lower()
219
  if clean_word in SPECIAL_WORDS:
 
220
  initial_word_design = generate_initial_design(word)
221
- words[words.index(word)] = initial_word_design
 
 
222
 
223
  output_html = ' '.join(words)
224
 
@@ -257,16 +265,17 @@ def process_text(input_text):
257
  return final_output
258
 
259
  def trigger_movement(input_html):
260
- global initial_word_design, special_words
261
 
262
- if not initial_word_design or not special_words:
263
  return input_html
264
 
265
- movement_design = generate_movement_design(special_words)
266
  updated_html = input_html.replace(initial_word_design, movement_design, 1)
267
 
268
  return updated_html
269
 
 
270
  with gr.Blocks() as demo:
271
  gr.Markdown("# CircularText Styler\nEnter a prompt to generate text with special word styling.")
272
 
@@ -281,8 +290,9 @@ with gr.Blocks() as demo:
281
  fn=process_text,
282
  inputs=input_text,
283
  outputs=output_html,
284
- show_progress=True # Enable a basic loading indicator
285
  )
286
  animate_button.click(trigger_movement, inputs=output_html, outputs=output_html)
287
 
288
- demo.launch()
 
 
47
 
48
  # Global variables
49
  initial_word_design = ""
50
+ special_word = ""
51
 
52
  def generate_initial_design(word):
53
+ """Generate initial design for the special word in black color."""
54
  fonts = [
55
  "'VT323', monospace",
56
  "'Josefin Sans', sans-serif",
 
61
  "'Nothing You Could Do', cursive",
62
  "'Reenie Beanie', cursive",
63
  "'Orbitron', sans-serif",
64
+ "'Raleway', sans-serif",
65
+ "'Open Sans Condensed', sans-serif",
66
+ "'Poiret One', cursive",
67
+ "'Indie Flower', cursive",
68
+ "'Pacifico', cursive",
69
+ "'Teko', sans-serif"
70
  ]
71
  font_sizes = ["18px", "19px", "20px"]
72
  font_tops = ["0px", "1px", "-1px"]
 
116
  {" ".join(styled_letters)}
117
  </span>'''
118
 
119
+ def generate_movement_design(word):
120
+ """Generate a new random design for the movement animation."""
121
  fonts = [
122
  "'VT323', monospace",
123
  "'Josefin Sans', sans-serif",
 
146
  ]
147
  skew_angles = ["-25deg", "-20deg", "-15deg", "-10deg", "0deg", "10deg", "15deg", "20deg", "25deg"]
148
 
149
+ # Generate random color for the movement design
150
  random_color = f'#{random.randint(0, 0xFFFFFF):06x}'
151
+
152
+ # Generate unique animation name
153
  animation_name = f"animate_{random.randint(0, 10000)}"
154
 
155
+ # Create keyframes for the animation sequence
156
  keyframes = f"""
157
  @keyframes {animation_name} {{
158
  0% {{ transform: scale(1) rotate(0deg); }}
 
161
  }}
162
  """
163
 
164
+ letters = list(word)
165
+ styled_letters = []
166
+
167
+ for i, letter in enumerate(letters):
168
+ style = {
169
+ 'font-family': random.choice(fonts),
170
+ 'line-height': '1.6',
171
+ 'font-size': random.choice(font_sizes),
172
+ 'letter-spacing': random.choice(letter_spacings),
173
+ 'text-shadow': random.choice(text_shadows),
174
+ 'transform': f'skew({random.choice(skew_angles)})',
175
+ 'margin-top': random.choice(["-0.02cm", "0.00cm", "0.02cm"]),
176
+ 'position': 'relative',
177
+ 'top': random.choice(font_tops),
178
+ 'color': random_color,
179
+ 'display': 'inline-block',
180
+ 'margin': '0 1px',
181
+ 'vertical-align': 'middle',
182
+ 'animation': f'{animation_name} 0.5s ease-in-out',
183
+ 'animation-delay': f'{i * 0.1}s'
184
+ }
 
 
 
 
 
 
185
 
186
+ style_str = '; '.join([f'{k}: {v}' for k, v in style.items()])
187
+ styled_letter = f'<span class="styled-letter" style="{style_str}">{letter}</span>'
188
+ styled_letters.append(styled_letter)
189
 
190
  return f'''
191
  <style>
 
198
  align-items: baseline;
199
  vertical-align: middle;
200
  margin: 0 2px;">
201
+ {" ".join(styled_letters)}
202
  </span>
203
  '''
204
 
205
  def process_text(input_text):
206
+ global initial_word_design, special_word
207
 
208
+ # Generate text with more tokens
209
  generated = generator(
210
  input_text,
211
  max_new_tokens=MAX_NEW_TOKENS,
 
216
 
217
  generated_text = generated[0]['generated_text']
218
  generated_text = generated_text[:1000]
 
219
 
220
+ words = generated_text.split()
221
+
222
+ for i, word in enumerate(words):
 
 
223
  clean_word = ''.join(filter(str.isalnum, word)).lower()
224
  if clean_word in SPECIAL_WORDS:
225
+ special_word = word
226
  initial_word_design = generate_initial_design(word)
227
+ words[i] = initial_word_design
228
+ else:
229
+ words[i] = word
230
 
231
  output_html = ' '.join(words)
232
 
 
265
  return final_output
266
 
267
  def trigger_movement(input_html):
268
+ global initial_word_design, special_word
269
 
270
+ if not initial_word_design or not special_word:
271
  return input_html
272
 
273
+ movement_design = generate_movement_design(special_word)
274
  updated_html = input_html.replace(initial_word_design, movement_design, 1)
275
 
276
  return updated_html
277
 
278
+ # Create Gradio interface using Blocks
279
  with gr.Blocks() as demo:
280
  gr.Markdown("# CircularText Styler\nEnter a prompt to generate text with special word styling.")
281
 
 
290
  fn=process_text,
291
  inputs=input_text,
292
  outputs=output_html,
293
+ show_progress=True # Enable the loading indicator
294
  )
295
  animate_button.click(trigger_movement, inputs=output_html, outputs=output_html)
296
 
297
+ # Launch the app
298
+ demo.launch()