Advertisements cannot be viewed

To whichever staff member reads this, I’d like to emphasize how important this topic is to myself personally - and I hope the fix is an easy one or there is some sort of work-around. I am sure I’m not the only developer facing this issue.

User Ads are going away on the website forever in 6 weeks - I presume the data is going to be deleted or at least inaccessible forever afterwards. Over the years I have lost my original files and I would love to be able to archive/save the original advertisements I spent many hours making in the past - before this service is shut down forever and I lose a piece of my history. But the Roblox website does not allow you to view the original files for User Ads which were uploaded before a certain date - the date seems to be sometime in early 2011 or late 2010.

If you look at the videos attached, you will see that when you click a newer User Ad you can view the ad in its original file size. If you click an ad uploaded before that mysterious cut-off date, it will send you to the original game link rather than being able to view (and save) the file. Right-clicking the image only opens the same preview file (ultra-low resolution, unintelligible).

I understand yall have a lot going on already and this is unimportant in the grand scheme, however this topic is dear to me and time is running out for these files to be saved


.

1 Like

It’s actually possible to get the original size if you know the rbxcdn for the tiny 110x110 ad preview.

Here is some python code demonstrating how this is possible:

# FindAdImage.py

# From a URL like this scan all possible image dimensions and find which one contains an image
# https://tr.rbxcdn.com/4abf935b407f78242efcdd7fd2ccdabc

import aiohttp
import asyncio
import os
import sys

possibleDimensions = [
    (110, 110),
    (160, 600),
    (300, 250),
    (728, 90),
]


async def makeRequest(url_template, width, height, session):
    url = url_template.format(width=width, height=height)

    async with session.get(url) as response:
        resp = await response.read()
        if response.status == 200:
            print("Found image at {url}".format(url=url))
            filePath = os.path.join(
                os.getcwd(),
                "ad_{width}x{height}.png".format(width=width, height=height),
            )
            with open(filePath, "wb") as f:
                f.write(resp)
        else:
            print("No image found at {url}".format(url=url))


async def findImage(url):
    url_template = url + "/{width}/{height}/Image/Png"

    async with aiohttp.ClientSession() as session:
        await asyncio.gather(
            *[
                makeRequest(url_template, width, height, session)
                for width, height in possibleDimensions
            ]
        )


if __name__ == "__main__":
    args = sys.argv
    if len(args) < 2:
        print("Usage: python FindAdImage.py <url>")
        exit(1)

    url = args[1]
    asyncio.run(findImage(url))

It might be a little tricky because of how the pagination works but you might be able to find a way to get all of the image urls and them modify the code to download all the original images.

4 Likes

I was actually wrong here, the size that is served when the ad is shown may not actually be the original size, but you can download the original image if you get the t{0-7}.rbxcdn.com/hash URL from the hash in the preview URL.

3 Likes