File size: 2,872 Bytes
0fa3012 |
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 |
import os
import requests
import gradio as gr
from huggingface_hub import InferenceClient
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Configuration
HF_TOKEN = os.getenv("HF_TOKEN")
REDDIT_API = "https://www.reddit.com/r/trending/top.json?limit=5"
DEFAULT_TRENDS = ["Celebrity gossip", "Tech news", "Movie drama", "Gaming leaks"]
STYLES = ["Realistic", "Cartoon", "Anime", "3D Render"]
# Initialize clients
client = InferenceClient(token=HF_TOKEN)
def get_trends():
"""Fetch trending topics with Reddit API fallback"""
try:
res = requests.get(REDDIT_API, headers={"User-Agent": "MemeBot/1.0"}, timeout=3)
return [post["data"]["title"] for post in res.json()["data"]["children"]]
except:
return DEFAULT_TRENDS
def generate_meme(prompt: str, style: str):
"""Generate meme using DeepSeek Janus-Pro"""
try:
enhanced_prompt = (
f"Trending meme template ({style} style): {prompt}. "
"Viral social media format, high contrast, funny text overlay"
)
image = client.text_to_image(
model="deepseek-ai/janus-pro",
prompt=enhanced_prompt,
negative_prompt="low quality, text, watermark",
height=512,
width=512
)
return image
except Exception as e:
print(f"Generation error: {e}")
return None
# Build UI
with gr.Blocks(title="π Viral Meme Generator", css="static/style.css") as demo:
gr.Markdown("# <center>π₯ Create Viral Memes in Seconds</center>")
with gr.Row(variant="panel"):
with gr.Column(scale=3):
gr.HTML('<img src="file/static/assets/logo.png" width="200">')
trend_select = gr.Dropdown(get_trends(), label="Trending Topics")
style_select = gr.Dropdown(STYLES, label="Visual Style", value="Realistic")
text_input = gr.Textbox(label="Your Message", placeholder="Add funny text...")
generate_btn = gr.Button("Generate Now", variant="primary")
with gr.Column(scale=2):
output_img = gr.Image(label="Your Meme", shape=(512, 512))
gr.HTML("""
<div class="monetization">
<script type='text/javascript' src='https://storage.ko-fi.com/cdn/widget/Widget_2.js'></script>
<script type='text/javascript'>kofiwidget2.init('Support Us', '#FF5F5F', 'rooblecali');kofiwidget2.draw();</script>
</div>
""")
download_btn = gr.Button("π Unlock HD Download ($0.99)")
# Event handling
generate_btn.click(fn=generate_meme, inputs=[text_input, style_select], outputs=output_img)
trend_select.change(fn=lambda x: x, inputs=trend_select, outputs=text_input)
if __name__ == "__main__":
demo.launch(server_port=int(os.getenv("PORT", 7860))) |