Spaces:
Running
Running
File size: 7,697 Bytes
48706c6 4e61a3c 48706c6 34d154f 48706c6 47d69ec 34d154f 47d69ec 34d154f 47d69ec 48706c6 34d154f 47d69ec 34d154f 47d69ec 34d154f 47d69ec 34d154f 47d69ec 34d154f 47d69ec 34d154f 47d69ec 34d154f 47d69ec 34d154f 47d69ec 34d154f 48706c6 4e61a3c 023bed0 48706c6 023bed0 4e61a3c 48706c6 4e61a3c 023bed0 48706c6 4e61a3c 023bed0 4e61a3c 48706c6 47d69ec 34d154f 47d69ec 48706c6 47d69ec 34d154f 48706c6 023bed0 4e61a3c 48706c6 023bed0 48706c6 4e61a3c 48706c6 4e61a3c |
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
import gradio as gr
import random
from transformers import pipeline
# Load the model once when the app starts
generator = pipeline('text-generation', model='distilgpt2') # Lightweight model
# Predefined words to check
SPECIAL_WORDS = ['weather', 'sun', 'middle', 'summer', 'heat']
def generate_circular_text_design(word):
"""Generate a styled design for a word by styling each letter individually, including animations."""
# Controlled randomization parameters
fonts = [
"'VT323', monospace",
"'Josefin Sans', sans-serif",
"'Rajdhani', sans-serif",
"'Anton', sans-serif",
"'Caveat', cursive",
"'Patrick Hand', cursive",
"'Nothing You Could Do', cursive",
"'Reenie Beanie', cursive",
"'Orbitron', sans-serif",
"'Raleway', sans-serif",
"'Open Sans Condensed', sans-serif",
"'Poiret One', cursive",
"'Indie Flower', cursive",
"'Pacifico', cursive",
"'Teko', sans-serif",
"'Abril Fatface', cursive",
"'Gloria Hallelujah', cursive",
"'Righteous', cursive",
"'Annie Use Your Telescope', cursive"
]
font_sizes = ["17px", "19px", "21px", "23px", "25px", "27px"]
font_tops = ["11px", "11px", "13px", "13px", "15px", "15px"]
letter_spacings = ["-6px", "-4px", "-3px", "-2px", "-1px", "0px", "1px", "2px"]
text_shadows = [
"0px 0px 1px",
"0px 0px 2px",
"1px 0px 0px",
"0px 0px 0px",
"0px 1px 0px",
"0px 2px 0px",
"0px 1px 1px",
"1px 1px 0px",
"1px 0px 1px"
]
skew_angles = ["-25deg", "-20deg", "-15deg", "-10deg", "0deg", "10deg", "15deg", "20deg", "25deg"]
# Generate a unique animation name for CSS
animation_name = f"animate_{random.randint(0, 10000)}"
# Create CSS keyframes for the animation
keyframes = f"""
@keyframes {animation_name} {{
0% {{ transform: scale(1) rotate(0deg); }}
25% {{ transform: scale(1.2) rotate(10deg); }}
50% {{ transform: scale(1) rotate(0deg); }}
75% {{ transform: scale(1.2) rotate(-10deg); }}
100% {{ transform: scale(1) rotate(0deg); }}
}}
"""
# Create HTML for each letter with dynamic styling and animation
letters = list(word)
styled_letters = []
for i, letter in enumerate(letters):
style = {
'font-family': random.choice(fonts),
'line-height': '110%',
'font-size': random.choice(font_sizes),
'letter-spacing': random.choice(letter_spacings),
'text-shadow': random.choice(text_shadows),
'transform': f'skew({random.choice(skew_angles)})',
'margin-top': f'{random.choice(["-0.06cm", "-0.03cm", "0.00cm", "0.03cm", "0.06cm"])}',
'position': 'relative',
'top': random.choice(font_tops),
'color': f'#{random.randint(0, 0xFFFFFF):06x}',
'display': 'inline-block',
'margin': '0 1px',
'animation': f'{animation_name} 2s infinite'
}
# Convert style to inline CSS
style_str = '; '.join([f'{k}: {v}' for k, v in style.items()])
# Assign a unique ID for possible future reference
styled_letter = f'<div class="styled-letter" style="{style_str}">{letter}</div>'
styled_letters.append(styled_letter)
# Combine letters into a container with flex display
return f'''
<style>
{keyframes}
</style>
<div style="display: flex; align-items: baseline;">{" ".join(styled_letters)}</div>
'''
def process_text(input_text):
"""Process text and apply special styling to matching words."""
# Limit input length to prevent long processing times
max_input_length = 20 # Adjust as needed
input_text = ' '.join(input_text.split()[:max_input_length])
# Generate text with limited length
generated = generator(input_text, max_length=50, num_return_sequences=1)
generated_text = generated[0]['generated_text']
# Limit output length to prevent overflow
generated_text = generated_text[:300] # Limit to first 300 characters
# Split text into words
words = generated_text.split()
# Check for special words and apply styling
for i, word in enumerate(words):
# Clean the word for matching
clean_word = ''.join(filter(str.isalnum, word)).lower()
if clean_word in SPECIAL_WORDS:
words[i] = generate_circular_text_design(word)
else:
words[i] = word
# Combine words back into HTML-formatted text
output_html = ' '.join(words)
# Build the complete HTML
final_output = f"""
<html>
<head>
<!-- Include all necessary fonts -->
<link href="https://fonts.googleapis.com/css2?family=VT323&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@100&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@300&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Anton&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Caveat&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Patrick+Hand&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Nothing+You+Could+Do&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Reenie+Beanie&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Orbitron&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Raleway:500" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans+Condensed:700|Oswald:300" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans+Condensed:700|Oswald:200" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Roboto+Condensed" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Poiret+One|Dosis:300|Fjalla+One" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Indie+Flower|Lobster" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Pacifico|Shadows+Into+Light|Dancing+Script|Amatic+SC" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Teko" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Abril+Fatface|Josefin+Sans|Gloria+Hallelujah|Roboto+Slab|Righteous|Sacramento|Yellowtail" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Annie+Use+Your+Telescope|Just+Me+Again+Down+Here|Nixie+One|Six+Caps|Unkempt" rel="stylesheet">
</head>
<body style='background-color: #000; color: #fff; font-size: 18px; line-height: 1.6; font-family: "Josefin Sans", sans-serif;'>
<div style='max-width: 800px; margin: auto; padding: 20px;'>
{output_html}
</div>
</body>
</html>
"""
return final_output
# Create Gradio interface
iface = gr.Interface(
fn=process_text,
inputs="text",
outputs=gr.HTML(label="Generated Text"),
title="Circular Text Styler",
description="Enter a prompt to generate text with special word styling."
)
iface.launch() |