Make a workout file your audience can open in Tabata Forge
Requires Tabata Forge 1.1.0 or later. Earlier versions of the app can't open these files, so ask your audience to update Tabata Forge from Google Play before they try yours.
.tfworkout file and share it however you like: as an email attachment, or a download
link on your site (see Sharing your file).Want to see what a finished file can do? Download the sample workout and open it with Tabata Forge.
This page only builds a file for you to download. It doesn't save, store or upload anything: your workout, images and audio stay in your browser and go nowhere else. If you close or reload the page, your work is gone, so download the file when you're done and keep your own copy of it and of your source images and audio.
A checkbox cannot stop someone from hand-building a file without it. Tabata Forge warns people when a file with images or audio carries no copyright confirmation.
Each must be 5 seconds or shorter and 500 KB or smaller (MP3, OGG, WAV or M4A). Without them, Tabata Forge uses its built-in sounds.
A spoken welcome that plays before round 1, for example "Hi, I'm John, and this is my 5-minute workout. Buckle up, we start in 3, 2, 1…". The timer runs for exactly as long as the recording, your logo and name are shown, and listeners can skip it. It is not a round, so it is not counted in “Round 1 of N”. Tabata Forge adds no beeps or countdown to it, so put any “get ready” lead-in in your recording; round 1 then starts with the normal start sound. 60 seconds or shorter, 3 MB or smaller (MP3, OGG, WAV or M4A).
Short recordings of you encouraging people ("Keep it moving!"). During long rounds Tabata Forge plays one or two at random, starting 20 seconds into a round (or at the halfway point of a round shorter than 40 seconds) and then spread through the round. By default a round gets at most 1.5 cues for each minute of its length (listeners can change that in Settings), and at least one. If you add any, they replace the phone's own spoken phrases for this workout, so use a few different ones (each 15 seconds or shorter, 1 MB or smaller; MP3, OGG, WAV or M4A; up to 20). Rounds where you have turned motivation off stay quiet. A round with no fitting clip is quiet too. Short clips of a few seconds work best: Tabata Forge waits for at least 10 seconds of quiet after any voice before playing one, and never plays a clip that would run past the end of its round, so long clips mean fewer cues.
Use When so a line only plays where it makes sense, for example "Last round only" for "Last one, give it everything!". Use Only in rounds named to tie a clip to a kind of round, for example "Footwork" for "Keep moving, don't stop!" (it matches every round with that name). Leave both on "Any" for a line that works anywhere.
Each round can have text that the phone speaks, your own recorded voice clip, or both (your clip plays first, then the spoken text). Rounds can also have a background image or animated GIF. Background tips: use a portrait image, 1080 × 2400 px (or any 9:20 shape; at least 720 × 1600). It fills the whole screen and is cropped from the centre to fit, so keep faces, text and the main action in the middle. The timer text is drawn over the top-left, so avoid fine detail there. For GIFs, 720 px wide or less keeps files small.
Tabata Forge never downloads anything itself, so you share the .tfworkout file the same way you would any
other file. These three ways work well, easiest first. We don't host or distribute creator files; the file is yours
to share.
No setup at all. Your audience taps the attachment on their Android phone and chooses Tabata Forge to open it. If Android asks Just once or Always, they should pick Just once. The same works from most messaging apps, and people can also email the file to themselves.
Suggested wording for your email or post:
My 10-Minute Heavy Bag Workout is attached. On your Android phone: tap the attached file, then choose "Tabata Forge" to open it (pick "Just once" if asked). It adds the workout to Custom Workouts, ready to run. Don't have the app? https://play.google.com/store/apps/details?id=com.katr.tabataforge
Put the file on your site and link to it. There is one server setting to get right: your web server
must label .tfworkout files with their type. Many servers send no type for an unfamiliar file name, and
a phone's browser then sees a zip inside and saves it as name.tfworkout.zip. Tabata Forge can't open
that. If a download arrives with .zip on the end, this is the cause.
Add the setting for your server (ideally to the folder that holds your workout files):
Apache (a file named .htaccess in that folder):
AddType application/vnd.tabataforge.workout .tfworkout
<IfModule mod_headers.c>
<FilesMatch "\.tfworkout$">
Header set Content-Disposition "attachment"
Header set X-Content-Type-Options "nosniff"
</FilesMatch>
</IfModule>
nginx (inside the matching location block, then reload):
location /workouts/ {
types { application/vnd.tabataforge.workout tfworkout; }
add_header Content-Disposition attachment;
}
IIS (web.config):
<configuration><system.webServer><staticContent> <mimeMap fileExtension=".tfworkout" mimeType="application/vnd.tabataforge.workout" /> </staticContent></system.webServer></configuration>
Then test it on a phone: download the link in Chrome, and check the file keeps the name
.tfworkout and that Tabata Forge is offered when you tap it. Test with a fresh download; Android
remembers the type of a file it has already saved. Website builders and file-hosting services (Google Drive,
Dropbox, GitHub Pages and similar) often set their own types and don't let you change them, so check before you
rely on one.
For people who aren't technical, send them to one page that says what to do. Copy this, change the names, and put it next to your file:
<!doctype html> <html lang="en"><head><meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>My 10-Minute Heavy Bag Workout</title></head> <body style="font-family:sans-serif;max-width:32rem;margin:2rem auto;padding:0 1rem"> <h1>My 10-Minute Heavy Bag Workout</h1> <p>A guided interval workout for the Tabata Forge app (Android).</p> <p><a href="workouts/my-workout.tfworkout" download>Download the workout</a></p> <ol> <li>Install <a href="https://play.google.com/store/apps/details?id=com.katr.tabataforge">Tabata Forge</a>.</li> <li>Tap the download, then choose <b>Tabata Forge</b> to open it (<b>Just once</b> if asked).</li> </ol> </body></html>
.zip: your server isn't labelling the file (see option 2).A .tfworkout file is a zip archive (MIME type application/vnd.tabataforge.workout)
containing:
workout.json images/ img1.png, img2.gif, ... (PNG, JPG, GIF, WebP) audio/ c1.mp3, c2.wav, ... (MP3, OGG, WAV, M4A)
workout.json holds schemaVersion (currently 1), session, and
rightsAffirmation. Image references inside the session are images/<name>; clip ids are
custom:<file name in audio/>. Each round may set motivationEnabled (default true).
The optional session.motivationClips list holds clipId, scope (ANY, FIRST_ROUND,
NOT_FIRST_ROUND, MIDDLE_ROUNDS, LAST_ROUND or NOT_LAST_ROUND) and an optional roundLabel.
session.introClipId names a clip whose kind is INTRO.
| Limit | Value |
|---|---|
| Total size | 40 MB |
| Rounds | 200 (each 1 to 3600 seconds) |
| Image or GIF | 5 MB each |
| Sound effect | 5 seconds, 500 KB |
| Voice clip | 30 seconds, 2 MB |
| Intro clip | 60 seconds, 3 MB |
| Motivational clips | up to 20 per workout; each a voice clip (this page asks for 15 seconds, 1 MB) |
| Names | 100 characters; spoken text 500 characters |
| Links | http or https only, 500 characters |
Tabata Forge checks every file when it is opened and rejects anything that does not follow these rules. File types are identified by their contents, not their names.