Aquarium Screensaver Simulator
{{ statusLine }}
{{ canvasSizeLabel }} canvas
Theme {{ themeLabel }} Profile {{ fishProfileLabel }} Fish {{ fishCount }} Direction {{ directionModeLabel }} Speed {{ speedValue.toFixed(2) }}x FPS {{ fpsTarget }}
fish:
{{ speedValue.toFixed(2) }}x
{{ bubbleRateValue.toFixed(2) }}x
{{ currentStrengthValue }}
{{ fishSizeScaleValue }}%
{{ bubbleSizeScaleValue }}%
{{ bubbleDriftValue }}%
{{ schoolingValue }}
{{ turbulenceValue }}
jellyfish:
{{ waterGlowValue }}
{{ cameraDriftValue }}
frames:
Metric Value Copy
{{ row.key }} {{ row.value }}
No chart-ready metrics are currently available.
Priority Director cue Rationale
{{ cue.priority }} {{ cue.cue }} {{ cue.rationale }}

        
:

An aquarium screensaver is an ambient motion loop in which fish cross the frame, bubbles rise, and the screen keeps moving without demanding attention. That kind of loop only feels calm when density, speed, lighting, and frame rate stay in balance, and this simulator lets you tune those tradeoffs before you leave the scene running on a display.

The package is built for visual tuning rather than marine realism. You can start from a reef, lagoon, or deep-water look, push the tank toward a sparse four-fish loop or a busier sixty-fish wall display, and keep a live preview on screen while the runtime metrics update around it.

That makes the tool useful for second monitors, reception desks, kiosks, waiting rooms, and stream backdrops where motion has to stay readable for a long time. A loop that looks rich for ten seconds can become distracting once captions, signage, or dashboard widgets sit on top of it, so the useful decision is not only how lively the tank feels but also how stable it stays.

The simulator also separates appearance from runtime health. A scene can look attractive at first glance while the measured frame rate drops, the quality scale compensates, or bubble activity becomes visually noisy. Seeing those signals together helps you decide whether you are building a calm background loop, a showcase display, or something in between.

It is equally important to be clear about the limit of the result. A smooth preview here does not say anything about aquarium care, fish welfare, or physically accurate water motion. The output is a stylized browser scene whose job is to help you pick and document a screensaver profile.

Everyday Use & Decision Guide:

The default setup is a good first pass because it sits near the middle of the tool's tuning range: reef theme, mixed fish, bidirectional flow, eighteen fish, moderate current, moderate turbulence, two jellyfish, and a 45 FPS target. Use that scene as your baseline before you chase a moodier or busier look, since the director cues are easiest to interpret when you know what the balanced starting point feels like.

  • Start with Theme, Fish profile, and Swim direction before touching the deeper controls. Those three choices establish mood and motion faster than any later polish slider.
  • Raise Fish count and Swim speed only until the tank stops feeling empty. If text or signage will sit on top of the preview, keep Bubble rate and Camera drift lower than you would for a decorative wall display.
  • Watch Tank Metrics after every big change. If Measured FPS falls well below Target FPS or Quality scale drops from 100%, the device is compensating and the scene may not hold up on a larger screen.
  • Treat Tank Director as a tuning coach, not a score. A cue such as Stabilize swim lanes or Trim motion character means the heuristics think movement is getting busy; it does not mean the tank has failed.

The chart tab is another place where people overread the output. It compares the current values of runtime signals such as active fish, active bubbles, measured FPS, and quality scale; it is not a timeline of what happened over the last minute. If you want a calm loop, trust the preview first, then use the metrics and cue text to confirm that the current frame is stable enough to keep.

Once the scene feels right, run one fullscreen pass, then export the metrics or JSON so the same playback profile can be recreated later.

Technical Details:

