Spaces:
Running
Running
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(""" | |
Note: | |
The initial version of Podcastify, which was purely local and used an open-source and on-device models, has been replaced by the current one. You can find it in the local branch. | |
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) | |