Grist Attachments in One Place: File Studio, a Free Widget

Grist attachments in one place: File Studio is a free, open-source widget with folders, search inside files, a PDF editor and photo reports. No server.

Grist Custom Widget · Files
File Studio · A free Grist widget by ANUPRESS

Every file in your Grist table, in one place

Grist keeps photos, PDFs and documents in Attachments columns, a few thumbnails to a cell. File Studio opens them all at once: as cards, as one wall, or one record at a time. It makes folders, reads the words inside files, edits pictures and PDFs, and turns a visit’s photos into a report. It runs in your browser, and your files travel only between that browser and your own Grist.

By ANUPRESS Team · Free and open source (MIT) · Reading time ~13 min

This guide is about Grist attachments: the photos, PDFs, scans and spreadsheets in a table’s Attachments columns, and File Studio, the free widget we built to work with them. It shows what Grist’s own cell already does, how to add the widget in two minutes, every part of it with a screenshot, and what it cannot do.

What Grist attachments look like without a widget

An Attachments column holds files in a cell, and Grist’s own cell covers the basics well. A picture shows as a thumbnail, and the column’s Size bar makes the thumbnails larger. The paperclip opens a file picker, and you can paste files straight into a cell. Double-click a picture and Grist opens a larger view of all that cell’s attachments, where each one can be renamed, downloaded or removed. Other attachments show as a tile with their type. Grist’s column types page describes it.

Grist attachments in a table: photo thumbnails in the Photos column and grey PDF, TXT, XLSX, MP4, CSV and DOCX tiles in the Documents column
Grist’s own Attachments cells: a thumbnail for each picture, a tile with the type for every other file. Real Grist, made-up inspections.

For a few files in a few rows, that is all you need. File Studio is for tables where the attachments are the point: forty photos from one inspection, a contract you remember by a clause in it, a report that has to go out as a PDF this afternoon. Grist’s larger view shows one cell’s attachments at a time. File Studio shows all the attachments of the table together, keeps them in folders, searches the words inside them, and edits them without a trip through a download and an upload.

Live, interactive demo

This is the real widget, the same page you paste into Grist, running on made-up property inspections in Vienna, Hamburg, Lyon and Berlin. It opens on the Files layout. Click anything: switch to Cards or Viewer at the top, open the Excel file or a PDF, tick Inside files and search for meter, press E on a photo to mark it up, or open Storage. It runs on sample files in your browser, so nothing you change is kept.

anupress.github.io/grist-file-studio · live demo

Seven records with 21 attachments: photos (one of them an iPhone HEIC picture), PDFs (a report, a form and a scan), Word, Excel, CSV, Markdown, text and HTML files, a floor plan, a video and a sound recording. Add ?example=speed to the demo address for 2,000 records with 10,000 attachments.

Watch the overview (4 minutes)

The overview shows each part of File Studio once, on the same sample inspections as the screenshots in this guide. A tutorial for each part follows on our channel.

Chapters: jump to any part
  1. 0:00 What it is
  2. 0:20 Three layouts
  3. 0:39 Add it to Grist
  4. 1:22 Folders
  5. 1:44 Find
  6. 1:56 Look closely
  7. 2:09 Edit
  8. 2:52 Report and space
  9. 3:33 Tutorials

The inspections, people and numbers in the video are made up.

Add File Studio to your Grist document

  1. Add a custom widget. In your document, press Add New, then Add widget to page. Choose Custom as the widget and the table that holds your files under Select data, then Add to page.
  2. Paste the address into the Custom URL card of Choose custom widget, and press Add widget:
    Widget URL
    https://anupress.github.io/grist-file-studio/
    The first time, Grist warns about custom widgets from outside its gallery. Tick the box and confirm. The code is public on GitHub, so you can read it before you trust it.
  3. Accept full document access. The creator panel on the right asks for it. Access level then reads Full document access.
  4. Point it at your files. If the table has no Attachments column, press Add an Attachments column. Otherwise it shows the attachments that are there. Columns says which column names a record and what a card shows.
Grist's creator panel for File Studio: the Custom URL https://anupress.github.io/grist-file-studio/ and the access level Full document access
The creator panel after step 3.
Why full access. File Studio reads each file’s contents, to draw thumbnails, read PDFs and pack zips, and it writes your changes back: new files, renamed files, edited pictures, new folder rows. Grist lets a widget read the contents of attachments only with full access. Every change is one Grist action that one Undo takes back, and formula columns are shown, never written. If you want to see it work before it touches a real document, try it on a copy first.
No files to try it on? Open the demo in a browser tab of its own, full width:
Demo URL
https://anupress.github.io/grist-file-studio/