Each frame is generated from live scene state rather than from prerecorded video. Fish objects carry position, velocity, size, color, and wobble offsets; bubbles carry rise speed, sway, radius, and opacity; jellyfish drift on a separate upward path; haze particles add low-contrast depth. The preview canvas is redrawn from that state every animation tick, which is why the scene can respond immediately to both motion controls and ambience toggles.

The major controls change different parts of that state. Swim speed multiplies fish and bubble movement, Current strength adds a shared horizontal push, Schooling strength pulls fish toward a common lane, and Turbulence injects jitter and extra wobble. Bubble size, Bubble drift, Water glow, Motion trail, plants, haze, light rays, and seabed style do not all change the same thing; some alter movement, while others mainly change how much visual texture and persistence the frame carries.

Runtime management is built in as well. The package targets 30, 45, or 60 FPS, measures the achieved frame rate once per second, and adjusts an internal Quality scale when the device runs far below or comfortably near the target. The preview loop is also stopped when the page is hidden and restarted when it becomes visible again, which keeps the scene from burning cycles in a background tab.

Three recommendation slots in Tank Director come from compact heuristic scores rather than from fluid simulation. Those scores are computed as follows:

flowStress = currentStrength+turbulence-schooling turbulenceLoad = bubbleRate*bubbleDrift100*bubbleSizeScale100 cinematicLoad = cameraDrift+lightRaysBonus+hazeBonus
Tank Director heuristic logic
Cue group Trigger Possible outputs
Swim lanes flowStress >= 92, or alternating direction above 1.80x; low-energy warning when flowStress <= 20 and speed is below 0.85x Stabilize swim lanes, Increase lane energy, or Hold formation balance
Motion character turbulenceLoad > 1.9 or Camera drift above 74; sparse-motion warning when turbulenceLoad < 0.7 and Bubble rate is below 0.60x Trim motion character, Add ambient movement, or Keep movement readable
Ambience Depth warning when both Light rays and Water haze are off and Water glow is below 34; stacked-effects warning when cinematicLoad > 92 and Water glow is above 76 Lift ambience depth, Ease showcase intensity, or Polish display mood
Primary runtime outputs
Output field Format What it tells you
Status line Swimming or Paused Whether the preview loop is currently advancing frames
Target FPS 30, 45, or 60 The requested rendering cadence after the slider is normalized
Measured FPS Integer frames per second What the device is actually sustaining in the current scene
Quality scale Percent How much the runtime has downscaled or restored visual load to stay near target
Aquarium Signals Chart Current-value bar chart A snapshot comparison of the first numeric runtime metrics, not a history graph
Tank Director Three cue rows with rationale Priority-ordered guidance on lane stability, motion density, and ambience stacking
JSON payload Structured params and runtime block A record of the chosen settings plus live counts such as active fish and active bubbles

Comparisons are only fair when the display context stays similar. Canvas size, fullscreen state, and device performance all affect the rendered workload, so a scene that feels stable in a small preview may behave differently when the same tank is stretched across a larger panel.

Step-by-Step Guide:

Use this sequence when you want a reproducible scene rather than a quick visual guess.

  1. Open Tank Preview with the default scene and note the summary badges. You should start with a running tank, eighteen fish, mixed profile, bidirectional motion, and a 45 FPS target.
  2. Set Theme, Fish profile, and Swim direction first. Those controls establish color language and directional feel before you start solving density or performance problems.
  3. Adjust Fish count, Swim speed, and Bubble rate until the tank has the right amount of motion. After each major change, glance at Measured FPS and Active bubbles in Tank Metrics.
  4. Open Advanced and tune Current strength, Schooling strength, Turbulence, Camera drift, Motion trail, and the ambience toggles one cluster at a time. If the preview suddenly feels messy, you will know which cluster caused it.
  5. Review Aquarium Signals Chart and Tank Director. If the chart shows weak performance or the cue text asks you to stabilize lanes or trim motion, back off speed, current, or bubble load before adding more effects.
  6. Use Pause, Reset, and Enter fullscreen for the final display check, then export Tank Metrics or JSON when the fullscreen run looks right on the target screen.

