Files
animated_wallpaper/config.js
T

177 lines
8.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Wallpaper background config.
*
* Properties:
* theme - Active palette theme. One of the keys in window.THEMES
* (default 'ash'). The matching CSS file is loaded at
* startup.
* language - UI / i18n language code (default 'en').
* timeFormat - Moment.js-compatible format string for the clock.
* debug - If 1, the right-side debug panel is shown.
* units - Object with 'temperature' ('C' or 'F').
* location - Geographic coordinates for sun/moon calculations. Used
* by SunCalc (https://github.com/mourner/suncalc). Object
* with 'lat' (latitude, -90 to +90) and 'lon' (longitude,
* -180 to +180). Positive lat = north, positive lon = east.
* Optionally add 'label' (string) to override the
* reverse-geocoded city name.
* Note: the height grid is axis-aligned (N up); terrain
* matches the 8-mode square mosaic and straight flights
* with fetch=N. Heights: Copernicus DEM via terrarium
* tiles (z9, ~200 m), fetched once per session.
* terrain - 3D ground from real elevation data. Object:
* enabled - true (default) / false = flat plane.
* exaggeration - vertical scale factor on the DEM
* (default 8; 1 would be physically
* true and nearly invisible at this
* horizontal scale).
* weatherSim - If true, ignore open-meteo and cycle through
* ['sunny','cloudy','stormy','night'] automatically every
* weatherSimInterval ms. Useful for A/B testing every
* theme without waiting on the API.
* weatherSimInterval - Sim cycle period in ms (default 30000).
* orbit - Figure-eight flight (Bernoulli lemniscate) around
* CONFIG.location instead of a straight drift. The
* eight's self-crossing sits exactly on the configured
* coordinate. Each time the aircraft crosses that point
* a new random orientation is picked and blended in
* over one lobe (spline through the crossing). Object:
* radiusKm - lobe tip reach from the centre in km
* (~13 km per tile at z11/48deg N).
* Clamped (~190 km) so tips + fog horizon
* fit inside the 43x43 tile mosaic.
* clockwise - travel direction along the eight.
* reorient - random re-aim at every crossing
* (default true; false keeps the bearing).
* Set to null (or remove) for the straight-line flight.
* fog - Ground fog / distance haze. Object with 'distanceKm'
* (visibility range at which terrain fully blends into
* a milky haze; default 120). false/0 disables fog.
* clouds - Vertical extent of the cloud deck in world units
* (1 unit = ~13 km at zoom 11; camera flies at y=2.2).
* Object with 'top' and 'bottom'. Default keeps the
* deck a bit below flight altitude.
* tiles - All downloads (street tiles, elevation grid, last
* weather payload, geo label) live permanently in
* IndexedDB and are never re-fetched once cached; a
* warm cache = fully offline rendering. Set
* expireDays (number > 0) to re-fetch street tiles
* periodically (e.g. 90).
*
* Time format tokens (subset):
* YYYY 4-digit year (2026)
* YY 2-digit year (26)
* MMMM full month name (October)
* MM month with leading zero (10)
* DD day with leading zero (07)
* HH 24-hour hour with zero (18)
* hh 12-hour hour with zero (06)
* mm minute with leading zero (14)
* ss second with leading zero (25)
* a am/pm lowercase (pm) - long form
* A AM/PM uppercase (PM) - long form
*/
window.CONFIG = {
theme: 'ash',
language: 'en',
timeFormat: 'DD. MMMM, YYYY ‒ HH:mm:SS',
debug: 0,
units: {
temperature: 'C'
},
// Data attribution at the bottom of the info box (auto text based on
// the enabled layers). false = ausgeblendet.
credits: true,
// Internal 3D resolution scale (0.3..1, default 1). Lower values
// render the clouds/map shader at reduced resolution and upscale
// via CSS - use it if fps is low (GPU-bound) despite a quiet CPU.
renderScale: 1,
location: {
// Latitude and longitude for sun/moon calculations
// Passau (vorher: Muenchen 48.1374/11.5755, Innsbruck 47.2692/11.4041)
lat: 48.5667,
lon: 13.4319
},
weatherSim: false,
weatherSimInterval: 30000,
// Alles Downloads (Strassenkacheln, Hoehengitter, Wetter-JSON,
// Geo-Label) bleibt dauerhaft im IndexedDB — kein erneuter
// Download. expireDays (Tage, >0) reaktiviert periodisches
// Auffrischen der Strassenkacheln.
tiles: {
expireDays: null,
// true = Kachel-Raender + N/S + x/y-Koords in die Boden-Textur
// malen (Debug-Orientierung). Aus = saubere Karte.
debug: false
},
// Boden-Bildquelle: 'satellite' = ESRI World_Imagery (Luftbild, ohne
// Beschriftung), 'streets' = ESRI World_Street_Map (mit Ortsnamen).
// Beide dauerhaft gecacht (eigener Cache- Praefix pro Stil).
ground: {
style: 'satellite'
},
// Achterkurs um location (lat/lon), ueberschneidungspunkt genau auf
// der Koordinate. null/entfernen = gerade Flugbahn.
orbit: {
radiusKm: 60, // Lappenspitze: max. Abstand vom Zentrum
clockwise: true,
reorient: true, // Zufalls-Ausrichtung an jedem Kreuzungs-Durchflug
// Langsames vertikales Wogen innerhalb der Flugband 15-35 km:
// Mitte 25 km (~1.93 Welt-Einheiten), amp = halbes Band
// (10 km ~ 0.77); harte Klemme ueber/unter die Bandgrenzen.
// periodS Sekunden pro Zyklus, tilt = Reaktion der Kamera-Nase
// auf Steig-/Sinkrate. enabled: false = konstant 25 km.
altBob: { enabled: true, amp: 0.77, periodS: 90, tilt: 0.3 }
},
// Bodennebel: Distanz-Haze. distanceKm = Sichtweite bis vollständige
// Nebelsaettigung (false/0 = aus).
fog: {
distanceKm: 120
},
// 3D-Boden aus echten Hoehendaten (Copernicus DEM, terrarium-Kacheln).
// enabled: false = flache Ebene. exaggeration: vertikale Ueberhoehung
// (1 = real, unsichtbar; default 8). wireframe: true = Mesh-Kanten
// als orange Linien zusaetzlich einblenden (Debug).
// nightLights: NASA-VIIRS-Stadtlichter-Layer, der ab Sonnenuntergang
// ueber ~1 h in die Tageskarte geblendet wird (dunkler Boden,
// leuchtende Staedte). Einmaliger Fetch (~49 Kacheln), persistent
// gecacht. false = kein Lichtoverlay, nachts bleibt die normale
// Textur deutlich heller (nur sanft abgedimmt).
// carLights: fahrende Lichter auf Autobahnen (OSM/Overpass-Kurven,
// nachts additiv ueber dem Gelaende). JSON einmalig, persistent gecacht.
// cityLights: Siedlungslichter — OSM-Ortsknoten (city/town/village/
// hamlet) als leicht gelbliche Glow-Punkte, ab Daemmerung statisch;
// je groesser die Siedlung (place-Klasse + population-Tag), desto
// mehr und hellere Punkte. Eine Overpass-Abfrage, persistent gecacht.
// Daten (c) OpenStreetMap-Mitwirkende, ODbL.
terrain: {
enabled: true,
exaggeration: 10,
wireframe: false,
nightLights: false,
carLights: true,
cityLights: true
},
// Tagessimulation: true = 24h-Zyklus wird in cycleSeconds durchlaufen
// (Sonne steigt im Osten, Mittag im Sueden, Untergang im Westen).
// false = echte Sonnen-/Mondposition via SunCalc.
day: {
simulation: false,
cycleSeconds: 20
},
// Wolkendecke in Welt-Einheiten (1 unit ~ 13 km bei Zoom 11;
// Kamera fliegt auf y=2.2). Decke etwas unter Flughohe.
clouds: {
top: 0.9,
bottom: -0.3
},
};
// List of available themes. The key is the theme id (used in config.theme),
// the value is the CSS file name. Add a new theme by adding a new entry here
// and dropping the corresponding CSS file in the same directory.
window.THEMES = {
'ash': 'ash.css',
'gruvbox': 'gruvbox.css',
'nord': 'nord.css'
};