hntw/action-fx

Comic-strip marks (emanata, plewds, briffits...) as feedback effects for user actions. One file, no deps.

JavaScript

0

5 commits

updated Oct 2, 2026

See the code

See what people are saying

README

Action FX

Action FX: make every click hit like a comic book

An archive of comic-strip marks as feedback effects for user actions. One file, no dependencies, MIT, about 7 KB minified and gzipped. Most names come from Mort Walker's The Lexicon of Comicana (1980).

Live demo: https://hntw.github.io/action-fx/

effectthe markuse it foroptions beyond the shared ones
emanatasurprise linesa click or tapshape (ring, corners, point), count, length, width, gap, travel
plewdssweat dropsan error, a nervous momentcount, size
agitronsshake lineswrong password, invalid fieldlines, gap
briffitsdust puffssend, submit, take offcount, size, from (bottom, left, right)
solradsshine rayssuccess, unlocked, newcount, length, gap, width, sparkles
squeansdizzy starsloading, overloadcount, size
spurlsconfusion spiralnot found, nothing heresize, turns, width
waftaromswaft lineshot, fresh, just bakedcount, length, rise, width
grawlixescursing symbolsa playful errorcount, size, font
speedlinesmotion linesnext, go, move alongcount, length, gap, width, dir (right, left, up, down)

Shared options: scale, speed, color (auto = surrounding text color), fill (auto = page background), move (the element reacts), loop, seed, duration, reducedMotion.

<script src="actionfx.js" defer data-bind="button, .btn"></script>
<button data-afx="briffits" data-afx-from="left">Send</button>
ActionFX.bind('button', { effect: 'emanata', shape: 'corners' });
const h = ActionFX.play('squeans', el, { loop: true }); h.stop();
ActionFX.agitrons(field);                     // one shortcut per effect; ActionFX.click = emanata
ActionFX.draw(ctx, t, { effect, x, y, w, h }); // pure function of t (seconds), for video frames
  • index.html is the archive/demo page.
  • review/sheet.html + review/shot.sh render a contact sheet (rows = effects, ?fx=a;b:{"opt":1}).
  • review/mock.mjs runs every effect through draw() in node with odd sizes and modes to catch errors and NaNs.

Made for fun by Jamie Grove and Claude.

hntw/action-fx

Comic-strip marks (emanata, plewds, briffits...) as feedback effects for user actions. One file, no deps.

JavaScript

0

5 commits

updated Oct 2, 2026

See the code

See what people are saying

README

Action FX

Action FX: make every click hit like a comic book

An archive of comic-strip marks as feedback effects for user actions. One file, no dependencies, MIT, about 7 KB minified and gzipped. Most names come from Mort Walker's The Lexicon of Comicana (1980).

Live demo: https://hntw.github.io/action-fx/

effectthe markuse it foroptions beyond the shared ones
emanatasurprise linesa click or tapshape (ring, corners, point), count, length, width, gap, travel
plewdssweat dropsan error, a nervous momentcount, size
agitronsshake lineswrong password, invalid fieldlines, gap
briffitsdust puffssend, submit, take offcount, size, from (bottom, left, right)
solradsshine rayssuccess, unlocked, newcount, length, gap, width, sparkles
squeansdizzy starsloading, overloadcount, size
spurlsconfusion spiralnot found, nothing heresize, turns, width
waftaromswaft lineshot, fresh, just bakedcount, length, rise, width
grawlixescursing symbolsa playful errorcount, size, font
speedlinesmotion linesnext, go, move alongcount, length, gap, width, dir (right, left, up, down)

Shared options: scale, speed, color (auto = surrounding text color), fill (auto = page background), move (the element reacts), loop, seed, duration, reducedMotion.

<script src="actionfx.js" defer data-bind="button, .btn"></script>
<button data-afx="briffits" data-afx-from="left">Send</button>
ActionFX.bind('button', { effect: 'emanata', shape: 'corners' });
const h = ActionFX.play('squeans', el, { loop: true }); h.stop();
ActionFX.agitrons(field);                     // one shortcut per effect; ActionFX.click = emanata
ActionFX.draw(ctx, t, { effect, x, y, w, h }); // pure function of t (seconds), for video frames
  • index.html is the archive/demo page.
  • review/sheet.html + review/shot.sh render a contact sheet (rows = effects, ?fx=a;b:{"opt":1}).
  • review/mock.mjs runs every effect through draw() in node with odd sizes and modes to catch errors and NaNs.

Made for fun by Jamie Grove and Claude.

Languages

JavaScript

59.3%

HTML

36.6%

Shell

4.1%