Show HN: Screen.rip – API for capturing web screenshots

(screen.rip)

195 points | by laktek 2375 days ago

34 comments

  • indescions_2017 2375 days ago
    The Catch-22: set of folks with the skills to use a security token to call an API and archive screen dumps for visual regression testing, roughly equals the one that already knows how to automate via headless Chrome ;)

    laktek, I'd be interested in hearing how you would turn this into a consumer product? For myself, I'd like an API that wraps devtools for remote debugging (on users machines). Am able to extract useful info via performance counters and computed styles. But the entire process can be made much more friendly I imagine.

    Good luck, and keep building!

    • laktek 2375 days ago
      Thanks for the comment! So both Screen.rip and Page.REST are my way of validating the market. I don't expect these API services to be the end product (but rather the building blocks for bigger ideas).

      However, APIs do seem to arouse curiosity among people. Lot of the emails I've been getting follows the theme of "I saw your API and was wondering how we can use to solve X". This way I get a more focused set of real problems (and their potential value), rather than I try to hypothesis problem spaces.

      PS: Another cool thing about releasing API first is I can start charging people sooner, rather than having to wait till I build a finished product. It helps since I'm bootstrapping.

      • rokhayakebe 2375 days ago
        $7 is cheap imo. I paid for a service similar to yours for years. Their price point was close to 10 times as high as yours, yet I happily paid my monthly subscription.

        I love this.

        • jotto 2374 days ago
          $7 for 10,000 is not that cheap ($0.0007 per screenshot). I'm charging $0.000365 per screenshot and I thought that was on the higher end.

          https://www.prerender.cloud/docs/api

            curl http://service.prerender.cloud/screenshot/https://google.com/ > out.jpg
          • rokhayakebe 2374 days ago
            I paid 10 times more for years happily.
      • davidpelayo 2375 days ago
        Now, the question is, did you already charged anyone with these APIs? Do yo want to share any concrete experience since you are bootstrapping?
    • turtlebits 2375 days ago
      I disagree. $7 is extremely cheap. I really like that it's per use and not a monthly charge.

      I tried dabbling with [chromeless](https://github.com/graphcool/chromeless) and wasted a bunch of time on some random error that I eventually found out was a bug.

      If I had to do it myself I'd use Docker + Selenium, but I'd definitely give this a shot first.

    • justinph 2375 days ago
      I've just done something like this recently and it's not as easy as you might think. It is easy to make a thing happen quickly with a few lines of code, but making it reliable and repeatable is much more time consuming.

      This looks like very favorable pricing if you don't need certain features.

      But, if you need support for setting: location, turning on flash, proxies, and https://urlbox.io/ is also very useful.

      • mkoryak 2375 days ago
        flash? for screenshots taken at night?
    • csomar 2374 days ago
      I did this before (manual screenshooting). It'll take 1-2 weeks of full dev work. If you are looking for a quick solution, $7 is less than what I pay at starbucks.
      • laktek 2374 days ago
        I call this the coffee profitable :) First step to Ramen profitability.
    • davidpelayo 2375 days ago
      Let me check if I understood correctly. As the same way you may use TeamViewer for remote desktop control, you would like to perform remote debugging on user browser devtools? Could you drop what's the use case you are imagining in a real scenario? Great comment. Thanks.
      • indescions_2017 2375 days ago
        Real world example would be an "io game". Like slither.io. I need full client stats: CPU and GPU capabilities, rendering and network performance. Instrumenting in javascript while game is max'ed out during runtime is less than ideal ;)
    • amclennon 2374 days ago
      I've been working on something similar with http://www.butterflyfx.io that captures information beyond a screenshot. It's still a work in progress, however.
    • laktek 2375 days ago
      And I'm interested to talk more about remote debugging use case. Feel free to drop me a DM on Twitter (@laktek) :)
  • kylecordes 2375 days ago
    Incidentally over the last few weeks I've been looking around the tools to monitor the appearance of websites; think of this as a step up from "is my site still online?" services, over toward "does my stride still look roughly correct". The latter is super important for sites whose functioning is critical to (for example) business happening, cash flowing, salaries being paid.

    What I found is that this market is relatively crowded at the low end, with services that either don't state what browser they are using to render a site for a visual check, or which state and only support one browser.

    It looks like screen.rip is also aiming at this low-end. I don't see anything on there about what browser uses, and nothing about choosing a browser. And it is only $7 (for 10000 images).

    It seems to me that there may also be a market for people happy to pay $70 for the same thing, with the ability to specify which browser, and have the list of available browsers include the ones that are kind of inconvenient to support (older IE). Sure, it's a lot more of a technical slog, but I imagine someone facing the sort of troubles and trying to monitor the appearance of their site across all the major browsers would find that 10 X the stated price is a relatively good deal compared to the misery of setting all that up locally.

    • thecodemonkey 2375 days ago
      I’ve been having the same sort of frustrations and needs for a while, and recently launch something to scratch that itch [1]

      It’s tangently similar to screen.rip, but it’s much more focused on getting up and started quickly and making it easy to monitor sides that require authentication. Let me know what you think.

      [1] https://pixelbug.io

      • scotchio 2375 days ago
        I've been using this for about month and like the email notifications when changes happen. Pretty nice to have in my inbox for what I do.

        Disclosure: I know the creator.

        • dabernathy89 2375 days ago
          I was going to mention Pixelbug in the comments as a possible alternative.

          Disclosure: I know the parent commenter. And the creator. :)

    • JustARandomGuy 2374 days ago
      >It seems to me that there may also be a market for people happy to pay $70 for the same thing, with the ability to specify which browser, and have the list of available browsers include the ones that are kind of inconvenient to support (older IE).

      Mark me down on this list. In particular, I'd like an API that lets me have a more detailed look into the web page - for example, list all images used by the web page (this is a lot harder than it sounds once you consider images can be loaded by CSS, IMG HTML tag, can be delayed loading, etc).

      In short, I'd love an API where I can see the same details of a webpage as Chrome's debugger shows. I looked into Chrome headless, but there was some issue with hooking into the debugger (admittedly I know only the basics about Chrome headless).

    • yesbabyyes 2375 days ago
      No affiliation, but I have used Browserling by pkrumins and substack, albeit never for screenshots. https://www.browserling.com/
    • chrisweekly 2375 days ago
      But WebPageTest is free (and setting up a private instance isn’t hard).
  • NicoJuicy 2375 days ago
  • aidos 2375 days ago
    Good timing — though slightly OT.

    For training our customers we often record little demos of how to achieve something in our app, and then send it to them as an animated GIF in Intercom. We've been using Giphy but it's pretty clumsy. The app itself is always in the way, especially on a laptop screen and then you need to record the clip, save it to disk and then drag it from disk into an Intercom conversation.

    After trying a few other solutions there doesn't seem to be a pain-free way of recording a clip and then having it available as an animated GIF ready to paste into the browser. I'm not sure if some of the issue is that it's just not possible to but an animated GIF in the clipboard on OSX (it just comes through as a single still shot).

    Does anyone have any recommendations for this workflow?

  • ivan_ah 2374 days ago
    Screenshots are useful, but diffs of screenshots are even more useful.

    You could maybe immitate the workflow used by wraith? https://github.com/bbc-news/wraith

    For example to setup screenshot diffs between an existing production site and local dev, use:

        # (required) The domains to take screenshots of.
        domains:
          current:  "https://prod.yoursite.com"
          new:      "http://localhost:8000"
    
        paths:
          home:     /pageyouareworkingon.html
    
    
    Not sure how to connect to localhost 8000 from the web though...
    • laktek 2374 days ago
      Yeah, that'd something nice to build. To connect localhost to web, maybe Ngrok?
      • ivan_ah 2374 days ago
        wow ngrok is nice...
  • catacombs 2375 days ago
    This is a great single-line tool that can make taking screenshots easy.

    I'm a cheapskate, though, and don't mind spending the time to write my own screenshot script via Selenium.

  • andys627 2374 days ago
    Very cool! Useful to keep tabs on competitors and your own sites.

    I'd suggest adding some kind of Stripe branding to your payment form to make it a little more trustworthy.

    • laktek 2374 days ago
      Thanks! Will try to add the Stripe's new Payment Request API buttons, so payments are carried out from the Apple / Google pay.
  • lewisj489 2375 days ago
    This seems like a great idea and I don't think $7 is steep. There are free options about but it's still cool none the less.
    • paulgb 2375 days ago
      I haven't looked around but the first competitor that comes up on Google charges 29/month for 5000 screenshots so I'd gladly pay $7 if the results are good (I'd rather pay $7 than $0 if I were building a product on top of this, because I'd rather be a customer than a disposable user)
      • jotto 2374 days ago
        $7 per 10,000 is $0.0007 per screenshot

        Get it for $0.000365 per screenshot from me (shameless)

        [1]: https://www.prerender.cloud/docs/api

          curl http://service.prerender.cloud/screenshot/https://google.com/ > out.jpg
    • detaro 2375 days ago
      Yeah. Slightly annoying for small private use cases that it's limited to a year, but it might still be worth it.
  • lucapinello 2375 days ago
    How different is from this free tool?

    https://wkhtmltopdf.org/

    • mpetrovich 2375 days ago
      If it’s using Chrome headless, it’s superior to wkhtmltopdf. The latter has lots of little gotchas and things that may render fine in a browser but not in wkhtmltopdf. Chrome headless doesn’t suffer from those issues, obviously.
      • gotrecruit 2375 days ago
        but the site itself says it "runs headless".
        • htgb 2375 days ago
          Running headless does not imply that it's running Chrome headless, just that it runs without a GUI.
    • have_faith 2375 days ago
      One is a hosted service and one isn't.
      • lucapinello 2375 days ago
        I know but if I need to use an API to an external server I can also launch a command locally. 7$ is not much but I don't see any real benefit unless you want to capture a subsection of a website.
    • tyingq 2375 days ago
      The clip to a specific DOM element seems unique to this.
      • laktek 2375 days ago
        Also with screen.rip, you can run a custom JS before capturing the screenshot and also can wait for certain elements to appear (which is quite important today with client-side rendered sites)

        Disclaimer: I created screen.rip

        • sah2ed 2375 days ago
          > Disclaimer: I created screen.rip

          No need for a disclaimer, after all, this is your Show HN ;)

  • Gys 2370 days ago
    A lot of talk about pricing here, so I add my favorite www.thum.io - charging $2 for 10.000 with first 1.000 for free.

    What I like about them in particular is their buffering: once a screenshot is made, it can be served from their server 'unlimited' times without counting as a new screenshot.

    A real improvement on their service (worth paying extra for me !) would be a way to dismiss the banner on github projects for new visitors. Obviously their browser is not logged into Github at the moment of the screenshot, so those screenshots mainly shows a general Github welcome banner :-(

  • cabaalis 2375 days ago
    So one perspective is that a lot of development these days is combining existing libraries with glue code to meet a need. I wonder how much of the future will be combining microservice APIs with affordable micro transactions to meet a need.
    • laktek 2374 days ago
      This is what I want to have too! Machine payable web. Hopefully, something like Ethereum / Lightning network would make the micro-transactions viable in the future.
  • steve-benjamins 2375 days ago
    What does auto-updating mean?

    I run a website builders review website and have always wanted to write a script that captures every pricing page so that my readers could scan them all at once.

    Two problems have kept me from this:

    1) Scrolling (which it looks like you've fixed— haven't seen other screenshot APIs do this— awesome!) 2) Pricing pages change often— so manual screenshots don't make sense. Does your auto-updating take care of this? (ie: captures a new screenshot each time the page is updated)

    • laktek 2375 days ago
      I mean to evolve the product screenshots as you ship more features or make cosmetic changes to the app. I assume it's PITA to keep the screenshots consistent with the actual app UI.
  • davidpelayo 2375 days ago
    I guess it's using headless chrome, am I right?
    • laktek 2375 days ago
      Yeah, based on Puppeteer and Headless Chrome. You can set it up on your own VPS. That would mean you are paying at least $5 a month plus your time to maintain it. I believe it's not worth the hassle, especially if it's for a non-primary feature in your app.
    • romanovcode 2375 days ago
      Yeah, you can implement this in-house for your needs in less then 30 minutes using 512mb DO droplet or other in-house devops tool server for free.
      • davidpelayo 2375 days ago
        in less than 30 minutes? Let's do it, I wanna see it
        • romanovcode 2375 days ago
          Took me around 15 minutes in total. Can I be CTO at your silicon valley company now with 500k salary?

              const express = require('express')
              const app = express()
              const puppeteer = require('puppeteer')
              const uuidv1 = require('uuid/v1')
              const fs = require('fs')
              const validUrl = require('valid-url')
          
              app.get('/', function (req, res) {
                (async () => {
                  const url = req.query.url;
          
                  if (!url) {
                    return res.send({error: 'Need to specify url param e.g. ?url=https://google.com/'});
                  }
          
                  if (!validUrl.isUri(url)) { // Also protects against file://...
                    return res.send({error: 'url not valid'})
                  }
          
                  const id = uuidv1();
                  const browser = await puppeteer.launch();
                  const page = await browser.newPage();
                  await page.setViewport({ width: 1920, height: 1080})
                      
                  await page.goto(url)
                  const buffer = await page.screenshot({path: id + '.png'})
          
                  const fullPath = __dirname + '/' + id + '.png';
          
                  res.sendFile(fullPath, function () {
                    fs.unlink(fullPath)
                  })
          
                  await browser.close()
                })();
              })
          
              app.listen(3000, function () {
                console.log('Example app listening on port 3000!')
              })
          • dvt 2374 days ago
            Apart from the smugness, I hope you realize that technology != success. It doesn't matter that I can replicate Tinder with a few weeks of coding.

            In fact, the two are often inversely correlated because engineers can be so worried about what technology, what stack, what language, instead of worrying about the real deal: getting the users.

            • romanovcode 2374 days ago
              I know that you can build twitter and tinder and getting the users is hard. But my point was very different -- People will probably need this for some internal tooling (devops) and it is simple enough to just build it on your own without paying someone or relying on 3rd party.

              IMO there should be a line of what to outsource and what to build yourself. In my mind simple things like this go into second category.

              • dvt 2374 days ago
                I see your point but I'm not fully convinced. Companies outsource simple stuff all the time. To wit, I think that line you drew might vary from company to company.
          • TomNomNom 2375 days ago
            Don't run this on EC2; you'll probably get your metadata stolen. Also:

                if (!validUrl.isUri(url)) { // Also protects against file://...
            
            It does?

                ▶ cat valid.js
                var validUrl = require('valid-url');
            
                if (validUrl.isUri("file:///etc/passwd")){
                    console.log('Looks like a URI');
                }
            
                ▶ node valid.js
                Looks like a URI
            
            Perhaps the problem requires a little more than 15 minutes to do well :)
            • romanovcode 2374 days ago
              Yeah, like 15 minutes more. Ergo my original statement - 30 minutes. As a bonus I would also stream binary data directly to client without creating an image file.
              • davidpelayo 2374 days ago
                ok. congrats! While I would spend a few hours you would spend 30 minutes. However, this guy just published something to start making money, and it's working for him, no matter who is able to create what in how much time.
          • imron 2374 days ago
            > Took me around 15 minutes in total.

            So assuming a rate of $80/hr (which is on the low-side), it cost you $20 in time to do what you could have for $7.

            A CTO worth 500k/year would probably realise that paying $7 is more cost effective.

        • tuananh 2375 days ago
          5 mins would be enough with puppeteer https://github.com/GoogleChrome/puppeteer
        • emj 2375 days ago
          Basically you just need to read up on how chrome-headless works.. I do have this complicated chrome-remote-protocol script that does the same as the command line version, so I guess it's all about priorities

          Basically:

            1. sign up for droplet 10 min
            2. install google-chrome and webserver 10 min
            3. call google headless from a CGI script 10 min
  • juliend2 2374 days ago
    How come "Arimo" is the default font for sans-serif, though?

    img: https://imgur.com/a/ULr4I

    page: http://www.juliendesrosiers.com/

    Edit: I know I should've used @font-face for my logo, but still, it bugs me.

    • laktek 2374 days ago
      I was tweaking the font-setup to support full unicode ranges. Maybe a result of it.
  • csomar 2374 days ago
    Any chance you implement bitcoin/blockchain payments. So I can pay you through code and then programmatically get my token?
    • laktek 2374 days ago
      I want that on all APIs but I don't think Bitcoin or Ethereum is suitable for such micro-payments. Waiting for something like lightning network to be adopted.
  • petercooper 2375 days ago
    Well pitched and put together IMO but the thing that always irritates me about services like these is the so-so font rendering. Screenshots taken on macOS just look better for some reason. As an aside, I've always found it weird no other OS has got text rendering quite as right, it's a key part of why I stick with it.
    • softwarelimits 2374 days ago
      The opposite is true - I wonder every day how Mac OSX users are unable to see how bad the font rendering is on their screens - the fonts are garbled like a bad jpeg. On the same hardware with any decent Linux distro like Ubuntu I get perfectly rendered fonts!
      • petercooper 2374 days ago
        I guess there's a "different strokes" aspect here, as I have heard similar complaints (and in both directions). I must be in the Steve Jobs camp of aesthetics :-D
    • laktek 2374 days ago
      Thanks Peter (I'm big fan of Cooper Press).

      I actually tried to make the font rendering better. Installed few custom fonts and also tweaked few system options. I agree it might not be crisp as macOS.

      Wonder if hardcore Linux desktop enthusiasts have any tips here?

      • petercooper 2374 days ago
        To be fair, I am being very picky :-D Given that most people will be using this for testing or scaling the images down, the differences will likely be hard to pick out in everyday use.
      • iampims 2374 days ago
        Rent a Mac mini in a colo and charge more for OS X screenshots?
  • dvt 2374 days ago
    Awesome product, awesome landing page, awesome pricing scheme. I wish you only success!

    Next step: animated screengrabs (gif/webp)? :)

    • laktek 2374 days ago
      Thanks a lot David! Yeah, Screencasts seems like a natural progression to the API. Will explore.
  • wallzz 2375 days ago
    The api is just perfect, I wonder if I can use it in a commercial project to address some niche market ?!
    • laktek 2375 days ago
      Yes absolutely! You just have to pay for an API token.
  • mrskitch 2375 days ago
    Does it work with emojis and other interesting characters? If not then we should talk since I'm working on a project that helps solve the browser part of the equation https://browserless.io
    • laktek 2375 days ago
      It does! check emojipedia.com and popular non US sites like taobao.com. I did that heavy lifting ;)
    • jjnoakes 2375 days ago
      Quick note on the welcome page of browserless.io: "then browserless if for you" should read "then browserless is for you".
  • styfle 2375 days ago
    I am working on a tool[0] to record a video of a website or web app. Instead of A/B testing, I am using it to capture Repro Steps.

    [0]: https://github.com/styfle/magnemite

  • arjunkomath 2374 days ago
    I build a similar tool but with few more capabilities like CDN, analytics and PDF support. Feel free to check it out.

    https://capture.techulus.in/

    • rokhayakebe 2374 days ago
      Question: How does your PDF version of web pages work? Is it an image turned into PDF or?
  • pc86 2375 days ago
    I'm curious what the "We're ::lightning:: by Drift" means in the contact box. What verb is supposed to be conveyed by ::lightning::? Fast? It's just the chat box.
    • bgdam 2375 days ago
      We're 'powered' by Drift.
      • pc86 2375 days ago
        I'm an idiot. Thanks.
  • pdfparty 2375 days ago
    Check out https://www.pdfparty.com as well - some similar and different capabilities
  • _ao789 2375 days ago
    I like the "capture an area" feature. Very nice!
  • voltagex_ 2374 days ago
    The 365 day expiry time is a little frustrating - but you probably don't want customers stretching out the quota over 2+ years.
    • laktek 2374 days ago
      Felt 365 days is ok in terms of security as well. For example, if you lose the token (aka dead project) and someone get hold of the key starts using it for abuse. This way we have at least an annual check of the keys.
  • etoykan 2375 days ago
    Looks cool! Maybe you can add an option to record the screen / area for x seconds as a gif, it might be useful in some cases.
    • laktek 2375 days ago
      Thanks for the idea, was thinking of exploring screencasting possibility as a next step.
  • jpetersonmn 2372 days ago
    I've tried 7 different pages from our setup and not one of them worked.
    • laktek 2369 days ago
      Can you share more details of your setup? (my contact details are on profile)
  • slig 2374 days ago
    Can you make it save the page as PDF as well?
  • RhodesianHunter 2375 days ago
    Any consideration towards bulk pricing?

    100's of millions?

    • laktek 2375 days ago
      100s of millions over a time period? You can keep buying more tokens as you run out of request quotas.
      • RhodesianHunter 2375 days ago
        Bulk pricing generally implies a reduced price for a larger purchase.

        $7 per 10k stops being cost effective at that scale.

  • mechazawa 2374 days ago
    why? Why not just use casperjs or something and use the built-in method?

    It's literally 3 lines of code. Or even a one-liner if you really want.

      require('casper')
        .create()
        .start('https://rms.sexy')
        .then(function() {
          this.capture('test.png');
        }).run();
    • Posibyte 2374 days ago
      I have a little design for a Cortex based platform with enough memory to hold these images, but there's no way I could run an entire webkit instance for capturing images. This is a perfect solution me.

      So yeah, in my case casper is a no-go.

      • mechazawa 2365 days ago
        Writing and hosting this yourself on a different machine is very little work.
  • megamindbrian 2373 days ago
    I thought of offering this as a service too. Of course you'll never see my comment because the bitches behind hackernews think they are more righteous than me.
  • dogruck 2375 days ago
    I've never heard of several proper nouns in these threads: Intercom, Selenium, Drift.

    Time to Google.

    • mpetrovich 2375 days ago
      Drift is a cheaper (read: free) version of Intercom