Configuration Page
The configuration page is the home page of Braincandy (/). This is where you set up everything before starting a playback session. Every option is explained in detail below.
When you first arrive on the configuration page, a short audio jingle plays to welcome you. This is purely cosmetic and plays automatically.
Screen Layout
What it does: Determines how many media cells are displayed simultaneously during playback.
You can choose from 8 grid layouts:
| Screens | Grid Layout | Description |
|---|---|---|
| 1 | 1×1 | Single full-screen view |
| 2 | 2×1 | Two side-by-side panels |
| 3 | 3×1 | Three columns |
| 4 | 2×2 | Two rows, two columns |
| 6 | 3×2 | Three columns, two rows |
| 8 | 4×2 | Four columns, two rows |
| 9 | 3×3 | Three-by-three grid |
| 12 | 4×3 | Four columns, three rows |
Each layout option is displayed as a visual thumbnail showing the grid pattern. Click on any thumbnail to select it. The currently selected layout has a highlighted primary-colored border.
More screens means more media is loaded into each screen independently. Each screen has its own timer, skip button, back button, and favorite button.
Playback Speed
What it does: Controls how long each image or GIF is displayed before automatically advancing to the next item.
- Range: 1 second to 60 seconds
- Default: 10 seconds
- Adjustment: Drag the slider to set the desired interval
The speed setting applies to images and GIFs only. Videos and Redgifs play until they end naturally — once a video finishes, the next media item is loaded automatically.
The description text dynamically updates to show the current setting, e.g., "Each image/GIF will be shown for 10 seconds."
Pixelation
What it does: Applies a pixelation (blur) effect to all media during playback.
| Setting | Description |
|---|---|
| Enable Pixelation | Toggle switch to turn the effect on/off |
| Pixelation Level | Slider from 32 to 64 (lower = more pixelated, higher = less pixelated) |
When enabled, a live preview is shown using a sample image rendered on a canvas element. The preview updates in real-time as you adjust the level slider.
How Pixelation Works
The pixelation effect works by:
- Drawing the media at a very low resolution (determined by the pixelation level)
- Scaling it back up to the full display size with image smoothing disabled
- This creates a blocky, pixelated appearance
The effect applies to all media types: images, GIFs, videos, and Redgifs. Since Redgifs are now loaded as native <video> elements (instead of iframes), they fully support the pixelation filter.
Beat Meter
What it does: Displays an animated metronome during playback that oscillates at a configurable BPM (beats per minute) rate.
| Setting | Description | Default |
|---|---|---|
| Enable Beat Meter | Toggle to show/hide the beat meter during playback | On |
| Beep Sound | Toggle to play an audible beep on each beat | On |
| Speed Range | Dual-handle slider to set the minimum and maximum BPM | 30–240 BPM |
The BPM range slider goes from 10 BPM to 480 BPM in steps of 10. The minimum and maximum values are displayed below the slider.
Beat Meter Behavior During Playback
The beat meter doesn't just stay at a constant BPM — it follows an intelligent progression algorithm:
| Time Elapsed | Behavior |
|---|---|
| 0–30 seconds | Fixed at the minimum BPM |
| 30 seconds – 10 minutes | Gradually varies between minimum and mid-range BPM |
| 10 minutes | Event triggered: 10 seconds at maximum BPM, then 10 seconds at 0 BPM (rest), then 30 seconds of slow cooldown |
| 10–15 minutes | Full range BPM variations |
| After 15 minutes | Permanently uses the full BPM range with minimum gradually increasing over time |
| After 20 minutes | Minimum BPM floor increases by 20 BPM for every additional minute past 20 minutes |
The BPM value changes approximately every 30 seconds during normal operation.
The beat meter appears as a vertical bar on the right side of the player screen. A colored dot bounces up and down along the bar in sync with the current BPM. You can mute/unmute the beep sound directly from the beat meter component during playback.
Media Types
What it does: Filters which types of media are included in the session.
| Type | Description |
|---|---|
| Images | Static images (JPG, PNG, BMP, WebP, SVG, TIFF) |
| GIFs | Animated GIF files |
| Videos | Video files (MP4, WebM, OGG, MOV, AVI, MKV, FLV, WMV, 3GP) |
| Redgifs | Redgifs videos (loaded as native video via the Redgifs API v2) |
Each type has a toggle switch. You must have at least one type enabled — the last remaining enabled type cannot be disabled (its toggle becomes locked).
Media Sources
There are three ways to add media to your session. They can be used individually or combined.
Reddit Content
This is the primary media source for Braincandy. See the Media Sources guide for the complete breakdown of Reddit presets, subreddit input, sorting, time range, and mode settings.
Quick overview of the Reddit section:
- Reddit Presets — One-click buttons to add curated sets of subreddits (e.g., "General", "MILF", "Teen", "Amateur", etc.)
- Pornstar Presets — One-click buttons for specific pornstar subreddits (e.g., "Riley Reid", "Angela White", etc.)
- Subreddit Input — Manually type any subreddit name (supports comma-separated bulk input)
- Sort — Hot, Rising, Top, or Controversial
- Time Range — Past Hour, Past Day, Past Week, Past Month, Past Year, or All Time
- Mode — Source Rotation (round-robin across subreddits) or All Mixed (shuffled together)
Local Files
What it does: Allows you to load media files directly from a folder on your computer.
Click the "Pick Folder" button to open a folder picker dialog. Once you select a folder, Braincandy will:
- Recursively scan all files and subfolders
- Load all supported media files (images, GIFs, videos)
- Display the count of loaded files
The folder picker uses the File System Access API (showDirectoryPicker), which is only supported in Google Chrome and Microsoft Edge. Other browsers (Firefox, Safari) will display an error message.
Supported file formats:
- Images: JPG, JPEG, PNG, BMP, WebP, SVG, TIFF
- GIFs: GIF
- Videos: MP4, WebM, OGG, MOV, AVI, MKV, FLV, WMV, 3GP
Playlist Upload
What it does: Upload a playlist file containing URLs to online media.
Braincandy supports two playlist file formats:
| Format | Extension | Description |
|---|---|---|
| JSON | .json | Must contain images, gifs, and videos arrays with URL strings |
| XSPF | .xspf, .xml | Standard XML Shareable Playlist Format — <location> elements are parsed |
After uploading a valid file, a green success message shows how many media items were loaded.
Example JSON playlist format:
{
"images": ["https://example.com/photo1.jpg", "https://example.com/photo2.png"],
"gifs": ["https://example.com/anim.gif"],
"videos": ["https://example.com/clip.mp4"]
}
Start Session
At the bottom of the configuration page, you'll find two buttons:
Reset to Defaults
Resets all configuration options back to their default values:
| Setting | Default Value |
|---|---|
| Screens | 1 |
| Speed | 10 seconds |
| Beat Meter | Enabled, with beep sound, range 30–240 BPM |
| Pixelation | Disabled, level 4 |
| Media Types | All enabled (images, GIFs, videos, Redgifs) |
| Subreddits | None |
| Sort | Hot |
| Time | Past Day |
| Mode | Source Rotation |
This button is disabled when the current configuration already matches the defaults.
Start Braincandy
Clicking this button initiates the session. Here's what happens behind the scenes:
- Configuration is saved — Your current settings are saved to the Pinia store (which persists to localStorage) and the URL is updated with the encoded config
- Reddit content is fetched — If subreddits are selected, Braincandy fetches posts from Reddit's API using an OAuth2 proxy. A progress bar shows the loading status
- Local files and playlists are merged — Any local files or uploaded playlist items are combined with Reddit results
- Media type filter is applied — Items not matching your enabled media types are removed
- Media pool is shuffled — The combined pool is randomly shuffled using the Fisher-Yates algorithm
- Session state is initialized — Counters are reset, timers start, and initial media is assigned to each screen
- Navigation to player — You are redirected to the
/playerpage
Start Button Availability
The start button is disabled when:
- No media sources are available (no subreddits, no local files, no playlist)
- No media types are enabled
- A fetch is currently in progress (loading spinner is shown)
Progress Indicator
While Reddit content is being fetched, a progress bar and status text are displayed:
- The progress bar fills based on the number of subreddits processed out of the total
- The status text shows: "Loaded X of Y subreddit(s), Z media items loaded"
Error Handling
- If no media is found after fetching (e.g., empty subreddits), a red warning message appears: "No media found"
- If a rate limit is hit (Reddit blocks the request), a red error message is displayed and the start button remains enabled once media has been partially loaded
Next: Learn about the player interface in the Player Page guide.