On self-hosted Grist it works the same way. Thumbnails, video and zips fetch the files from Grist’s API, which answers a widget by default. A server behind a firewall that refuses the upload check gets a message saying so, and the Grist cell still takes files.

Three layouts: Cards, Files and Viewer

The buttons at the top switch between three ways of seeing the same attachments. Clicking a card or a file moves Grist’s cursor to its record, so a table or card linked to the widget follows along.

LayoutShowsWhat you do in it
CardsOne card per record: the cover picture, the title, up to four fieldsHover the cover to flip through its pictures, drop files on a card, click to select the record
FilesEvery file of the records shown, with a heading per recordSearch, filter by type, sort, mark several files and zip, rename or remove them
ViewerThe selected record’s files, large, with a filmstripFollow a table next to it, drag the filmstrip to reorder, make a cover, add files
File Studio Cards layout: property inspections in Vienna, Hamburg and Lyon, each card with a cover photo, the number of files, the inspector and the visit date
Cards: one card per record, with its first photo as the cover and the number of files on it.
File Studio Files layout: every file of the Vienna inspection on one wall, photos, the first page of a PDF, a text file, a Markdown file, a floor plan and an Excel file
Files: one wall of every file, a heading per record with its file count and size, and filters by type.

In the Files layout, Display → Show as → List turns the tiles into rows with the name, type, size, date added and tags, and a click on a heading sorts by it. The Viewer is the layout to put next to a Grist table: set Select by on the widget and it shows the attachments of whichever row you click.

File Studio Viewer: one photo of the Vienna flat large, with a filmstrip of its nine files below and the buttons Open, Download, Zip and Report
Viewer: the selected record’s files, large. The filmstrip below reorders them by dragging.

Folders in Grist, made from records

Grist has no folders. A file sits in an Attachments cell, and a cell belongs to a record. So in File Studio a folder is a record: New folder adds a row with the name you type, and a file is in the folder when it is in that row’s Attachments cell. The table’s other columns, formulas and links work on a folder as on any row.

Folders inside folders need one more column: a Reference column to the same table that says which record a record sits in. File Studio finds one called Parent, Folder, Ordner or Dossier, and Let folders nest in the folder list adds a Parent column for you. Then the Folders button opens the list on the left, with the number of files in each. Choose a folder to see its files and those of the folders below it, in every layout.

The File Studio folder list: Austria, France and Germany, with Hamburg and Berlin inside Germany, and the wall showing the files in Germany
The folder list with Germany chosen: the wall shows Germany’s files and those of the folders inside it.

Drag a folder onto another to move it, or files onto a folder to put them in it. You can also drop a whole folder from your computer: each folder on the disk becomes a record inside its parent, with its files in the Attachments cell, up to 3,000 files at a time. A question comes first with the count and the size, and one Undo takes the new records back (the uploaded files stay in the document until Free up space).

Upload files to Grist: drop, paste or pick

Drop files on a card, on a record’s heading or on the Viewer, and they go into that record’s attachments. Press Add files to choose between the selected record and one new record per file, named after the file. Ctrl+V pastes a screenshot. On a phone, Add files offers the camera, and photos from an iPhone work as they are. The option Shrink large photos before uploading in Columns keeps the document small and drops the location and camera data that photos carry.

The search box looks at file names, the record’s title and its fields. Tick Inside files and it also looks at the words in the attachments themselves: PDFs page by page, Word, Excel, PowerPoint and OpenDocument files, and text, Markdown, CSV and HTML files.

Reading is asked for. The first time, File Studio says how many files it will read and how much that downloads, and waits for your answer. It reads two at a time and says how far it is, with Stop beside it. The words are kept in this browser under each file’s content hash, never written to the document and never sent anywhere, so the same file in two records is read once.

File Studio asks before it reads: Read the text of 9 files, 283 kB in all, with the choices Read the text in the files, Also read scanned pages and Also read pictures
The question before the first search: what it reads, how much it downloads, and where the words are kept.

A match shows on the tile: the page (Page 2) or In the text, with the words around it. In Cards, a record shows when one of its files matches. Accents and capitals do not matter, so muller finds Müller.

Searching meter with Inside files ticked: a PDF page, a checklist, a spreadsheet, a CSV file and a PDF form, each with the words around the match
“meter” found inside a PDF’s second page, a checklist, an Excel file, a CSV file and a form.

A scanned page is a picture of text with no words of its own. Also read scanned pages recognises them with Tesseract running in your browser: about 13 MB that load once, then about half a second a page, in the interface language and English. Also read pictures does the same for photos of signs and labels. Handwriting and very poor scans read badly.

A PDF viewer for Grist, and Word and Excel previews

