import gradio as gr # Import build functions from the tools (they are guarded to not auto-launch) import CFA import JPEG_Ghost import PRNU import shadows def build_app(): # Use TabbedInterface to avoid double-rendering nested Blocks demos = [ CFA.build_demo(), JPEG_Ghost.build_demo(), PRNU.build_demo(), shadows.build_gradio_interface(), ] titles = [ "CFA Artifacts", "JPEG Ghost / Double Compression", "PRNU (Camera Fingerprint)", "Vanishing Points (Shadows/Geometry)", ] demo = gr.TabbedInterface(demos, titles, theme=gr.themes.Soft(), title="🔍 Image Forensics Toolkit") return demo return demo if __name__ == "__main__": app = build_app() app.queue() app.launch()