Button guide

Let coworkers transcribe audio with Whisper running on your computer upload a recording, download the transcript

You can wrap a local faster-whisper script in Button (https://button.bitgate.dev) so coworkers can upload an audio file in their browser, run the transcription on your machine, and download the text and subtitle files. The Free plan is $0 for 1 published tool, up to 3 people, and 100 runs per month, while individual input files can be up to 25 MB and each job can run for up to 30 minutes.

Prepare the faster-whisper script

OpenAI Whisper is an open-source speech recognition model that runs locally, and faster-whisper reimplements Whisper on CTranslate2 to run faster with less memory. If you already have faster-whisper working on your computer, you just need to make sure your script takes its inputs as command-line arguments instead of using hard-coded paths or interactive prompts.

Button passes each form value to your program as its own argument, with no shell, and values can't start with "-". Take the input audio path, the language choice, and the output directory path as arguments using argparse in Python, and write both the plain text .txt file and the .srt subtitle file into that output folder.

import argparse
import os
from faster_whisper import WhisperModel

def format_timestamp(seconds):
    hours = int(seconds // 3600)
    minutes = int((seconds % 3600) // 60)
    secs = int(seconds % 60)
    millis = int((seconds - int(seconds)) * 1000)
    return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--audio", required=True)
    parser.add_argument("--lang", required=True)
    parser.add_argument("--outdir", required=True)
    args = parser.parse_args()

    model = WhisperModel("base")
    lang = None if args.lang == "auto" else args.lang
    segments, _ = model.transcribe(args.audio, language=lang)

    os.makedirs(args.outdir, exist_ok=True)
    txt_path = os.path.join(args.outdir, "transcript.txt")
    srt_path = os.path.join(args.outdir, "transcript.srt")

    with open(txt_path, "w", encoding="utf-8") as txt_file, \
         open(srt_path, "w", encoding="utf-8") as srt_file:
        for i, segment in enumerate(segments, start=1):
            text = segment.text.strip()
            txt_file.write(text + "\n")
            start = format_timestamp(segment.start)
            end = format_timestamp(segment.end)
            srt_file.write(f"{i}\n{start} --> {end}\n{text}\n\n")

if __name__ == "__main__":
    main()

Fixed flags like --audio, --lang, and --outdir are part of the command you approve on your machine; your colleagues only supply the values for the form fields.

Publish the script as a Button form

Any program works with Button - Python, Node, R, PowerShell, shell scripts, compiled binaries - and the jobs run on your computer, never in Button's cloud.

  1. Sign in at https://button.bitgate.dev.
  2. Install the Button runner on your computer (macOS, Linux or Windows) by running the one-line command the site shows you (it uses curl on macOS and Linux, and PowerShell on Windows).
  3. Open the local setup page and pick your Python script. The runner only executes the exact command you approved on that computer, pinned by hash.
  4. Describe the script's inputs for the web form: add a file input for the audio recording, and a choice input for the language (for example, auto, en, es, fr) so nobody has to guess language codes. Button also supports text, number, and yes/no inputs if you want to expose more options later.
  5. Publish the tool. Button gives it its own page and lets you invite coworkers.

Once invited, your colleagues open the link from their invite email and sign in with Google or a one-time email code. They don't install anything and they never pay. They just pick their audio file, choose the language from the dropdown, press Run, and download the resulting .txt and .srt files when it finishes. Every run is logged with who ran it and when, and you can set access to expire or revoke it at any time. If you change the tool later, people have to confirm the new version before running it.

Limits, privacy, and plans

Because the job runs on your hardware, your computer has to be on and online when someone needs a transcript. Tool pages show Ready, Busy or Offline so coworkers know what's happening.

There are a few limits you should keep in mind for audio transcription:

  • Each uploaded file can be up to 25 MB (up to 8 files and 100 MB total per run). If someone has a long recording that's over 25 MB, tell them to compress it to a lower bitrate before uploading.
  • A run can take up to 30 minutes, with logs up to 1 MB per run.
  • Your computer handles one run at a time. You get one computer (runner) per workspace on every plan, and pairing a new computer replaces the previous one.
  • Button's servers relay form values and files between your colleague's browser and your machine. Input files are deleted 24 hours after a run ends, and output files are deleted after 7 days.

Here is how the plans and operational limits break down:

Feature or limit Free ($0) Pro ($15/month, or $144/year at $12/month)
Published tools 1 50
People (distinct invited colleagues; you don't count) 3 250
Runs per month (includes your own runs) 100 5,000
File transfer per month 1 GB 50 GB
Max file size 25 MB per file (100 MB and 8 files per run) 25 MB per file (100 MB and 8 files per run)
Max run duration 30 minutes (one run at a time) 30 minutes (one run at a time)
File retention Inputs deleted after 24 hours, outputs after 7 days Inputs deleted after 24 hours, outputs after 7 days

Recipients never pay on either plan, and downgrading from Pro to Free deletes nothing.

When to use hosted transcription services instead

Running faster-whisper on your own machine through Button makes sense when you already have the hardware sitting on your desk and a handful of coworkers need transcripts here and there. If your volume is high, though, a hosted transcription service is the better choice. Because Button runs one job at a time per computer, requires your computer to be on and online, and caps individual runs at 30 minutes and files at 25 MB, a busy team submitting lots of recordings at once will end up waiting in line behind your machine.

FAQ

Do my colleagues need to install Python or Whisper?

No. They open the link from their invite email, sign in with Google or a one-time email code, fill in the web form, and download the results in their browser without installing anything.

Do the audio files stay on my computer?

No, the files pass through Button's servers, which relay the form values and files between your colleague's browser and your computer. Button deletes input files 24 hours after a run ends and output files after 7 days.

What happens if my computer is asleep or already running a job?

Your computer has to be on and online for the tool to work, and it runs one job at a time. The tool's web page shows Ready, Busy, or Offline so your colleagues can see right away if your machine is available.

How can we transcribe a long recording that is over 25 MB?

Button limits each uploaded file to 25 MB. Whisper converts audio to 16 kHz mono before transcribing, so a mono 32 kbps MP3 is usually plenty: ffmpeg -i meeting.m4a -ac 1 -ar 16000 -b:a 32k meeting.mp3 brings an hour of audio down to about 14 MB.

Last updated

Put your script behind a form

Button turns a script on your computer into a web form. Colleagues sign in, fill it in, press Run and download the results. Free for 1 tool and 3 people.