Click any file and it opens as large as the widget allows. The arrow keys, a swipe or the filmstrip step through everything on show, and I shows the details: size, picture size, pages, upload date, record and column.

  • Photos zoom with the wheel or a pinch and pan by dragging. Phone photos stand the right way up, and an iPhone’s HEIC pictures are drawn by the widget itself, in the browser.
  • PDFs show every page, drawn by pdf.js, with zoom. Open in a new tab gives the browser’s own viewer for printing.
  • Word, Excel and PowerPoint files are drawn on white sheets: the text with its headings, lists and tables; each Excel sheet as a grid with its number formats; each slide’s title and text. It is the content, not the program’s page, so there are no page breaks, fonts or charts. Up to 30 MB.
  • Video and audio play in the browser. Text, CSV, JSON, Markdown and HTML show as text, CSV as a table, and are never run as a web page.
An Excel file opened large in File Studio: the repair costs of the Vienna flat as a grid, with euro amounts, percentages and dates
An Excel workbook in the lightbox: a grid with the numbers in their own format, and a tab for each sheet.

Three more ways to look: a slideshow (S) that moves on by itself; Compare, which lays two pictures on top of each other with a divider to drag, before and after; and Sort → Date taken, which orders photos by when the camera took them. Where it is lists every cell in the document that holds a file, in any table, and opens Grist at that cell.

Edit pictures: crop, mark up, hide

Press E on a picture, or Edit… in its menu, and it opens at full size in five tabs. Crop takes free or fixed shapes, turns, flips and straightens. Adjust sets exposure, contrast, colour and sharpness, or Auto does it for you. Mark up draws arrows, boxes, circles, a pen and text. Hide covers faces, number plates or names with blur, pixels or a black box. Size sets the width, the format and the quality.

The File Studio picture editor: a damp corner by a window with a red circle and an arrow drawn on it, and the Mark up tools
Mark up: a circle and an arrow on a damp corner, in one of five colours and three line weights.

The Document look is for a photo of a page: it makes the paper white and even and the print dark, like a scan, and a colour version keeps a blue pen blue. Save puts the edited picture where the original was, and asks first when the same file is in other cells. Save as copy adds it next to the original, and Download leaves the document alone. A saved picture carries no camera data.

Fill, sign and merge PDFs

A PDF opens in an editor with up to five tabs, and every page is read and written in your browser.

  • Pages: drag to reorder, turn, remove or duplicate a page; add pages from other PDFs and photos; save some pages as a new file, or split the file by ranges such as 1-3, 5, 8-.
  • Fill and sign: text, today’s date, a tick, a cross, a cover box, a highlighter, a pen, a picture such as a stamp, and a signature drawn with the mouse, a finger or a pen.
  • Form: when the PDF has form fields, they are filled in on the page. By default what you typed becomes part of the page.
  • Numbers: page numbers and a watermark such as DRAFT on every page.
  • Finish: turn pages into pictures, and set a password to open the file.
A move-in form PDF filled in with File Studio: tenant, move-in date, meter reading, keys, a radio button and a tick box, with the Form tab on the right
A form PDF filled in on the page. The panel counts the fields and keeps what you typed.
A cover hides; it does not redact. The text under a cover box is still inside the file. To remove it for good, turn that page into a picture on the Finish tab: the page is redrawn as an image, and what was under the cover is gone.

To merge, mark PDFs and photos in the Files layout and press Merge into PDF…. The editor opens with all their pages in order, and the new file is saved next to the first one. Changing a digitally signed PDF removes its signature. The editor says so, and Save as copy is the safer choice there.

Photo reports as PDF

A record’s photos on pages, with the title, the record’s details, the file names under the photos and a list of the other attachments. Open it from the Viewer’s Report button, or mark photos from several records and make one report of those.

The Photo report dialog: title Testgasse 7, Vienna, 4 photos per page, A4, the record's details and file names ticked, 5 photos on about 2 pages
The options, and how many pages they make, before anything is made.

One, two, four or six photos per page, on A4 or Letter. Add to the record uploads the PDF next to the photos, and Download keeps it out of the document. The photos are stored as JPEG of at most 1,500 pixels (2,000 at one or two per page), so a report of forty phone photos is a few MB.

Storage: where the space goes

Grist’s hosted plans limit the attachments of each document: 1 GB on the free plan when we checked in October 2026, more on the paid plans. Storage shows the total, split into pictures, videos, PDFs, audio and the rest, with the attachments no cell uses any more shown apart. Grist stores a file once, however many cells hold it, so the same photo in two records counts once.

The File Studio Storage view: 4.2 MB for 22 files split by type, 2.7 MB not used any more, Shrink photos, Free up space, Download as zip and the biggest files
Storage: the space by type, the leftovers, and three ways to make room or keep a copy.

