Building an App with Aria and Allegro: Turning Travel Photos into Fun Fact Videos
Building an App with Aria and Allegro: Turning Travel Photos into Fun Fact Videos š
Hello! Itās Tommy here, and today, Iām excited to walk you through a project where weāll transform travel photos into fun fact videos. Using Rhymes AIās Aria API to analyze images, weāll generate rich scene descriptions and bring them to life with Allegroās text-to-video model. This tutorial lets you explore the creative potential of these tools in a fun, hands-on way.
Whether youāre looking to experiment with multimodal APIs or curious about unique app integrations, this guide will help you adapt these tools to suit your projects. Stick around until the end for a link to the Colab notebook so you can follow along directly.
Letās get started! š
Getting Started with the Setup š ļø
To begin, letās set up our environment and install the necessary libraries. Hereās what youāll need:
!pip install -q openai request
Once weāve installed the requirements, we can move to the image preparation and API integration sections.
Preparing Your Image in Base64 Format
The first step is to convert your image into base64 format, which will allow us to send it through the Aria API. Hereās a function to handle the conversion:
import base64
def image_to_base64(image_path):
try:
with open(image_path, "rb") as image_file:
base64_string = base64.b64encode(image_file.read()).decode("utf-8")
return base64_string
except FileNotFoundError:
return "Image file not found. Please check the path."
except Exception as e:
return f"An error occurred: {str(e)}"
Usage: Provide your image path to image_to_base64()
to get the base64-encoded string.
Analyzing the Image with Ariaās API
Now that weāve prepared the image, letās use Ariaās multimodal API to analyze it. This API will return a set of scene descriptions that bring the location in the photo to life. Be sure to replace userdata.get('ARIA_API_KEY')
with your own API key, or update the secret in Colab with the same parameter.
from google.colab import userdata
from openai import OpenAI
from textwrap import dedent
api_key = userdata.get('ARIA_API_KEY') # Replace with your Aria API key or set it as a Colab secret
client = OpenAI(base_url='https://api.rhymes.ai/v1', api_key=api_key)
base64_image = image_to_base64('/path/to/your/image.jpg')
response = client.chat.completions.create(
model="aria",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}},
{"type": "text", "text": dedent("""\
<image>\nThis is an image of a place. Give three scenes and descriptions to bring it to life. Format:
Scene <number>: <engaging description>
Return 3 scenes in that format only.
""")}
]
}
],
stream=False,
temperature=0.6,
max_tokens=1024,
top_p=1,
stop=["<|im_end|>"]
)
result = response.choices[0].message.content
print(result)
Creating a Video Task with Allegro
Letās now use Allegroās text-to-video API to create a video based on the scene descriptions. This function initiates a video generation task, which weāll query in the next section using the request_id
returned here.
Remember to replace userdata.get('ALLEGRO_API_KEY')
with your actual Allegro API key or set it as a Colab secret with the same parameter.
import requests
def create_video_task(token, result_scenes):
url = "https://api.rhymes.ai/v1/generateVideoSyn"
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
data = {
"refined_prompt": result_scenes,
"num_step": 100,
"cfg_scale": 7.5,
"user_prompt": result_scenes,
"rand_seed": 12345
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return f"An error occurred: {str(e)}"
Usage: Replace userdata.get('ALLEGRO_API_KEY')
with your Allegro API token. Run the function and capture the request_id
, which weāll use to query the video status.
Note: When calling the create video task endpoint, be aware that if you hit the endpoint again within a 2-minute interval, you may encounter an error message: āThe request rate for model Allegro has exceeded the allowed limit. Please wait and try again later.ā This response comes with a status code of 500, indicating that a brief wait between requests is required to avoid rate limiting.
Checking the Video Generation Status
Because Allegro can take around 2 minutes to process the video, weāll add a time.sleep()
delay before querying.
import time
def query_video_status(token, request_id):
time.sleep(120) # Wait for at least 2 minutes
url = "https://api.rhymes.ai/v1/videoQuery"
headers = {"Authorization": f"Bearer {token}"}
params = {"requestId": request_id}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
return f"An error occurred: {str(e)}"
When you run this, Allegro will return a link to the video stored in an S3 bucket:
response_data = query_video_status(bearer_token, request_id)
video_link = response_data.get('data')
print(video_link)
Displaying the Generated Video Image š„
Hereās how the generated video might look:
Once the video link is retrieved, I captured a screenshot from the video to showcase the result. This visual gives you an idea of what the final output could look like when you follow these steps to transform a travel photo into a dynamic video.
Find the link to the Google Colab Notebook for this tutorial here.
Wrapping Up
Congratulations! Youāve successfully created an app that transforms a travel photo into a fun fact video. By using Aria to generate compelling scene descriptions and Allegro to bring them to life in video format, youāve tapped into the potential of multimodal AI applications.
For further customization and a more advanced setup, check out the detailed documentation here. This tutorial opens the door to endless possibilities with Aria and Allegro, whether youāre crafting travel-inspired content, educational materials, or any other creative media.
Enjoy exploring, and let your imagination guide you to new ideas and projects!
Next Steps
Here are some practical steps to expand your app:
- Batch Processing for Multiple Images: Implement support for multiple image uploads to create a collection of related fun fact videos.
- Video Customization Options: Experiment with Allegroās settings, like
cfg_scale
andnum_step
, to create unique video effects. - Dynamic Scene Narrations: Incorporate personalized narration for each video using additional API integrations, enriching the viewing experience.