A TypeScript framework for making short films that run in the terminal.
Install · Example · Model · Features · Usage
npm install featuretteimport { defineFilm, play } from 'featurette';
const film = defineFilm({
title: 'Signal',
minSize: { columns: 60, rows: 18 },
voices: {
process: { fg: '#f6ae1b', speed: 55 },
},
});
film.scene('wake', async ($) => {
await $.clear();
await $.type('hello?', {
at: $.center().up(1),
voice: 'process',
});
await $.beat(800);
await $.type('oh. you ran me.', {
at: $.center().down(1),
voice: 'process',
});
});
await play(film);A film is an ordered set of async scenes. Inside each scene, $ is the stage: write text, compose layers, schedule effects, and respond to input. Featurette handles rendering, timing, playback, and terminal cleanup underneath.
scenes, beats, voices, and layers
terminal-aware drawing and motion
cinematic and developer-native effects
input, interruption, and live resize
transcript and reduced-motion fallbacks
deterministic scene rendering for tests
ESM and CommonJS
zero runtime dependenciesSee USAGE.md for composition, effects, motion, input, playback flags, and testing.
Licensed under the MIT License.