import gradio as gr
import numpy as np
import time

def sepia(input_img, num_copies):
    sepia_filter = np.array([
        [0.393, 0.769, 0.189], 
        [0.349, 0.686, 0.168], 
        [0.272, 0.534, 0.131]
    ])
    # Normalize input image to 0-1 range
    input_img = input_img / 255.0
    sepia_img = np.dot(input_img[...,:3], sepia_filter.T)
    sepia_img = np.clip(sepia_img, 0, 1)
    
    # Iterate to yield multiple sepia images
    for _ in range(num_copies):
        # Simulating a delay for demonstration, you might not need this
        time.sleep(1)
        yield (sepia_img * 255).astype(np.uint8)

demo = gr.Interface(fn=sepia,
                    inputs=[gr.Image(), gr.Number()],
                    outputs="image",
                    title="Sepia Tone Generator")

if __name__ == "__main__":
    demo.launch()