Bluesky image post

I’m trying to set up a Scenario that will:

  • Take a random image URL and caption from a Google Sheet.
  • Add hashtags to the end of the caption.
  • Calculate the location of the hashtags in the string.
  • Obtain the image dimensions for the aspect ratio.
  • Authenticate with Bluesky.
  • Upload the image to Bluesky to obtain the blob data.
  • Create JSON that includes the post text with hashtags, the image attachment including the aspect ratio, and the facets to properly render the hashtags.
  • Post this to Bluesky.

I think I have all of the pieces working correctly… except that I get an error when I post:

BundleValidationError
Validation failed for 1 parameter(s).
Value can’t be casted as buffer for parameter ‘data’.

I have made sure that I am uploading the image to Bluesky and receiving a blob string, and then I am passing the blob data to the final HTTP/POST module.

However, I believe the error is because of a mismatch between the data and what the Bluesky API is expecting.

Here is my JSON, in case that is helpful:

[
    {
        "repo": "HANDLE.bsky.social",
        "record": {
            "text": "CAPTION #HASHTAG1 #HASHTAG2 #HASHTAG3",
            "embed": {
                "$type": "app.bsky.embed.images",
                "images": [
                    {
                        "alt": "CAPTION",
                        "image": {
                            "ref": {
                                "$link": "bafkreiatthlgqr…ETC…"
                            },
                            "size": 122872,
                            "$type": "blob",
                            "mimeType": "image/png",
                            "aspectRatio": {
                                "width": 1920,
                                "height": 1079
                            }
                        }
                    }
                ]
            },
            "facets": [
                {
                    "index": {
                        "byteEnd": XX,
                        "byteStart": XX
                    },
                    "features": [
                        {
                            "tag": "HASHTAG1",
                            "$type": "app.bsky.richtext.facet#tag"
                        }
                    ]
                },
                {
                    "index": {
                        "byteEnd": XX,
                        "byteStart": XX
                    },
                    "features": [
                        {
                            "tag": "HASHTAG2",
                            "$type": "app.bsky.richtext.facet#tag"
                        }
                    ]
                },
                {
                    "index": {
                        "byteEnd": XX,
                        "byteStart": XX
                    },
                    "features": [
                        {
                            "tag": "HASHTAG3",
                            "$type": "app.bsky.richtext.facet#tag"
                        }
                    ]
                }
            ],
            "createdAt": "{{now}}"
        },
        "collection": "app.bsky.feed.post"
    }
]

Can anybody help?

Hey Robert,

are you using BlueSky create a post module? Can you show screenshots of the scenario and how everything is setup at the moment?

I’m away from my computer so can’t screenshot the scenario right now.

But to answer your other question, I’m not using the Bluesky Create a Post module — I have used that previously, but it doesn’t allow “tag” facets and it doesn’t detect the aspect ratio of images, so they display with grey letterboxing. I’m trying to use the API directly so that I can address those problems.

I’ve tried using the generic HTTP Post module, as well as the Bluesky API module. They both return an error based on the image not being formatted correctly. This is true whether I use a general HTTP module or the Bluesky Upload Media module to create the blob.

Ok, and can you post the image using the generic module? Just to see if the problem is in the HTTP call or in the image it self?

Thanks for taking the time to look at this for me. I appreciate it.

Yes, if I use the Bluesky modules, the image is posted fine (but the hashtags and aspect ratio are not supported by the Bluesky post module). It looks like this, and this is what I have running now while I try to improve it:

Here is the Scenario where I am trying to manually put the caption, image, aspect ratio and hashtag facets together in the eventual post. Note that I have tried using the Bluesky image upload and Bluesky API call modules, as well as separately using the HTTP image upload and HTTP POST modules… they both fail.

Given that the image upload works when I don’t try to create my own JSON for the post, it makes me think the problem is with my JSON?

Here is the JSON module that sets up my post data:




And this is an example of the JSON it produces:

[
    {
        "repo": "animestairs.bsky.social",
        "record": {
            "text": "Rurouni Kenshin (2023), episode 11 #anime #stairs #animestairs",
            "embed": {
                "$type": "app.bsky.embed.images",
                "images": [
                    {
                        "alt": "Rurouni Kenshin (2023), episode 11",
                        "image": {
                            "ref": {
                                "$link": "bafkreic537gd2sofpkwsapqa4dpm5zy4ukgpvw2wv6i6t3ebdpxxrzymxu"
                            },
                            "size": 160506,
                            "$type": "blob",
                            "mimeType": "image/jpeg",
                            "aspectRatio": {
                                "width": 1280,
                                "height": 720
                            }
                        }
                    }
                ]
            },
            "facets": [
                {
                    "index": {
                        "byteEnd": 41,
                        "byteStart": 35
                    },
                    "features": [
                        {
                            "tag": "anime",
                            "$type": "app.bsky.richtext.facet#tag"
                        }
                    ]
                },
                {
                    "index": {
                        "byteEnd": 49,
                        "byteStart": 42
                    },
                    "features": [
                        {
                            "tag": "stairs",
                            "$type": "app.bsky.richtext.facet#tag"
                        }
                    ]
                },
                {
                    "index": {
                        "byteEnd": 62,
                        "byteStart": 50
                    },
                    "features": [
                        {
                            "tag": "animestairs",
                            "$type": "app.bsky.richtext.facet#tag"
                        }
                    ]
                }
            ],
            "createdAt": "2025-06-19T23:57:20.922Z"
        },
        "collection": "app.bsky.feed.post"
    }
]

Can you install the Make browser extension? It will allow you to compare the two JSONs and see what the difference is and what might be causing the issue.