Back to the catalogue

Bad Apple

Bad Apple!! with ASCII, CRT, particle, and silhouette render modes

Install in Astra

In Astra, open Plugins and search for:

bad-apple

Don’t have Astra yet? Get Astra

Details

Updated
2026-08-19
License
MIT
Status
Grandfathered until 2026-12-15 06:00 UTC

Being listed means these bytes were published by the repository shown and passed the registry’s automated checks. It is not a sandbox, not a security review, and not an endorsement.

About

Bad Apple

The Bad Apple!! animation, rendered as ASCII, CRT phosphor, particles or silhouette, behind the Astra interface.

What it does

Plays a 1-bit black-and-white animation as a background effect in the Astra window, at low opacity by default so it reads as texture rather than a video. Four renderers are included:

ModeWhat you see
ASCIICharacters from one of four sets — blocks █▓▒░, braille dot matrix, classic @#*=:., or katakana rain
CRTCanvas with scanlines, phosphor glow and VHS jitter
ParticlesLit pixels spawn particles that drift and fade
SilhouetteClean black and white with an accent glow

The frame data is a pre-extracted 1-bit RLE stream (ui/frames.bin, ~3 MB) — there is no video decoder involved, which is what makes it cheap enough to run behind a working interface.

What it needs

Nothing at run time — the frames and audio are inside the bundle. No network, no account.

tools/extract_frames.py is included for regenerating frames.bin from a video file (it needs opencv-python and numpy), but you only need it if you want a different animation or a different resolution.

Capabilities it asks for, and why

CapabilityWhat it allowsWhy this plugin asks
ui_contributionsThe plugin may add its own surfaces to the Astra windowThe background effect is a UI contribution
dom_accessThe plugin's JavaScript runs inside the Astra window, with access to the page: your conversations on screen, and every other plugin's interfaceDrawing behind the interface means drawing in the interface

dom_access is a high-risk capability, and Astra will say so before installing. A plugin that has it can read what is on your screen. There is no way to paint a background effect into a window without running code in that window; if that trade is not worth an animation to you, it should not be, and you should not install this.

The code that runs in your window is ui/bad-apple-bg.js, ui/renderer.js and ui/bad-apple-player.js. Nothing else.

Configuration

SettingDefaultMeaning
Render Modeasciiascii, crt, particles, silhouette
Background Opacity0.150.05–1.0. Above ~0.3 it competes with the text
ASCII Character Setblocksblocks, braille, classic, katakana
Color Modemonomono, accent (follows your Astra theme), green, amber
Loop PlaybacktrueRestart at the end

A note on the media

ui/bad-apple.mp3 and ui/frames.bin are derived from Bad Apple!! — the Touhou-derived song and the shadow-art music video built on it. Those are other people's work, and this example redistributes them for demonstration. The MIT licence on this directory covers the code, not the audio or the frame data. Before publishing a fork of this plugin anywhere, sort that out.

Build it yourself

cd examples/bad-apple
cargo build --release
astra-plugin build

To regenerate the frame data from your own video:

pip install opencv-python numpy
python tools/extract_frames.py bad-apple.mp4 ui/frames.bin        # 120x90
python tools/extract_frames.py bad-apple.mp4 ui/frames.bin 160 120 # sharper, costlier

Files

  • src/main.rs — the backend: declares the effect and serves its config.
  • ui/ — the renderers, the frame data and the audio.
  • tools/extract_frames.py — video to 1-bit RLE.
  • icon.svg — the store icon, hand-drawn SVG.

MIT licensed (the code — see the media note above).

Releases

0.1.22026-08-19

Protocol 1

Permissions

  • dom_access High riskThe author says: “Draws the animation behind the Astra interface, which means running its own JavaScript inside the Astra window”
Files and provenance
TargetSizeSHA-256
linux-x64bad-apple-0.1.2-linux-x64.astraplugin7.3 MB3882a3ba6ee1302870751b6970682064fed2a3e4639cef8f88e4026898eea2b5
windows-x64bad-apple-0.1.2-windows-x64.astraplugin6.8 MB0d45cb270c0ea4de9deab6139cbbc3979c8d9b4cbdc5313983bcd4534863fc2f

Provenance

Repository
mihailinl/AstraPlugins
Release repository
mihailinl/AstraPlugins
Tag
bad-apple-v0.1.2
Commit
ff566e83f89133c182dec9eb7ae19d94f858f498
Older releases (2)

0.1.12026-08-19

Protocol 1

Files and provenance
TargetSizeSHA-256
linux-x64bad-apple-0.1.1-linux-x64.astraplugin7.3 MB93e466cdce1633f599f2e73f677fda80db941dcd52d086ef03496420b76c4baa
windows-x64bad-apple-0.1.1-windows-x64.astraplugin6.8 MB48e48f03d1169ba768552a4e03c57679976b1ca4891ac8798127431972401f1c

Provenance

Repository
mihailinl/AstraPlugins
Release repository
mihailinl/AstraPlugins
Tag
bad-apple-v0.1.1
Commit
5b5d2605961b54271b74304f6988972edb83d598

0.1.02026-08-10

Protocol 1

No SHA-256 — this release cannot be installed.

Files and provenance
TargetSizeSHA-256
linux-x64bad-apple-0.1.0-linux-x64.astrapluginNo SHA-256 — this release cannot be installed.
windows-x64bad-apple-0.1.0-windows-x64.astrapluginNo SHA-256 — this release cannot be installed.

Provenance

Repository
mihailinl/AstraPlugins
Release repository
mihailinl/AstraPlugins
Tag
bad-apple-v0.1.0
For the publisherThis listing has to be bound to a repositoryBind by 2026-12-15 06:00 UTC · cutover 2026-10-16 06:00 UTCHow

Migration notice, round 2.

The binding deadline is 2026-12-15 06:00 UTC.

Binding needs a Minice account that owns Astra, a binding line committed to the repository, a new tag, and a moderator’s approval of the first binding.

A release that is not held and passes the automated checks is published at once, marked not reviewed by moderators.

From 2026-10-16 06:00 UTC, a held release waits until this listing is bound.

Binding happens in the plugins panel; there is nowhere else to do it. Repository bindings