Shrink photos redraws every photo larger than the side you pick (1024 to 2560 pixels) and puts the new file in every cell that held the old one, in one step that Undo takes back. Free up space asks Grist to delete the files no cell uses; after that, Undo cannot bring them back, and only an owner of the document can do it. Download as zip asks Grist for all the attachments in the document in one zip, the quickest backup of the files.

Tags, notes, zips and Ctrl+K

Tags and notes belong to a file, not a cell, so a photo in two records has the same tags. They live in an ordinary Grist table, File_Studio_notes, which File Studio adds after asking, the first time someone tags a file. Grist’s Undo, history and access rules cover it like any other table.

Zips take their file names from your columns. In Columns, a pattern such as {Invoice} {Client} {nn} turns into R-2026-014 Müller GmbH 01.jpg, and a zip can hold a folder per record and a files.csv that says which file came from which record. Rename… on marked files uses the same patterns inside Grist, with a preview first.

Ctrl+K opens one box for commands, folders and files. Right-click works on files, folders and empty space, and a long press does the same on a phone. The widget speaks English, German and French, following Grist’s language.

Where your files go

File Studio is a static page on GitHub Pages that runs in your browser. It reads your Grist attachments through Grist’s own widget API and writes changes back the same way. There is no ANUPRESS server in between, no account and nothing that collects your attachments. Thumbnails and the words read for the search are kept in your browser’s storage; the widget’s settings are saved in the document; tags and notes sit in their own table. The code is MIT licensed and public, so anyone can check this.

What File Studio cannot do

  • It does not rewrite the text in a PDF. Marks sit on top of the page, which is how filling in and signing work.
  • Text it adds uses the PDF’s standard fonts. German, French and other Western European text is fine. Greek, Chinese and other scripts would turn into “?”, and the editor warns you as you type.
  • Word, Excel and PowerPoint files are shown, not edited, and without their page layout. The old .doc and .xls show their type, size and a Download button.
  • Handwriting reads badly with text recognition, and so do very poor scans.
  • Browsers: we test in Chrome and Firefox, and Edge uses Chrome’s engine. Safari has not been tested yet.

Grist attachments: FAQ

Is File Studio free?

Yes. File Studio is open source under the MIT licence and hosted on GitHub Pages. There is no account, no tier and no usage limit. Grist itself has a free plan and can be self-hosted.

Does it change the attachments in my table?

Only when you do something: add, rename, move, edit or remove a file, or make a folder. Each change is one Grist action that one Undo takes back. Grist never changes an uploaded file, so an edited picture or PDF is uploaded as a new file and the cell points to it. Formula columns are shown, never written.

Do my attachments leave my Grist document?

No. The widget is a static page that runs in your browser. It reads your attachments through Grist’s widget API and writes changes back the same way. ANUPRESS has no server and receives nothing. Thumbnails and the words read for the search are kept in your browser.

Can it open iPhone photos (HEIC)?

Yes. File Studio draws HEIC pictures itself, in the browser, for the thumbnail, the lightbox, the editor and the photo report. Convert to JPEG in a picture’s menu replaces a HEIC by a JPEG in every cell that holds it.

Can it search scanned PDFs?

Yes. Also read scanned pages recognises the text with Tesseract running in your browser, in the interface language and English. Nothing is sent anywhere. Handwriting and very poor scans read badly.

How do folders work when Grist has no folders?

A folder is a record. New folder adds a row with the name you type, and a file is in the folder when it is in that row’s Attachments cell. A Reference column of the same table, such as Parent, puts folders inside folders, and File Studio can add that column for you.

Does it work with self-hosted Grist?

Yes. Add it with the same address. Thumbnails, video and zips fetch the files from Grist’s API, which answers a widget by default. If a firewall refuses the upload check, the widget says so and the Grist cell still takes files.

How many attachments can it handle?

Thumbnails are made once and kept in your browser, at most four files download at a time, and only what is on screen is drawn. In our test, 10,000 attachments opened in about 0.3 seconds. Add ?example=speed to the demo address to try 2,000 records with 10,000 files.

Keep going

The source, the changelog and the issue tracker are on GitHub. If you would rather have Grist set up for you, with your tables and the widgets in place, that is a service we offer.

File Studio is built and maintained by ANUPRESS. It is free, open source, and runs entirely in your browser. The inspections, addresses and people in the demo and the screenshots are invented.

ANUPRESS Team
ANUPRESS Team

ANUPRESS Team writes and builds everything on this site — reviews and 48+ free browser-based tools alike. We test what we review by actually using it, not by summarizing a spec sheet. Spot something wrong or want to know more about a specific piece? Reach us through the contact page.

Articles: 43

Leave a Reply

Your email address will not be published. Required fields are marked *