drewThomasson's picture
Update app.py
08b913e verified
raw
history blame
2.51 kB
import gradio as gr
import os
import shutil
import subprocess
def process_ebook(ebook_file):
# Ensure input_files folder exists
input_dir = "input_files"
os.makedirs(input_dir, exist_ok=True)
# Save the uploaded file to the input_files folder
ebook_file_path = os.path.join(input_dir, ebook_file.name)
shutil.copy(ebook_file.name, ebook_file_path)
# List the contents of the input_files folder
input_files_list = os.listdir(input_dir)
input_files_str = "\n".join(input_files_list)
# Print the list of input files in the terminal
print("Files in input_files folder:", input_files_str)
# Call the Auto_VoxNovel.py script and stream its output live
try:
process = subprocess.Popen(["python3", "Auto_VoxNovel.py"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
# Print output in real-time
for line in process.stdout:
print(line, end='')
process.wait()
if process.returncode == 0:
return "Audiobook is ready! You can now download your files below."
else:
return "Error occurred during audiobook processing."
except Exception as e:
return f"Failed to run audiobook script: {str(e)}"
def list_output_files():
# List all files in the output directory for downloading
output_dir = "output_audiobooks"
if os.path.exists(output_dir):
files = [str(f) for f in os.listdir(output_dir) if os.path.isfile(os.path.join(output_dir, f))]
return files
return []
def download_output_files():
files = list_output_files()
file_links = {file: os.path.join("output_audiobooks", file) for file in files}
return file_links
# Gradio Interface
with gr.Blocks() as gui:
gr.Markdown("### Ebook to Audiobook Converter")
with gr.Row():
with gr.Column():
ebook_input = gr.File(label="Upload your ebook file (epub, pdf, etc.)")
process_button = gr.Button("Start Processing")
status_output = gr.Textbox(label="Status")
process_button.click(process_ebook, inputs=ebook_input, outputs=status_output)
with gr.Column():
gr.Markdown("### Download Generated Audiobook Files")
download_button = gr.Button("Reload Files")
file_output = gr.File(label="Generated Audiobook Files", interactive=False)
download_button.click(fn=lambda: download_output_files(), inputs=[], outputs=file_output)
gui.launch()