homeaboutvideotry it nowpricingdocs
Changelog

What we have shipped

Fileboy is actively developed. Here is what changed and when, newest first.

  1. Usage alerts

    Find out before an app reaches its plan's limits, not when uploads start failing.

    • Every app now emails its members at 80% and 100% of its file, video and storage limits, and shows a banner across the dashboard while it is over one.
    • Choose up to five thresholds, like 50, 80, 90 and 100%, pick which limits are watched, and add up to 10 more addresses, on the app's new Usage alerts page.
    • A new usage.threshold_reached webhook tells your own systems, with the limit, the usage and the month it belongs to.
    • Each threshold is sent at most once a month, however often usage crosses it, and alerts start again on the 1st. Usage is checked every few minutes.
    • Preview the email and the webhook payload, or send a test of either, before an alert is ever needed.
    • Read and change the settings from your server with GET and PATCH /usage/alerts.
  2. Webhook delivery alerts

    An email when a webhook endpoint keeps failing, and another when it recovers.

    • When an endpoint keeps failing, by default 5 attempts in a row over at least 15 minutes, every member of the app gets one email with the endpoint, its most recent errors (status codes, timeouts) and a link to its deliveries. When deliveries succeed again you get a recovered email. Never one email per failed delivery.
    • Each endpoint shows its health on the Webhooks page: Healthy, Some failures, Failing or Disabled, with how long it has been failing.
    • Change the rule, add up to 10 other addresses such as a team inbox, turn alerts off for the app or for one endpoint, and email yourself a test alert, all under Delivery alerts.
    • Optional auto-disable: have Fileboy disable an endpoint that has been failing for days (3 by default), with a warning email a day before. It is off unless you turn it on, because a disabled endpoint gets no new events.
  3. Seek-preview thumbnails

    Small frames above the progress bar as viewers scrub through a video.

    • Fileboy now makes seek-preview thumbnails for every video it processes: a frame every second for videos up to 100 seconds, and up to 100 frames spread evenly over longer ones.
    • The Fileboy player, and the share, watch and embed pages, show them with no change to your code. Signed videos work too: the video's signature covers the thumbnails.
    • For other players, each video has a WebVTT thumbnails track and a JSON storyboard at /videos/{id}/thumbnails.vtt and /videos/{id}/thumbnails.json. Plyr, Video.js and most players read the VTT.
    • The video page's Thumbnails tab shows them with a scrubber, and a Generate button makes them for videos uploaded before today.
    • The Node, Ruby, Python and PHP libraries can build the URLs, and the management API and video data say whether a video's thumbnails are ready.
  4. AVIF images

    format:auto now serves AVIF to browsers that take it, and format:avif asks for it outright.

    • format:auto picks AVIF first, then WebP, then the original format, from the browser's Accept header. Your URLs stay the same. In our tests, photos came out about 30% smaller than WebP at the same visual quality, and graphics and smooth gradients up to half the size.
    • New: format:avif, also as a resize option (resize:800x_~format:avif). quality works as it does for JPEG and WebP: AVIF at quality:75 looks about as good as WebP at quality:75, in fewer bytes.
    • Transparency is kept exactly. lossless works with AVIF too, but format:auto keeps lossless chains on WebP, which is smaller for lossless images.
    • Images over 16 megapixels are sent as WebP, because AVIF takes too long to make at that size. Animated GIF and WebP files are still served as they are.
    • Browsers that do not accept AVIF get exactly what they got before, from the same cached copy.
    • The Node, React, Ruby, Python and PHP libraries accept avif as a format, and the playground and the dashboard's image builder offer it.
  5. Watermarks: logo and text overlays

    Draw your logo, a credit or a repeated watermark on any image, from its URL.

    • overlay:FILE_ID draws another image from the same app on top, sized in pixels or as a share of the image, with its own transforms such as greyscale or a circle crop.
    • text: writes text in one of five bundled fonts, with a size, colour, a box behind it, wrapping and alignment.
    • Both can be placed in any corner or edge with an offset, faded, rotated and repeated across the image as a watermark pattern. The pixel density setting scales them with the rest of the image.
    • Only files of the same app can be drawn. If the overlay is set to Signed URLs only, the image URL needs a signature too, which covers the whole transform.
    • The image builder on each file's page has an Overlay image and a Text step, the playground can try both, and the Node, React, Ruby, Python and PHP libraries build them for you.
  6. Clearer dialogs, messages and video uploads

    Dialogs and messages look and behave the same everywhere, and video uploads show their progress.

    • Every dialog in the dashboard has the same layout: a title, a close button, actions along the bottom, Enter to submit, and a sheet from the bottom of the screen on phones.
    • Messages after you save or delete something are small cards in the corner that you can dismiss, and they stay while you hover over them.
    • Uploading videos shows each video's progress. You can hide the dialog and keep working while they upload, and retry any that fail.
    • Saving a video's or file's details now says it saved.
    • The watch page says a video is still processing, instead of showing an error, and starts playing as soon as it's ready.
  7. Player branding

    Put your colours, logo and controls on the video player, for every video or just one.

    • Choose an accent, icon and background colour, a logo with a link and its corner, which controls show (including a new download button) and whether videos autoplay, start muted or loop, with a live preview, in the app's settings or a video's Share & embed tab.
    • The watch page and iframe embeds use it straight away. Embed codes can still switch autoplay, muted and loop on or off for one page.
    • Colours stay readable: icons on your accent switch to black or white, the accent is lightened where it is text or a focus ring, and the dashboard warns about colours too dark to see on video.
    • <fileboy-player> 1.2.0 applies it with the branding attribute, or takes accent-color, logo, hide-controls and the other new attributes directly. Players without them look exactly as before.
    • The management API takes playerBranding on PATCH /app/settings and PATCH /videos/{id}, and GET /videos/{id}/player-config gives any player the branding for a video.
  8. Video descriptions, tags and metadata

    Describe a video for viewers, and tag it and attach your own data so you can match it to your records.

    • Write a description in the video's Settings tab, on upload or through the API. It shows under the video on its watch page and in link previews, as plain text.
    • Add tags and your own key-value metadata, like an order number or a course ID. They are private: only your dashboard, the management API and webhooks see them.
    • Find videos by them: GET /videos?tags=launch&metadata[orderId]=42 lists the videos with every one of the tags and all of the pairs.
    • PATCH /videos/:id now changes the description, tags (replace them, or add and remove some) and metadata (merged like a file's) as well as the name, and every video.* webhook carries all three.
    • The Node, Ruby, Python and PHP libraries can set and filter by them.
  9. EXIF data from your photos

    Fileboy now reads the camera, lens, exposure, date taken and location from photos.

    • Every image you upload is read for its EXIF data, and the basics of its IPTC and XMP data: JPEG, PNG, WebP, TIFF and HEIC photos all work. Images uploaded before today are read the first time you look.
    • Each file's Metadata tab shows the camera and lens, the exposure, when the photo was taken (in its own time zone when the camera recorded one), the orientation, the colour profile, any title, caption or keywords, and the location with a link to the map. Every raw tag is there too.
    • GET /files/:id/exif returns the same as typed fields plus the raw tags, and the Node, Ruby, Python and PHP libraries have a method for it.
    • Locations and serial numbers are personal data, so only your team and your private key can see them. Public links, signed read URLs and format:json never include them, and personal=false leaves them out of the API's answer.
    • A new Photo location setting removes the GPS position from photos when they are uploaded, without re-encoding them or changing anything else in the file.
  10. Colour palettes for images

    Every image's main colours, with a readable text colour for each, for placeholders and theming.

    • Fileboy works out the colours of every JPEG, PNG, WebP, BMP and TIFF image you upload: the dominant colour, up to 16 main colours with how much of the image each covers, and vibrant and muted swatches. Images you uploaded before are worked out the first time you ask.
    • Each colour comes with black or white text, whichever reads better on it, and its WCAG contrast ratio. The text colour always meets WCAG AA.
    • Add the palette transform to an image URL for the colours as JSON, or palette:css for CSS custom properties and classes. After a crop or resize it gives the colours of that part of the image.
    • GET /files/{id}/palette on the management API, getFilePalette in the Node and React libraries and the same in Ruby, Python and PHP, and each image's dominantColor in file lists.
    • The React Image component takes placeholderColor, which shows a colour behind the image until it has loaded.
    • Each image's Metadata tab in the dashboard shows its palette. Click a colour to copy it.
  11. See what your storage is made of

    Each app has a Storage page: your total against your plan, split by kind, with your biggest files and videos.

    • Storage is split into images, other files, video originals, video renditions, posters, captions and the cached copies Fileboy keeps of resized images. Each file counts once, so the kinds add up to the total your plan's storage limit is measured against.
    • Your biggest files and the videos that store the most, with how much of each video is the original and how much its renditions, each linked to its page.
    • One total a day, so you can see how storage grows. Daily totals start now; earlier days are left empty rather than estimated.
    • The Overview shows your storage against your plan, next to files and videos.
    • The same numbers from your server: GET /usage/storage, and getStorageUsage in the Node, Ruby, Python and PHP libraries.
  12. Folders

    Organise an app's files in nested folders, in the dashboard and through the API.

    • The Files page browses folders like a drive, with breadcrumbs. Create, rename, move and delete folders, upload straight into the one you have open, and select files to move them to another. A file's Settings tab shows its folder.
    • A folder is never part of a file's URL, so renaming or moving folders and files changes no links. Files you already have stay at the top level, and every existing URL and API call works as before.
    • New API endpoints to create, list, rename, move and delete folders and to move up to 100 files at once. Files have folderId and folderPath, GET /files filters by folder, and uploads take folderId or folderPath. A request signed with your private key can create a whole path at once.
    • Deleting a folder that isn't empty asks what to do with what's inside: move it up a level, or delete it all, files included.
    • Uploads from a browser with your public key can go into a folder that exists but cannot create one.
    • Folder support in the Node, Ruby, Python and PHP libraries, and folderId and folderPath on the React and browser uploaders.
  13. Expiring links

    Share a file with a link that stops working at a time you choose.

    • On a file's Share & embed tab, make a link that lasts 1 hour, 1 day, 7 days, 30 days or until a date and time you pick, up to a year. It can open the file, a download under a name you choose, or a resized image.
    • Turn a link off whenever you like and it stops at once, without touching your other links. Each link shows when it expires and how often it was opened.
    • Links work for files set to Signed URLs only and in apps that require signed URLs. A public file stays public: its own URL keeps working, and the Share tab says so.
    • Make, list and turn off links from code too, with the management API and the Node, Ruby, Python and PHP libraries.
  14. Share pages for files

    Send anyone a page with a preview of a file and a download button.

    • Turn on a file's share page from its Share & embed tab, or with sharePage on PATCH /files/{id}, and copy its link: fileboy.io/f/ and the file's id. Pages are off until you turn them on, and turning one off stops its link at once.
    • Previews by type: resized, responsive images, PDFs in the browser's viewer, video and audio players, the start of text, CSV and JSON files, and a card with the name, type and size for everything else.
    • Pasted links unfurl with the file's name, type and size, and a thumbnail for images. Share pages are kept out of search engines.
    • A share page follows the file's read access. A file set to Signed URLs only, or any file of an app that requires signed URLs, only opens through a share link your server signs, and its preview and download stop working when that link expires.
    • signSharePageUrl and buildSharePageUrl in the Node library, and the same helpers in Ruby, Python and PHP.
  15. Private single files

    A file set to Signed URLs only now really needs a signed URL, even in a public app.

    • A file's read permission is now enforced. Set to Signed URLs only (shown as Authenticated before), its file, data, image and label URLs need a signed URL or your private key, even when the rest of the app is public. Files left as Anyone with the link work exactly as before.
    • The app's default read permission now applies to new uploads: set it to Signed URLs only and every file you upload from then on needs a signed URL, while the files you already have keep their own setting.
    • Videos are unchanged: they need a signature only when the whole app requires signed URLs.
    • The app settings page groups both under Read access, so it is clear which covers the whole app and which only new files.
  16. A redesigned dashboard

    Every dashboard page has a cleaner, consistent layout that works on phones.

    • A new sidebar with an app switcher, file and video counts and your plan's usage, which becomes a menu on small screens.
    • Each app opens on an Overview: usage against your plan, recent files and videos, a getting-started checklist and the keys and code to connect your app.
    • Files and videos can be shown as a grid, files can be dropped anywhere on the page to upload, and you get a warning before you reach your plan's limit.
    • Labels show their URL and link to their file, and their file can be changed or removed from the list.
    • API keys, webhooks, settings, Plan & billing and your account each have a clearer page, with features we're working on marked as coming soon.
  17. A page for every file, with an image builder

    Files open on their own page in the dashboard, with a preview, details and tools.

    • Preview images, video, audio and PDFs, and read CSV files as a table and JSON formatted, right in the dashboard.
    • An image builder: start from a preset or stack resize, crop, adjust, effects and format steps, see the result and how much smaller it is, and copy the URL or code for HTML, a responsive srcset, React or Node.
    • Edit metadata as fields, add a label, change access and copy every link to the file from one place.
  18. Signed URLs for private files

    Serve files, images and videos only to the people you choose.

    • Turn on signed URLs for an app, in its settings or through the API, and every file, image and video read needs a URL your server signs with your private key. Apps that do not turn it on work exactly as before.
    • Signed URLs expire, and can be limited to one address. A signature is bound to the file, the transform and the file name, so a URL for one size cannot be used for another.
    • Video works as well: one signature covers the manifest, every segment, the poster and the captions, and <fileboy-player> takes it as its signed-query attribute. Private videos are always served through Fileboy, never from the public CDN address.
    • Helpers to sign URLs in the Node, Ruby, Python and PHP libraries, with identical signatures across all four. You can also sign with nothing but openssl.
    • Rotate your private key and keep URLs signed with the old one working for 7 days, or regenerate it to stop them at once.
    • The dashboard keeps previewing a private app's files, images and videos: it signs its own links.
    • Clarified: the dashboard's default read permission has never restricted reading. Use the new Read access setting to keep files private.
  19. A redesigned video page in the dashboard

    Everything about a video in one place, laid out to work on any screen size.

    • Status, length, resolution, size, plays and last played at a glance, with live progress while a video processes.
    • An embed builder for iframes and the web component, with autoplay, loop, muted and start-time options.
    • Pick the generated or a custom poster with one click, upload your own, or use the frame the player is paused on.
    • Captions accept SubRip (.srt) as well as WebVTT, and every rendition can be downloaded from the Files tab.
  20. The full set of image transforms

    Crop, rotate, round, pad, recolour and more from the image URL, with clear errors when a transform is wrong.

    • Crop, smart crop, aspect ratio crops, rotate and flip, which the docs listed but the image service skipped, now work. So do colour names and rgb() colours.
    • New: rounded corners and circles, padding, borders, blur, sharpen, greyscale, brightness, contrast, hue, gamma, sepia, tint, opacity and pixelate.
    • New: a focus point for resize, dpr for high density screens, format:auto to serve WebP to browsers that take it, and strip to remove metadata.
    • New: resize upscale:false never enlarges a small image, trim cuts away a plain border, lossless makes WebP exact, and format:json answers with the image's size instead of the image.
    • A transform that is written wrong, or would make an image too large, now gets a 400 that says what is wrong instead of being skipped. Existing URLs give exactly the same images as before.
    • The Node, React, Ruby, Python and PHP SDKs can build every transform.
  21. A better page for sharing videos

    The watch page at /video/watch is now a clean, dark page built around the video.

    • Shows the video's name, length, upload date and views, without the site's header and footer.
    • Share and Embed buttons: copy a link or embed code, optionally starting at the current moment, or share straight to X, LinkedIn, Facebook, Reddit, WhatsApp or email.
    • Embeds take autoplay, loop, muted and t (start time) options.
    • Pasted links show the video's title and poster in Slack, X, LinkedIn and messaging apps, and oEmbed lets tools like Notion and WordPress embed the player from the link alone.
  22. A new video player

    Fileboy video now plays in <fileboy-player>, a web component that works in any page or framework.

    • One script tag or npm package, about 17 KB gzipped, with no React and no public key needed.
    • Playback speed, picture in picture, lock-screen media controls, keyboard shortcuts and labelled controls for screen readers.
    • Style it with CSS custom properties and listen for play, pause, timeupdate and ended events like a <video>.
    • The embed page, the watch page and the dashboard use it. The React video package is deprecated, and version 1.0.0 of the browser script handles uploads only.
  23. Video docs, a video page and new video guides

    Everything about Fileboy video now has a proper home.

    • New video section in the docs: how video is processed, how to upload and check progress, and every way to play it.
    • A video page that explains how it works, what you get, and where it is and is not a good fit.
    • New guides: add captions to a video, embed a video on any website, and build a video library page.
    • New comparisons with Mux and Cloudflare Stream, including where each is the better choice.
  24. SDKs for Ruby, Python and PHP, and an OpenAPI spec

    Use Fileboy from Rails, Django and Laravel without writing HTTP calls yourself.

    • Official Ruby gem, Python package and PHP package: upload from a path, stream or URL, build file and image transform URLs, and work with video and transcripts.
    • OpenAPI 3.1 spec for every endpoint, at /openapi.json and /openapi.yaml, plus a rendered API reference in the docs.
    • Code samples in the docs, guides and quick start now come in JavaScript, Ruby, Python, PHP and cURL.
    • New guides for using Fileboy from Rails, Django and Laravel.
  25. Webhooks

    Fileboy can now tell your server when something happens, so you no longer have to poll.

    • Add webhook endpoints to an app from the new Webhooks page, and choose which events each one receives.
    • Events: file uploaded and deleted, and video uploaded, ready, failed and deleted. The video ready event includes the duration and playable URLs.
    • Every request is signed with your endpoint's secret and carries a timestamp, so you can check it is genuine and recent. The Node library has a verifyWebhook helper.
    • Failed deliveries are retried for several hours with a growing delay. See what was sent, the response and any errors in the delivery log, send a test event and retry any delivery by hand.
  26. Easier to find, easier to try

    A round of work on getting from landing on the site to a first upload.

    • New homepage and a single live playground: upload a file, reshape it and copy the URL with no sign-up.
    • Free plan now includes 1,000 files. Pricing page shows limits and a cost comparison up front.
    • Sign up with GitHub, with a demo key in the quick start so the first upload works straight away.
    • Server-rendered public pages, a sitemap and proper 404 responses for unknown URLs.
    • Cookie-free analytics, so there is no consent banner.
    • URL uploads can no longer reach internal network addresses, and the public demo key is rate limited.
  27. Dashboard on a simpler foundation

    Less machinery behind the manage area, so it loads faster and breaks less.

    • The website server and dashboard data layer were simplified and upgraded.
    • Regenerating an API key now asks for confirmation.
    • Expanding a row in the files table no longer triggers a needless refetch.
    • Moved production onto a new hosting cluster.
  28. Upload progress and label dates

    Uploads feel better, and labels tell you more.

    • Uploads report progress, in the React component and the browser library.
    • Labels show the date a file was assigned to them.
    • Cancel a transcript draw while editing video subtitles.
    • Video and browser packages republished with the latest fixes.
    • Privacy policy rewritten in plain language.
  29. Video looping and clearer plans

    A small player feature and a much easier pricing page.

    • Video player supports looping.
    • The stock uploader handles errors more gracefully and tells people what went wrong.
    • Pricing page redesigned around what each plan includes.
  30. Plans, limits and bulk clean-up

    Plan limits are enforced and shown, and removing things is much quicker.

    • File limits are enforced by the API and your plan and usage are visible in the dashboard.
    • New apps start on the free plan.
    • Delete many files at once, or clear a whole app, with the work done in the background.
    • Bulk delete on the video index. Deleting a video now removes its original files from storage too.
    • Video play counts and last-played time.
    • Search and filter your apps, with created dates.
  31. Account controls

    Better tools for keeping accounts in good standing.

    • Accounts can be restricted or blocked, with blocked users signed out immediately.
    • Admin tables can be filtered by account status.
  32. Embeddable video player

    Put a Fileboy video on any page with one snippet.

    • Embed page and copy-paste embed code on each video's management page.
    • The video player works without a provider wrapper, so it drops into any React app.
    • Cross-origin iframe embedding is allowed, and the embed page loads faster.
    • Dashboard shows only your own apps.
  33. More storage options

    Choose where an app's files live.

    • DigitalOcean Spaces is available as a storage provider, switchable per app.
    • Files are stored under per-app folders, and video assets are served through a CDN URL.
    • Fixed timecode tracks bloating video output.
  34. Video processing in Go

    The video pipeline moved to the faster, leaner service.

    • Video transcoding and the video API now run in Go. Video data includes duration and created date.
    • Upload by URL accepts form data.
    • Authorization headers are accepted with or without a prefix.
    • Better file type detection for plain text, XML and Outlook .msg files.
  35. One fast API for uploads

    Uploads now go through the same Go service that serves your files.

    • Uploads are handled by the Go API.
    • The previous API was retired and unused conversion endpoints were removed from the dashboard.
    • Node package gained test helpers, and the website bundles the latest client packages.
  36. A leaner API

    Fewer moving parts to go wrong.

    • Removed unused endpoints and a large native image dependency from the legacy API.
    • Files and assets are served from a CDN.
    • Improved video mime type detection.
  37. Private apps and key management

    Lock an app down, and rotate keys when you need to.

    • Set an app to authenticated so only requests signed with your private key can write.
    • Regenerate public and private keys from the dashboard at any time.
    • Public keys are safe to ship in browser code. Private keys stay on your server.
  38. A fuller set of image transforms

    Reshape images from the URL, and chain steps in the order you want.

    • New transforms: crop, smart crop, aspect ratio, rotate, flip, blur, tint, saturation, invert and quality.
    • Transforms run in the order you give them, so you can crop then resize, or the reverse.
    • Background is a top-level option, and JPEG backgrounds default to white.
    • Hex colours are validated and the React and Node clients are strictly typed.
  39. Labels and file metadata

    Refer to files by a name you choose, not only an ID.

    • Labels let you point a stable name at a file, and swap the file later without changing code.
    • Add, edit and remove metadata on any file from the dashboard.
    • File previews open full screen, with open in new tab and download.
  40. Browser uploader refresh

    A small, dependency-light way to upload from any web page.

    • Updated browser package with a drop-in uploader and file preview.
    • Choose the destination bucket from the browser, and limit accepted file types.
  41. A new image engine

    Image delivery moved to a new Go service. Faster responses, more formats.

    • Resizing and delivery rewritten in Go, with caching of generated images.
    • WebP support, and choose the output format from the URL.
    • Limits on resize dimensions to protect against abusive requests.
    • Small files are served from memory, with automatic file extension detection.

Missing something you need? Email hello@fileboy.io. It goes to the people who build it.

Add Fileboy to your next project

We built Fileboy to stop rebuilding file handling for every app. Create an app, paste your key and upload a file. The free plan needs no card.