A3='FP32 (Lambat, Kualitas Terbaik)' A2='FP16 (Cepat, Kualitas Baik)' A1='Semua Waktu' A0='secondary' z='3 Bulan Terakhir' y='2 Minggu Terakhir' x='1 Minggu Terakhir' w='%Y-%m-%d %H:%M:%S' v='caidas/swin2sr-realworld-sr-x4-64-bsrgan-psnr' u=ImportError i=1. h='utf-8' g=len f=open V='primary' U='cuda' T=Exception L='Total Pengunjung' H='panel' F='Timestamp' E=True D=False C=print B=None import gradio as A,torch as G,numpy as W from diffusers import DiffusionPipeline as A4 import random as j,time as k,os as M from datetime import datetime as l,timedelta as X import csv,pandas as I,threading as A5 from PIL import Image,ImageEnhance as A6 try:import psutil as N,platform as O;from transformers import Swin2SRForImageSuperResolution as Y,Swin2SRImageProcessor as m;C('✅ Library tambahan (psutil, transformers) berhasil diimpor.') except u:C("❌ Peringatan: Library 'psutil' atau 'transformers' tidak ditemukan. Fitur System Monitor & Upscaler tidak akan berfungsi.");N=B;O=B;Y=B;m=B try:import google.generativeai as P;C("✅ Library 'google-generativeai' berhasil diimpor.") except u:C("❌ Peringatan: Library 'google-generativeai' tidak ditemukan. Fitur Chatbot & Prompt Enhancer tidak akan berfungsi.");P=B A7='\n\n \n \n RenXploit\'s Creative AI Suite\n \n \n \n \n \n\n' J='visitor_log.csv' Z=A5.Lock() K=U if G.cuda.is_available()else'cpu' C(f"âžĄī¸ Menggunakan device: {K.upper()}") def A8(): if not M.path.exists(J): with Z: if not M.path.exists(J): with f(J,mode='w',newline='',encoding=h)as A:B=csv.writer(A);B.writerow([F,'IP Address','User Agent']) C(f"✅ File log '{J}' berhasil dibuat.") A8() C('âžĄī¸ Memuat model SDXL-Turbo...') n=A4.from_pretrained('stabilityai/sdxl-turbo',torch_dtype=G.float16 if K==U else G.float32,variant='fp16'if K==U else B,use_safetensors=E).to(K) if G.cuda.is_available():n.enable_xformers_memory_efficient_attention() C('✅ Model SDXL-Turbo berhasil dimuat.') a=B b=B if Y: try:C('âžĄī¸ Memuat model AI Upscaler (Swin2SR)...');a=Y.from_pretrained(v).to(K);b=m.from_pretrained(v);C('✅ Model AI Upscaler berhasil dimuat.') except T as A9:C(f"❌ Gagal memuat model Upscaler: {A9}. Fitur upscale akan dinonaktifkan.") class AA: def __init__(A): A.api_keys=[];A.is_configured=D if not P:return B=1 while E: F=M.getenv(f"GEMINI_API_KEY_{B}") if F:A.api_keys.append(F);B+=1 else:break if A.api_keys:C(f"✅ Berhasil memuat {g(A.api_keys)} API Key Gemini. Sistem rotasi aktif.");A.is_configured=E else:C('❌ PERINGATAN: Tidak ada API Key Gemini yang ditemukan. Fitur AI Chat & Prompt Enhancer tidak akan berfungsi.') def chat(A,message,history,system_prompt=B): D=system_prompt;B=message if not A.is_configured:return'Maaf, fitur ini tidak terkonfigurasi karena tidak ada API Key.' try: F=j.choice(A.api_keys);P.configure(api_key=F);G=P.GenerativeModel('gemini-2.5-flash');E=B if D:E=f"{D}\n\nUser query: {B}" H=G.generate_content(E);return H.text except T as I:C(f"❌ Terjadi error pada API Key Gemini: {I}");return'Terjadi kesalahan saat menghubungi API AI. Mungkin salah satu API Key tidak valid atau ada masalah jaringan. Silakan coba lagi.' Q=AA() def AB(request): D='N/A';A=request;E=l.now().strftime(w);B=A.client.host if A else D;F=A.headers.get('user-agent','Unknown')if A else D with Z: with f(J,mode='a',newline='',encoding=h)as G:H=csv.writer(G);H.writerow([E,B,F]) C(f"✅ Pengunjung baru tercatat: IP {B}") def AC(prompt,negative_prompt,steps,seed,num_images): C=prompt;B=seed if not C:raise A.Error('Prompt tidak boleh kosong!') if B==-1:B=j.randint(0,2**32-1) D=G.manual_seed(B);E=n(prompt=C,negative_prompt=negative_prompt,generator=D,num_inference_steps=steps,guidance_scale=.0,num_images_per_prompt=num_images).images;return E,B def AD(prompt,negative_prompt,steps,seed,num_images):yield(A.update(visible=D),A.update(visible=E),A.update(interactive=D),A.update(visible=D));B=k.time();C,F=AC(prompt,negative_prompt,steps,int(seed),int(num_images));G=k.time();H=G-B;I=f"Seed yang digunakan: {F}\nTotal waktu generasi: {H:.2f} detik";yield(A.update(value=C,visible=E),A.update(visible=D),A.update(interactive=E),A.update(value=I,visible=E)) def AE(name,email,message): B=message if not name or not B:A.Warning('Nama dan Pesan tidak boleh kosong!');return A.update(visible=D) F=l.now().strftime(w);G=f"""--- Laporan Baru ({F}) --- Nama: {name} Email: {email} Pesan: {B} """ with f('reports.log','a',encoding=h)as H:H.write(G) C('✅ Laporan baru telah disimpan ke reports.log');return A.update(value='✅ Terima kasih! Laporan Anda telah kami terima.',visible=E) def c(time_filter): K='## 📈 0';G=time_filter try: with Z: if not M.path.exists(J)or M.path.getsize(J)<10:return K,I.DataFrame({F:[],L:[]}) A=I.read_csv(J) if A.empty:return K,I.DataFrame({F:[],L:[]}) A[F]=I.to_datetime(A[F],errors='coerce');A.dropna(subset=[F],inplace=E) if A.empty:return K,I.DataFrame({F:[],L:[]}) P=g(A);N=f"## 📈 {P:,}";A[L]=W.arange(1,g(A)+1);H=I.to_datetime('now',utc=E).tz_localize(B);A[F]=A[F].dt.tz_localize(B) if G==x:D=A[A[F]>=H-X(weeks=1)] elif G==y:D=A[A[F]>=H-X(weeks=2)] elif G==z:D=A[A[F]>=H-X(days=90)] else:D=A if D.empty:return N,I.DataFrame({F:[],L:[]}) return N,D except T as Q:O=f"Error saat memperbarui monitor: {Q}";C(f"❌ {O}");return f"## âš ī¸ Error",I.DataFrame({'Error':[O]}) def AF(simple_prompt): B=simple_prompt if not B:A.Warning('Tolong masukkan ide Anda terlebih dahulu.');return'' if not Q.is_configured:A.Error('Fitur Prompt Enhancer tidak aktif karena API Key Gemini tidak diatur.');return'Fitur tidak aktif.' C='Anda adalah seorang ahli prompt engineering untuk model AI text-to-image seperti Stable Diffusion. Tugas Anda adalah mengubah ide sederhana dari pengguna menjadi prompt yang kaya, deskriptif, dan artistik. Fokus pada detail visual: subjek, setting, pencahayaan (cinematic lighting, soft light, dll), gaya seni (photorealistic, anime style, oil painting, dll), komposisi, dan kualitas (hyperdetailed, 4K, masterpiece, trending on artstation). Hasilkan HANYA prompt-nya saja dalam format teks panjang, tanpa penjelasan atau kalimat pembuka/penutup.';yield'🧠 AI sedang meracik prompt ajaib untuk Anda...';D=Q.chat(B,[],system_prompt=C);yield D def AG(image_to_upscale,clarity_strength): H=image_to_upscale;F=clarity_strength if H is B:raise A.Error('Silakan unggah gambar terlebih dahulu.') if a is B or b is B:raise A.Error('Fitur Upscaler tidak aktif karena model gagal dimuat. Periksa log saat startup.') yield(B,'🚀 Memproses peningkatan resolusi 4x oleh AI...') try: with G.no_grad():J=b(H,return_tensors='pt').to(K);L=a(**J);E=L.reconstruction.data.squeeze().float().cpu().clamp_(0,1).numpy();E=W.moveaxis(E,source=0,destination=-1);E=(E*255.).round().astype(W.uint8);D=Image.fromarray(E) if F>i:yield(D,f"✨ Menerapkan peningkatan kejernihan (Strength: {F:.2f})...");M=A6.Sharpness(D);D=M.enhance(F) yield(D,f"✅ Gambar berhasil ditingkatkan! Resolusi akhir: {D.width}x{D.height}px.") except T as I:C(f"❌ Error saat upscaling: {I}");yield(B,f"âš ī¸ Terjadi error saat upscaling: {I}") def o(): if not N or not O:return'Informasi sistem tidak tersedia (library `psutil` tidak ditemukan).' D=N.cpu_percent(interval=B);A=N.virtual_memory();C='Tidak terdeteksi (PyTorch tidak menemukan CUDA)' if G.cuda.is_available():E=G.cuda.get_device_name(0);F=G.cuda.memory_allocated(0)/1024**3;H=G.cuda.get_device_properties(0).total_memory/1024**3;C=f"**GPU:** `{E}`\n**VRAM Terpakai:** `{F:.2f} GB / {H:.2f} GB`" I=f"**Platform:** `{O.system()} {O.release()}`";return f"**CPU Terpakai:** `{D:.1f}%`\n**RAM Terpakai:** `{A.percent:.1f}% ({A.used/1024**3:.2f} GB / {A.total/1024**3:.2f} GB)`\n{C}\n---\n{I}" with A.Blocks(theme=A.themes.Base(),head=A7)as R: A.Markdown("# 🚀 RenXploit's Creative AI Suite 🌌",elem_id='main-title');A.Markdown('Sebuah platform lengkap untuk kreativitas Anda, ditenagai oleh AI.',elem_id='main-subtitle') with A.Tabs()as AH: with A.TabItem('🎨 Image Generator',id=0): with A.Row(variant=H,equal_height=D): with A.Column(scale=1): A.Markdown('### 📝 **Masukan Perintah Anda**');p=A.Textbox(label='Prompt',placeholder='Contoh: Cinematic photo, seekor rubah merah...',lines=3,info='Jadilah sangat spesifik! Atau gunakan Prompt Enhancer.');AI=A.Textbox(label='Prompt Negatif',placeholder='Contoh: blurry, low quality, bad hands...',lines=2,info='Hal-hal yang TIDAK Anda inginkan.');AJ=A.Slider(minimum=1,maximum=8,value=2,step=1,label='Jumlah Gambar');q=A.Button('✨ Hasilkan Gambar!',variant=V) with A.Accordion('âš™ī¸ Opsi Lanjutan',open=D): AK=A.Slider(minimum=1,maximum=5,value=2,step=1,label='Langkah Iterasi (Kualitas vs Kecepatan)') with A.Row():r=A.Number(label='Seed',value=-1,precision=0,info='Gunakan -1 untuk acak.');AL=A.Button('🎲 Acak',variant=A0) with A.Column(scale=2):A.Markdown('### đŸ–ŧī¸ **Hasil Generasi**');AM=A.Gallery(label='Hasil Gambar',show_label=D,elem_id='gallery',columns=2,object_fit='contain',height='auto');AN=A.HTML(visible=D);AO=A.Textbox(label='Informasi Generasi',visible=D,interactive=D,lines=2) with A.TabItem('đŸ’Ŧ Chat with AI',id=1): with A.Row(variant=H): with A.Column(): A.Markdown('### 🤖 **Asisten AI Flood**') if not Q.is_configured:A.Warning('Fitur Chatbot dinonaktifkan. API Key Gemini tidak terkonfigurasi.') else:A.ChatInterface(Q.chat,chatbot=A.Chatbot(height=500,label='Flood AI',value=[(B,'Halo! Saya adalah asisten AI dari RenXploit. Ada yang bisa saya bantu?')]),title=B,description='Tanyakan apa saja!',examples=['Apa itu SDXL-Turbo?','Buatkan saya puisi tentang AI','Jelaskan konsep lubang hitam dengan sederhana']) with A.TabItem('✨ Prompt Enhancer',id=2): with A.Row(variant=H): with A.Column(): A.Markdown('### đŸĒ„ **Ubah Ide Jadi Prompt Ajaib**\nCukup tulis ide sederhana, dan biarkan AI menyempurnakannya menjadi prompt yang detail dan artistik.');AP=A.Textbox(label='Ide Sederhana Anda',placeholder='Contoh: seekor astronot di hutan alien',lines=3);AQ=A.Button('Buat Prompt Ajaib!',variant=V);s=A.Textbox(label='Prompt yang Disempurnakan',lines=5,interactive=E,show_copy_button=E) with A.Row():AR=A.Button('âžĄī¸ Kirim & Pindah ke Generator') with A.TabItem('🚀 AI Image Upscaler',id=3): with A.Row(variant=H,equal_height=D): with A.Column():A.Markdown('### **Tingkatkan Resolusi Gambar**\nUnggah gambar untuk meningkatkan kualitas dan ukurannya hingga 4x lipat menggunakan AI.');AS=A.Image(type='pil',label='Unggah Gambar Anda di Sini');AT=A.Slider(minimum=i,maximum=3.,value=i,step=.1,label='Tingkat Peningkatan Kejernihan',info='Setelah di-upscale 4x, atur kejernihan gambar di sini. 1.0 = Tanpa efek.');AU=A.Button('Tingkatkan Resolusi!',variant=V) with A.Column():A.Markdown('### **Hasil Peningkatan Resolusi**');AV=A.Image(label='Gambar Hasil Upscale',interactive=D);AW=A.Markdown('Status: Menunggu gambar...') with A.TabItem('📊 Visitor Monitor',id=4): with A.Row(variant=H): with A.Column(): A.Markdown('### 📈 **Live Visitor Monitor**\nPantau jumlah total pengunjung aplikasi Anda secara real-time.') with A.Row(): with A.Column(scale=3):d=A.Markdown('## 📈 Memuat data...') with A.Column(scale=2):S=A.Radio([A1,x,y,z],label='Tampilkan data untuk',value=A1);AX=A.Button('🔄 Segarkan Manual',variant=A0) e=A.LinePlot(x=F,y=L,title='Grafik Pertumbuhan Pengunjung',tooltip=[F,L],height=500,interactive=E) with A.TabItem('âš™ī¸ System & Settings',id=5): with A.Row(variant=H): with A.Column():A.Markdown('### **Live System Monitor**');t=A.Markdown('Memuat info sistem...');AY=A.Button('Trigger System Info',visible=D,elem_id='system-info-trigger-btn') with A.Column(): A.Markdown('### **Pengaturan Aplikasi**') with A.Accordion('Kualitas Model',open=E):A.Radio([A2,A3],value=A2 if K==U else A3,label='Presisi Model Generator',interactive=D,info='Terkunci. Pengaturan ini ditentukan saat aplikasi dimulai berdasarkan ketersediaan GPU Anda.') with A.TabItem('💡 Panduan Prompting',id=6): with A.Row(variant=H):A.Markdown('## Cara Menjadi "Art Director" yang Hebat untuk AI...') with A.TabItem('📖 Blog & Updates',id=7): with A.Row(variant=H):A.Markdown("### Perkembangan Terbaru dari RenXploit's AI Suite\n- **v2.4 (Pembaruan Terkini):** Upscaler di-upgrade dengan kontrol kejernihan, Visitor Monitor diperbaiki, dan UI Settings diperjelas.\n- **v2.3:** Perbaikan bug kritis untuk kompatibilitas dengan berbagai versi Gradio.\n- **v2.2:** Perbaikan bug untuk kompatibilitas Gradio.\n- **v2.1:** Menambahkan **Prompt Enhancer**, **AI Image Upscaler**, dan **Live System Monitor**.\n- **v2.0:** Perombakan Desain Total.\n- **Rencana Berikutnya:** Menjajaki model generator gambar yang berbeda dan fitur Inpainting/Outpainting. Nantikan!") with A.TabItem('â„šī¸ About & Support',id=8): with A.Row(variant=H): with A.Column(): A.Markdown('### Tentang Proyek dan Dukungan') with A.Accordion("Tentang RenXploit's Creative AI Suite",open=E):A.Markdown("**RenXploit's Creative AI Suite** adalah proyek pribadi yang dibuat untuk mengeksplorasi kemampuan AI generatif dalam sebuah antarmuka yang mudah digunakan.\n **Bagian ini belum saya kerjakan dengan selesai** jadi jika anda ingin komplain atau ada hal apapun itu bisa report ke saya lewat website portofolio saya dengan url: https://ngoprek.xyz/contact") with A.Accordion('Laporkan Masalah atau Beri Masukan'):AZ=A.Textbox(label='Nama Anda');Aa=A.Textbox(label='Email Anda (Opsional)');Ab=A.Textbox(label='Pesan Anda',lines=5,placeholder='Jelaskan masalah yang Anda temui atau ide yang Anda miliki...');Ac=A.Button('Kirim Laporan',variant=V);Ad=A.Markdown(visible=D) A.Markdown("---\n",elem_classes='footer');AL.click(lambda:-1,outputs=r);q.click(fn=AD,inputs=[p,AI,AK,r,AJ],outputs=[AM,AN,q,AO]);Ac.click(fn=AE,inputs=[AZ,Aa,Ab],outputs=[Ad]);R.load(AB,inputs=B,outputs=B);R.load(fn=c,inputs=[S],outputs=[d,e]);AX.click(fn=c,inputs=[S],outputs=[d,e]);S.change(fn=c,inputs=[S],outputs=[d,e]);AQ.click(fn=AF,inputs=[AP],outputs=[s]);AR.click(fn=lambda prompt:(prompt,A.Tabs(selected=0)),inputs=[s],outputs=[p,AH]);AU.click(fn=AG,inputs=[AS,AT],outputs=[AV,AW]);AY.click(fn=o,inputs=B,outputs=t);R.load(fn=o,inputs=B,outputs=t) if __name__=='__main__':R.launch(debug=E)