Podcastking2 / app.py
eswardivi's picture
Ported the space to use API and local version still exists but in different branch
5fe16b1
raw
history blame
2.29 kB
import gradio as gr
import os
import asyncio
from conver import ConversationConfig, URLToAudioConverter
from dotenv import load_dotenv
load_dotenv()
def synthesize_sync(article_url):
return asyncio.run(synthesize(article_url))
async def synthesize(article_url):
if not article_url:
return "Please provide a valid URL.", None
try:
config = ConversationConfig()
converter = URLToAudioConverter(config, llm_api_key=os.environ.get("TOGETHER_API_KEY"))
output_file, conversation = await converter.url_to_audio(
article_url,
"en-US-AvaMultilingualNeural",
"en-US-AndrewMultilingualNeural"
)
return conversation, output_file
except Exception as e:
return f"Error: {str(e)}", None
with gr.Blocks(theme='gstaff/sketch') as demo:
gr.Markdown("# Turn Any Article into a Podcast")
gr.Markdown("## Easily convert articles from URLs into listenable audio podcasts.")
gr.Markdown("### Instructions")
gr.Markdown("""
- **Step 1:** Paste the URL of the article you want to convert into the textbox.
- **Step 2:** Click on "Podcastify" to generate the podcast.
- **Step 3:** Listen to the podcast or view the conversation.
""")
gr.Markdown("""
- View the code at [GitHub - NarrateIt](https://github.com/EswarDivi/NarrateIt).
""")
with gr.Group():
text = gr.Textbox(label="Article Link", placeholder="Enter the article URL here...")
btn = gr.Button("Podcastify", variant="primary")
with gr.Row():
conv_display = gr.Textbox(label="Conversation", interactive=False, lines=10)
aud = gr.Audio(label="Generated Podcast", interactive=False)
gr.Examples(
examples=["https://huggingface.co/blog/gradio-mcp"],
inputs=text,
fn=synthesize_sync,
outputs=[conv_display, aud]
)
btn.click(synthesize_sync, inputs=[text], outputs=[conv_display, aud])
gr.Markdown("""
Special thanks to:
- [gstaff/sketch](https://huggingface.co/spaces/gstaff/sketch) for the Sketch Theme.
- [Jina AI](https://jina.ai/reader/) for the web page parsing.
""")
demo.queue(api_open=True, default_concurrency_limit=15).launch(show_api=True)