Time Table Maker by Success Minded logoTimetable Maker by Success Minded

Export formats, and how each one is generated

Last updated: 13 August 2026

The Timetable Maker exports in four formats. They are not equivalent, and picking the wrong one is the most common cause of a disappointing download. This page documents exactly what each format contains, how it is produced, and where it falls short.

Every export is generated inside your own browser. Nothing is uploaded to a server, and no copy of your timetable is created anywhere but on your device. The mechanics of that are covered on where your timetable is stored.

Which format to choose

FormatWhat it actually isBest forCan be re-imported?
PNGA raster image of the gridSharing, phone wallpaper, pasting into a documentNo
PDFThat same image placed on one A4 pagePrinting, pinning to a wallNo
CSVA flat table of events, one row eachSpreadsheets, importing into other softwareNo
JSONThe complete saved state of your timetableBackup, moving between browsers or devicesYes

The short version

JSON is the only format that survives a round trip. PNG and PDF are pictures, and CSV is a one-way summary. If you want to be able to keep editing a timetable later — on another machine, or after clearing your browser — export JSON and keep the file. Everything else is a final output, not a backup.

PNG

The PNG is produced by rendering the schedule grid to a canvas with html2canvas 1.4.1, then saving that canvas as a PNG. Specifics:

The font used in the export is whichever script stack is active in Settings → Font. That stack is applied to the grid on screen, and the export captures what it sees — so what you see in the editor is what lands in the image.

Limits of PNG

PDF

The PDF is built from the same 2× canvas, which is then placed into a document generated by jsPDF 2.5.1. Specifics:

Limits of PDF

CSV

The CSV is generated directly from your event list, not from the rendered grid. It contains six columns, in this order:

ColumnContents
DayFull English weekday name, e.g. Monday
TitleThe event title
StartStart time, formatted to your current 12 or 24-hour setting
EndEnd time, same formatting
NotesThe optional note field, empty if unused
ColorThe event colour as a hex value, e.g. #FF6B5C

Rows are sorted by day of week first, then by start time. Every field is wrapped in double quotes, and any quote inside a value is escaped by doubling it, so titles containing commas or quotation marks stay intact. Lines end with CRLF.

The file is written as UTF-8 with a byte-order mark. That leading BOM is deliberate: without it, Microsoft Excel misreads accented and non-Latin characters when opening a CSV directly. With it, a timetable in Korean, Spanish or Arabic opens correctly on a double click.

Limits of CSV

One difference worth knowing about

CSV and JSON contain every event you have created. PNG and PDF contain only what is drawn on the grid.

Usually those are the same set. An event that runs past the edge of your visible hours — starting before your day begins, or ending after it finishes — is drawn clipped to the window, so it still appears in a PNG or PDF, marked with a dashed edge to show it continues beyond the grid.

An event lying entirely outside your visible hours cannot be drawn at all, so it will be missing from PNG and PDF while still appearing in CSV and JSON. When that happens the tool now says so beneath the grid, with a count. Widen your start and end times in Settings to bring those events back into view before exporting.

JSON

The JSON export is a complete, indented copy of the timetable's saved state — the same structure held in your browser's storage. It is the only lossless format, and the only one the tool can read back in.

{
  "events": [
    {
      "id": "elz4k9x2a7",
      "title": "Organic Chemistry",
      "day": "Monday",
      "start": 570,
      "end": 660,
      "desc": "Lab block, room C2",
      "color": "#0FB5A8"
    }
  ],
  "settings": {
    "start": "07:00",
    "end": "21:00",
    "interval": 60,
    "fmt": "24",
    "font": "auto",
    "days": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
  }
}

Field reference

Each object in events:

KeyTypeNotes
idstringGenerated identifier, unique within the file
titlestringDefaults to Untitled if left blank
daystringFull English weekday name
startnumberMinutes from midnight, not a time string. 09:30 is 570
endnumberSame units. Must be greater than start
descstringThe note field, empty string if unused
colorstringHex value from the eight-colour palette

The settings object:

KeyTypeAccepted values
startstringFirst hour shown, HH:MM
endstringLast hour shown, HH:MM
intervalnumberRow size in minutes: 15, 30 or 60
fmtstring"12" or "24"
fontstringauto, latin, cjk, arabic, indic or cyrillic
daysarrayWhich weekdays are visible, in display order

Note that a multi-day event is stored as one separate event object per day, each with its own id. Adding a class that runs Monday, Wednesday and Friday creates three entries, not one recurring entry.

Importing a JSON file

Use Import JSON in the download menu. The file is checked for a top-level settings key and an events key; if either is missing you will be told the file is not a timetable JSON, and nothing changes.

Import replaces, it does not merge

A successful import overwrites your current timetable entirely. It does not combine the imported events with what is already on screen, and there is no undo. If the timetable currently open matters to you, export it first.

Because the format is plain, documented JSON, you can also generate these files from your own scripts — building a term timetable from a spreadsheet, for instance — and import the result. Keep start and end as minutes from midnight and the file will load.

If an export fails

PNG and PDF depend on two libraries loaded from a CDN. If either is still downloading when you press the button, you will see a short message saying the library is still loading — wait a second and try again. On a very slow or filtered connection those libraries may not arrive at all, in which case CSV and JSON still work, since they are built without any external code.

Anything else that looks wrong is worth reporting. Current defects and how they get fixed are listed on known issues, and fixes are recorded in the changelog.