Open jacksondc opened 1 month ago
Use:
obj = replicate.run([...])
print(obj.url)
# or str(obj)
I am having the same issue. I am getting a file output and am unsure how to parse. The example code does not work for presenting an image.
import replicate
output = replicate.run(
"black-forest-labs/flux-schnell",
input={"prompt": "an african grey parrot sitting in the jungle on a branch, pointillism"}
)
I get these outputs:
output ---> [<replicate.helpers.FileOutput at 0x21c3cd91f50>]
str(output) ---> [<replicate.helpers.FileOutput object at 0x0000021C3CD91F50>]
output[0].url ---> data:application/octet-stream;base64,UklGRowqAwBXRUJQV.....
str(output[0]) ---> data:application/octet-stream;base64,UklGRowqAwBXRUJQV.....
I did get it to display an image with:
from IPython.display import Image
img = Image(url=output[0].url)
It appears that the FileOutput class was only added last month and is a completely new addition. Likely the cause of the problems here.
Here is a link to the commit: https://github.com/replicate/replicate-python/commit/e7f699f2110822f9c164872e8d72e57102f89855
Link to file: https://github.com/replicate/replicate-python/blob/main/replicate/helpers.py
I got it to output the correct delivery url when I downgraded my replicate version to 0.32.1 (before the FileOutput commit).
Just install the older version then restart your kernel.
this testing code does not work:
import requests
output = replicate.run(
"stability-ai/stable-diffusion:db21e45d3f7023abc2a46ee38a23973f6dce16bb082a930b0c49861f96d1e5bf",
input={"text": "an astronaut riding a horse"}
)
response = requests.get(output[0].url)
with open("local_image.jpg", "wb") as file:
file.write(response.content)
@xuyannus Try removing .url from output[0] and just doing:
import requests
output = replicate.run(
"stability-ai/stable-diffusion:db21e45d3f7023abc2a46ee38a23973f6dce16bb082a930b0c49861f96d1e5bf",
input={"text": "an astronaut riding a horse"}
)
response = requests.get(output[0])
with open("local_image.jpg", "wb") as file:
file.write(response.content)
I also downgraded to v0.32.1 to get mine to work. https://pypi.org/project/replicate/0.32.1/
Thanks for the feedback all, we'll get the examples in the README fixed.
As mentioned in the issue the URL can be accessed via the url
attribute on the FileOutput
object.
import replicate
output = replicate.run(
"black-forest-labs/flux-schnell",
input={"prompt": "an african grey parrot sitting in the jungle on a branch, pointillism"}
)
print(output[0].url)
@xuyannus
this testing code does not work:
import requests ...
The requests
library is not needed to fetch the output.
import replicate
output = replicate.run(
"stability-ai/stable-diffusion:db21e45d3f7023abc2a46ee38a23973f6dce16bb082a930b0c49861f96d1e5bf",
input={"text": "an astronaut riding a horse"}
)
with open("local_image.jpg", "wb") as file:
file.write(output[0])
FYI: This breaking change caused all our API integrations with replicate to stop working…
@aron the documentation on the model pages also have no mention of the FileOutput: https://replicate.com/black-forest-labs/flux-1.1-pro/api
The technical team is very bad. There is no consistency, everything stops working out of nowhere. Now, I'm getting another problem. The "url" field returns in base64 and not the URL itself.
@paulocoutinhox I am getting the same issue. Our inference API has stopped working. @aron Can you guys please check this asap?
I was not able to fix the problem with the latest package version. Same problems with the base64. Clearly more needs to be worked out on the backend side.
For now I have been able to get it to work as intended in the code examples by downgrading to version 0.23.1 https://pypi.org/project/replicate/0.32.1/
Hope this helps and gets resolved in the latest versions. For now just downgrade to v0.23.1 unless it causes other issues.
@eloelo-techadmin @melvinmt @paulocoutinhox
Hi @user-will,
Im using this:
output = replicate.run(model_path, input=replicate_input)
# get the output format for file extension
output_format = flux_model_task.output_format.lower()
# download and save the generated image
for output_item in output:
unique_file_name = f"{uuid.uuid4()}.{output_format}"
file_content = ContentFile(output_item.read())
flux_model_task.output_image.save(unique_file_name, file_content, save=True)
# mark the task as processed
flux_model_task.status = GenerationStatus.PROCESSED
flux_model_task.save()
logger.info(f"Generated image saved: {unique_file_name}")
@aron Neither output.url
nor use_file_output=False
works. I still get the output in base64 format
[output] = replicate.run(
"black-forest-labs/flux-schnell",
input={"prompt": "astronaut riding a rocket like a horse"},
use_file_output=False)
print(output)
# BASE64 data
output = replicate.run(
"black-forest-labs/flux-schnell",
input={"prompt": "an african grey parrot sitting in the jungle on a branch, pointillism"}
)
print(output[0].url)
#BASE64 data
Downgrading to version 0.34.1 works for now. The documentation does not reference the new API, which is very confusing: https://replicate.com/black-forest-labs/flux-1.1-pro/api
I'd update the release notes on 1.0.0 to note its FileOutput
as seen above or FileObject
. If it is FileObject
, setup type hints in the future rather than returning Any | list[Any]
from your library plz :)
Here's a quick example of how to do it for sync API https://github.com/replicate/replicate-python/pull/389
My solution is working on new versions too. Thanks.
When I run the code examples in the README, I get back
replicate.helpers.FileOutput
objects. I expected to get URLs.Steps to reproduce:
pip install replicate== 1.0.2 export REPLICATE_API_TOKEN=... python3
Looks like the new types were introduced in version 1.0.1.