Spaces:
Running
Running
File size: 3,634 Bytes
48706c6 4e61a3c 48706c6 4e61a3c 48706c6 4e61a3c 023bed0 4e61a3c 023bed0 4e61a3c 023bed0 4e61a3c 023bed0 4e61a3c 023bed0 4e61a3c 023bed0 4e61a3c 48706c6 4e61a3c 023bed0 48706c6 023bed0 4e61a3c 48706c6 4e61a3c 023bed0 48706c6 4e61a3c 023bed0 4e61a3c 48706c6 4e61a3c 48706c6 4e61a3c 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 |
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 simple animated design for a word using CSS animations."""
# Controlled randomization parameters
fonts = [
"'Dosis', sans-serif",
"'Josefin Sans', sans-serif",
"'Orbitron', sans-serif",
"'Roboto Condensed', sans-serif"
]
font_size = random.choice([18, 20, 22, 24])
skew_angle = random.choice([-15, -10, 0, 10, 15])
base_color = f'#{random.randint(0, 0xFFFFFF):06x}'
# Unique animation name
animation_name = f"animation_{random.randint(0, 10000)}"
# CSS Keyframes
keyframes = f"""
@keyframes {animation_name} {{
0% {{ transform: skew({skew_angle}deg); color: {base_color}; }}
50% {{ transform: skew({-skew_angle}deg); color: {base_color}; }}
100% {{ transform: skew({skew_angle}deg); color: {base_color}; }}
}}
"""
# Style properties
style = {
'font-family': random.choice(fonts),
'font-size': f'{font_size}px',
'color': base_color,
'display': 'inline-block',
'animation': f'{animation_name} 2s infinite',
'margin': '0 2px'
}
# Convert style to inline CSS
style_str = '; '.join([f'{k}: {v}' for k, v in style.items()])
# Construct HTML with embedded style and animation
styled_word = f'''
<style>
{keyframes}
</style>
<span style="{style_str}">{word}</span>
'''
return styled_word
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 only necessary fonts -->
<link href='https://fonts.googleapis.com/css2?family=Dosis&family=Josefin+Sans&family=Orbitron&family=Roboto+Condensed&display=swap' rel='stylesheet'>
</head>
<body style='background-color: #000; color: #fff; padding: 20px; font-size: 18px; line-height: 1.6; font-family: "Josefin Sans", sans-serif;'>
<div style='max-width: 800px; margin: auto;'>{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."
)
# Launch the interface
iface.launch() |