# app.py (runs on Hugging Face Spaces w/ Firebase Firestore) import gradio as gr from PIL import Image, ImageDraw, ImageFont import hashlib import requests import firebase_admin from firebase_admin import credentials, firestore import os from io import BytesIO # 🔐 Firebase Setup (replace with your Firebase project credentials) cred_json = {   "type": "service_account",   "project_id": "YOUR_PROJECT_ID",   "private_key_id": "YOUR_KEY_ID",   "private_key": "-----BEGIN PRIVATE KEY-----\\nYOUR_PRIVATE_KEY\\n-----END PRIVATE KEY-----\\n",   "client_email": "firebase-adminsdk-xxx@your-project.iam.gserviceaccount.com",   "client_id": "your_client_id",   "auth_uri": "https://accounts.google.com/o/oauth2/auth",   "token_uri": "https://oauth2.googleapis.com/token",   "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",   "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-xxx%40your-project.iam.gserviceaccount.com" } if not firebase_admin._apps:     cred = credentials.Certificate(cred_json)     firebase_admin.initialize_app(cred) db = firestore.client() # 🤖 Hugging Face Emoji Gen HF_TOKEN = os.getenv("HF_TOKEN", "") HF_MODEL = "valhalla/emoji-diffusion" def hf_generate_emoji(prompt):     headers = {"Authorization": f"Bearer {HF_TOKEN}"}     payload = {"inputs": prompt}     response = requests.post(         f"https://api-inference.huggingface.co/models/{HF_MODEL}",         headers=headers,         json=payload,     )     if response.status_code != 200:         raise ValueError("Hugging Face API failed")     return Image.open(BytesIO(response.content)) # 🎯 Fingerprint = hash of emoji image def compute_fingerprint(img: Image.Image) -> str:     gray = img.convert("L").resize((32, 32))     return hashlib.sha256(gray.tobytes()).hexdigest() # 🏷 Overlay micro-ad / sponsor def embed_ad(img: Image.Image, tag: str) -> Image.Image:     draw = ImageDraw.Draw(img)     font = ImageFont.load_default()     draw.text((img.width - 30, img.height - 12), tag[:3].upper(), fill="yellow", font=font)     return img # 🧠 Full pipeline: gen → fingerprint → save to Firestore def process(prompt, sponsor=""):     img = hf_generate_emoji(prompt).resize((128,128))     if sponsor:         img = embed_ad(img, sponsor)     fingerprint = compute_fingerprint(img)     doc_ref = db.collection("emojis").document(fingerprint)     doc = doc_ref.get()     if not doc.exists:         doc_ref.set({             "prompt": prompt,             "sponsor": sponsor,             "usage": 0,         })     return img, fingerprint # 🔁 Increment emoji usage count def use_emoji(fp):     doc_ref = db.collection("emojis").document(fp)     doc = doc_ref.get()     if doc.exists:         new_usage = doc.to_dict()["usage"] + 1         doc_ref.update({"usage": new_usage})         return f"Usage count updated: {new_usage}"     return "Emoji not found" # 🎛 Gradio App with gr.Blocks() as demo:     gr.Markdown("# 🧬 Emoji Factory: Generate, Track & Embed Micro-Ads")     with gr.Row():         prompt = gr.Textbox(label="Enter your idea prompt (e.g. pig vault rocket)")         sponsor = gr.Textbox(label="Sponsor / Ad Tag (optional)")     gen_btn = gr.Button("🚀 Generate Emoji")     emoji_out = gr.Image(label="Generated Emoji")     fp_out = gr.Textbox(label="Emoji Fingerprint")     use_btn = gr.Button("🔁 Use Emoji")     result = gr.Textbox(label="Usage Count / Message")     gen_btn.click(fn=process, inputs=[prompt, sponsor], outputs=[emoji_out, fp_out])     use_btn.click(fn=use_emoji, inputs=[fp_out], outputs=[result]) demo.launch()