import gradio as gr import requests import json import os BASE_URL = "https://api.jigsawstack.com/v1" headers = { "x-api-key": os.getenv("JIGSAWSTACK_API_KEY") } def validate_nsfw(url): if not url or not url.strip(): return None, "Error: Image URL is required.", None, None try: response = requests.post( f"{BASE_URL}/validate/nsfw", headers=headers, json={"url": url.strip()} ) response.raise_for_status() result = response.json() if not result.get("success"): error_msg = f"Error: API call failed - {result.get('message', 'Unknown error')}" return url, error_msg, None, None # Extract detailed information nsfw = result.get("nsfw", False) nudity = result.get("nudity", False) gore = result.get("gore", False) nsfw_score = result.get("nsfw_score", 0) nudity_score = result.get("nudity_score", 0) gore_score = result.get("gore_score", 0) # Format the output status_message = f"Overall NSFW: {'Yes' if nsfw else 'No'}" nudity_details = f"Nudity: {'Detected' if nudity else 'Not Detected'} (Score: {nudity_score:.4f})" gore_details = f"Gore: {'Detected' if gore else 'Not Detected'} (Score: {gore_score:.4f})" return url, status_message, nudity_details, gore_details except requests.exceptions.RequestException as e: return url, f"Request failed: {str(e)}", None, None except Exception as e: return url, f"An unexpected error occurred: {str(e)}", None, None with gr.Blocks() as demo: gr.Markdown("""

🧩 NSFW Detection

Quickly detect nudity, violence, and other NSFW content in images.

For more details and API usage, see the documentation.

""") with gr.Row(): with gr.Column(): gr.Markdown("#### Image to Analyze") nsfw_url = gr.Textbox( label="Image URL", placeholder="Enter the URL of the image you want to validate..." ) nsfw_btn = gr.Button("Validate Image", variant="primary") with gr.Column(): gr.Markdown("#### Validation Result") nsfw_image_display = gr.Image(label="Image Preview") nsfw_status_message = gr.Textbox(label="Status", interactive=False) nsfw_nudity_details = gr.Textbox(label="Nudity Details", interactive=False) nsfw_gore_details = gr.Textbox(label="Gore Details", interactive=False) nsfw_btn.click( validate_nsfw, inputs=[nsfw_url], outputs=[ nsfw_image_display, nsfw_status_message, nsfw_nudity_details, nsfw_gore_details ] ) demo.launch()