Stop when the preview mood, runtime metrics, and director cues all agree with each other.

Interpreting Results:

The outputs that matter most are the live preview, Measured FPS, Quality scale, and the three Tank Director cues. A good result is not the busiest tank; it is a scene where motion reads clearly, the runtime stays close to target, and the heuristic guidance does not keep pointing to the same problem.

  • Trust a cue when its rationale matches what you see. High current, low schooling, and heavy turbulence genuinely do produce more chaotic swim paths because that combination drives the same lane-stability score the tool reports.
  • Do not overread the chart. The bars are current signal levels, not a playback history, so they answer "what is happening now?" rather than "what happened over time?"
  • Use fullscreen as the verification step. If a larger canvas changes Measured FPS, Quality scale, or bubble density enough to alter the feel, the smaller preview was only a partial check.

A calm result still needs one last look on the real display. If the fullscreen pass looks more frantic or more empty than expected, tune against the runtime metrics again before you save the profile.

Worked Examples:

Lobby loop with the default baseline. Leave the opening scene unchanged: reef theme, mixed fish profile, bidirectional motion, eighteen fish, speed 1.00x, Bubble rate 0.90x, Current strength 35, Schooling strength 35, Turbulence 28, and two jellyfish. Tank Director resolves to Hold formation balance, Keep movement readable, and Polish display mood, while Tank Metrics reports a 45 FPS target. This is the package's best neutral comparison point because the scene is active without pushing the heuristic warnings.

Busy showcase profile that needs trimming. Switch to Midnight deep, choose alternating flow, raise speed to 2.20x, set Current strength to 70, Schooling strength to 15, Turbulence to 40, Bubble rate to 1.60x, Bubble drift to 150%, Bubble size to 150%, Camera drift to 80, and Water glow to 80 with both haze and light rays on. The director flips to Stabilize swim lanes, Trim motion character, and Ease showcase intensity. That combination may still be useful for a short decorative burst, but it is a poor fit for signage because the motion layer is competing with anything placed over it.

Quiet loop that looks too flat from a distance. Use Shallow lagoon, leftward flow, ten fish, speed 0.60x, Current strength 0, Schooling strength 10, Turbulence 12, Bubble rate 0.30x, Bubble drift 80%, Bubble size 90%, turn both haze and light rays off, and drop Water glow to 25. The cue stack becomes Increase lane energy, Add ambient movement, and Lift ambience depth. The tool is not saying the scene failed; it is saying the loop may feel lifeless on a larger screen and needs a bit more motion or depth to read well at distance.

FAQ:

Does this simulate a real aquarium?

No. The package models stylized fish, bubbles, jellyfish, haze, and lighting cues for display design. It does not model species behavior, tank chemistry, filtration, or real underwater physics.

Why can Measured FPS differ from Target FPS?

Target FPS is the requested cadence after the slider is normalized to 30, 45, or 60. Measured FPS is what the current device, canvas size, and effect load are actually sustaining, and the runtime may reduce Quality scale when performance slips.

What does the chart actually show?

The bar chart compares the current numeric runtime metrics pulled from Tank Metrics, such as active fish, active bubbles, target FPS, measured FPS, and quality scale. It does not record a time history.

Are my scene settings sent to a server?

No tool-specific backend or upload path is present in this package. Scene generation, metric assembly, and JSON export are handled in the browser.

Why did the fullscreen check change the feel of the tank?

Fullscreen changes the available canvas size, which can change visual density and performance. The package also relies on browser fullscreen behavior, so leaving fullscreen or switching away from the page changes the rendering context you are evaluating.

Glossary:

Aquarium simulator glossary
Term Meaning in this package
Schooling strength How strongly fish are pulled toward a shared swim lane
Motion trail How much of the previous frame visually lingers into the next one
Quality scale The runtime's adaptive load setting used to protect frame rate
Measured FPS The frame rate the current device is actually rendering