|
import os |
|
import requests |
|
import gradio as gr |
|
from huggingface_hub import InferenceClient |
|
from dotenv import load_dotenv |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
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"] |
|
|
|
|
|
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 |
|
|
|
|
|
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)") |
|
|
|
|
|
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))) |