inital commit

This commit is contained in:
Rekushi authored and GitHub committed 2026-10-25 22:54:32 +00:00
commit 8e155b599b
15 files changed
+711

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
# Flipnote Subtitle format, version 1
- File extension: `.fsrt`
- Encoding: UTF-8, with an optional UTF-8 byte order mark at the start
- Line endings: LF or CRLF (readers may also accept CR)
## Cue blocks
A file contains one or more cue blocks, separated by an empty line. A line
containing only spaces or tabs also counts as a separator.
Each block consists of:
1. A positive decimal sequence number.
2. A page range written as `start --> end`.
3. One or more non-empty lines of subtitle text.
Sequence numbers identify blocks for people editing the file. They do not
determine timing. Writers number blocks consecutively from 1; readers may
accept non-consecutive numbers and out-of-order blocks.
Sequence numbers may not exceed 9,007,199,254,740,991.
## Page ranges
Pages are animation frames, numbered from 1. Both ends of a range are included.
`3 --> 3` is valid and appears on page 3 only. Gaps between cues have no subtitle.
`start` and `end` must be positive decimal integers, with `end >= start`.
For compatibility with JavaScript readers, neither may exceed 9,007,199,254,740,991.
Readers must reject overlapping ranges. Adjacent ranges such as `1 --> 4` and
`5 --> 8` do not overlap.
Spaces and tabs around the page numbers and arrow are allowed. There are no
timestamps, frame-rate declarations or cue settings on this line. A reader
must not silently interpret an ordinary SRT timestamp as a page number.
Applications should check that all ranges fit their target Flipnote. Timing
depends on pages, so it follows the Flipnote when its playback speed changes.
## Text
Text is Unicode and is displayed literally. Tags such as `<b>` have no special
meaning. There is no escaping syntax, markup, positioning, font selection or
colour information. Blank lines delimit cues and cannot occur within text.
Leading and trailing spaces on non-empty text lines are preserved.
Text must be valid UTF-8; unpaired UTF-16 surrogates are not valid text.
Tabs are allowed. Other C0 control characters, except line endings, and DEL
are invalid. Applications may restrict characters or line lengths to fit their
fonts and display. They should report unsupported text rather than silently
discard it.
## Languages and media
One file is one language track. Language is not stored inside the file. A
filename can include a language code, for example `animation.ar.fsrt`, but
the importing application must let the user choose the language.
It may present the available files as separately selectable tracks rather
than assigning language codes to them.
An FSRT contains neither the animation nor its audio. It doesn't carry an
author identity, signature, account token or link to a particular PPM. The
user chooses the Flipnote it belongs to.
## Writer output
The reference writers sort cues by starting page, use consecutive sequence
numbers, put one space on each side of `-->`, and emit LF line endings with
one empty line between cues and one final newline. These choices keep diffs
readable; other accepted spacing and line endings remain valid.
## Reference parser limits
The JavaScript and Python implementations limit input and output to 1 MiB
(1,048,576 UTF-8 bytes), with a default maximum of 10,000 cues. These are
resource limits of the reference code, not additional fields in the format.
Applications can set lower page and cue limits. Invalid data must be reported
as an error rather than silently clipped, truncated or interpreted as HTML.