initial commit

This commit is contained in:
venus
2026-10-16 16:21:51 -05:00
commit 9485e8a2a8
39 changed files with 496 additions and 0 deletions
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 MiB

Executable
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env bash
WORK_DIR="$HOME/.config/scripts/live-earth-wallpaper"
OUTPUT_IMG_DIR="$WORK_DIR/images"
CLOUD_SRC_IMG="$OUTPUT_IMG_DIR/clouds-alpha.jpg"
OUTPUT_IMG_ULTRAWIDE="$OUTPUT_IMG_DIR/DP-2-render.png"
OUTPUT_IMG_EDP="$OUTPUT_IMG_DIR/eDP-1-render.png"
OUTPUT_IMG_ULTRAWIDE_NATIVE="$OUTPUT_IMG_DIR/blue-ULTRAWIDE-native.png"
# OUTPUT_IMG_STARFNATIVE="$OUTPUT_IMG_DIR/stars-native.png"
STARS_FILE="/usr/share/xplanet/stars/BSC"
STATIONS_TLE="$WORK_DIR/stations.tle"
STATIONS_FINAL="$WORK_DIR/stations"
ULTRAWIDE_RES_NATIVE="3840x1080"
ULTRAWIDE_RES_FINAL="10240x2880"
source functions.sh
cd "$WORK_DIR" || exit 1
# TODO make this sometihng like fetchCloudFile or something and have it return a path (functionally)
downloadClouds "$CLOUD_SRC_IMG" || exit # Download latest clouds image or exit with error
# downloadStations # Download latest stations data
cacheImages "eDP-1" "$OUTPUT_IMG_DIR" # Check for existing images and cache them if they exist
cacheImages "DP-2" "$OUTPUT_IMG_DIR" # Check for existing images and cache them if they exist
# TODO handle errors here
# Render Planets Centered on Tuscaloosa
# TODO udpate with current long and lat
# xplanet -num_times 1 -output "$OUTPUT_IMG_ULTRAWIDE" -geometry "3840x1080" -config xplanet.conf -longitude -87.56 -latitude 33.21
PROJECTIONS=(
azimuthal
mollweid
peters
polyconic
)
RENDER_FLAGS=(
-num_times 1
-config xplanet.conf
-longitude -87.56
-latitude 33.21
-radius 40
-range 2
# -projection "${PROJECTIONS[1]}"
-starfreq 0.005
-starmap BSC
-base_magnitude 12
# -separation moon:45
# -body moon
# -glare 30
)
# TODO: make the rest of this functional and handle errors better, maybe even make it a function that takes the monitor name and resolution as args
echo Rendering wallpapers...
monitors="$(connectedMonitors)"
if [[ "$monitors" == *"DP-2"* ]]; then
echo "Ultrawide monitor detected"
# Render the ultrawide wallpaper at native resolution and then supersample it to a higher resolution for better quality while maintaining relative starmap
xplanet "${RENDER_FLAGS[@]}" \
-output "$OUTPUT_IMG_ULTRAWIDE_NATIVE" \
-geometry "$ULTRAWIDE_RES_NATIVE" \
-base_magnitude 12 \
&& echo render ultrawide native resolution wallpaper successful || exit 1 #echo Error: failed to render ultrawide wallpaper at native resolution
xplanet "${RENDER_FLAGS[@]}" \
-output "$OUTPUT_IMG_ULTRAWIDE" \
-geometry "$ULTRAWIDE_RES_FINAL" \
-background "$OUTPUT_IMG_ULTRAWIDE_NATIVE" \
&& echo render ultrawide wallpaper superize successful || exit 1 # echo Error: failed to render ultrawide wallpaper at super resolution
noctalia msg wallpaper-set DP-2 "$OUTPUT_IMG_ULTRAWIDE" 1>/dev/null && echo ultrawide wallpaper set successfully || echo Warning: not connected to monitor DP-2, wallpaper will not be set.
fi
if [[ "$monitors" == *"eDP-1"* ]]; then # TODO: technicall no if statement needed here, should be functional tho
echo "Builtin monitor detected"
# Render Builtin Wallpaper
xplanet "${RENDER_FLAGS[@]}" \
-output "$OUTPUT_IMG_EDP" \
-geometry "2560x1600" \
&& echo render builtin wallpaper successful || exit 1 # echo Error: failed to render builtin wallpaper
noctalia msg wallpaper-set eDP-1 "$OUTPUT_IMG_EDP" 1>/dev/null && echo builtin wallpaper set successfully || echo Warning: not connected to monitor eDP-1, wallpaper will not be set.
fi
# Remove tmp cached files if noctalia was able to set the new wallpapers successfully, otherwise keep the tmp files
# errorCheck=$?
# [[ "$errorCheck" -eq 0 ]] && cleanup
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 MiB

+1
View File
@@ -0,0 +1 @@
"3754b588a6126e9725838eb1480539d4"
+190
View File
@@ -0,0 +1,190 @@
<!doctype html>
<html lang="en">
<head>
<title>Live Cloud Maps - Free, near-realtime cloud maps of the whole Earth</title>
<link rel="shortcut icon" href="/favicon.png" />
<meta property="og:image" content="https://clouds.matteason.co.uk/og-image.png">
<meta property="og:image:alt" content="Live Cloud Maps">
<meta property="og:description" content="Free, near-realtime cloud maps of the whole Earth">
<meta name="description" content="Free, near-realtime cloud maps of the whole Earth">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Live Cloud Maps">
<meta name="twitter:image" content="https://clouds.matteason.co.uk/og-image.png">
<meta name="twitter:image:alt" content="Live Cloud Maps">
<meta name="twitter:description" content="Free, near-realtime cloud maps of the whole Earth">
<meta content="width=device-width, initial-scale=1" name="viewport" />
<style>
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;600&display=swap');
/* Reset */
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}
html {
min-height: 100%;
}
body {
min-height: 100%;
font-family: 'Plus Jakarta Sans', sans-serif;
font-weight: 300;
}
#image {
background-image: url(./images/4096x2048/earth.jpg);
background-size: cover;
background-position: center right;
background-repeat: no-repeat;
background-attachment: fixed;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
main {
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 60%;
background: rgba(0, 1, 12, 0.8);
background-blend-mode: multiply;
backdrop-filter: blur(10px);
padding: 100px;
padding-top: 200px;
box-sizing: border-box;
overflow-y: auto;
}
#content {
max-width: 600px;
color: white;
}
h1 {
font-size: 36px;
text-transform: uppercase;
letter-spacing: 0.2em;
margin-bottom: 1.5em;
}
p {
font-size: 24px;
margin-bottom: 1em;
line-height: 1.7em;
}
.button {
background: white;
font-size: 24px;
text-decoration: none;
color: rgba(0, 1, 12, 0.8);
padding: 0.6em 2em 0.7em 2em;
margin-top: 1em;
margin-bottom: 2em;
border-radius: 10000px;
font-weight: 600;
text-align: center;
text-wrap: balance;
line-height: 1.7em;
display: inline-block;
}
#github-icon {
width: 1em;
vertical-align: -0.09em;
margin-right: 0.3em;
margin-left: -0.5em;
}
.desktop-only {
display: inline;
}
.mobile-only {
display: none;
}
@media (max-height: 900px) {
main {
padding-top: 100px;
}
}
@media (max-height: 800px) {
main {
padding-top: 50px;
}
}
@media (max-width: 1024px) {
body {
background: rgba(0, 1, 12, 0.8);
}
#image {
background-image: url(./images/1024x512/earth.jpg);
width: 100%;
aspect-ratio: 2;
position: relative;
background-size: 100%;
background-position: top left;
background-attachment: scroll;
}
main {
width: 100%;
padding: 20px;
padding-top: 40px;
position: relative;
background: transparent;
}
h1 {
font-size: 24px;
}
p {
font-size: 16px;
}
.button {
font-size: 16px;
}
.desktop-only {
display: none;
}
.mobile-only {
display: inline;
}
}
</style>
</head>
<body>
<div id="image" aria-hidden="true"></div>
<main>
<div id="content">
<h1>Live cloud maps</h1>
<p>This service provides free, near real-time, high resolution cloud maps of the whole Earth.</p>
<p>You can use them for 3D modelling, 2D graphics or any other purpose, without payment.</p>
<p>Images are updated every three hours, using EUMETSAT data.
<span class="desktop-only">The background of this page shows the latest image.</span>
<span class="mobile-only">The top of this page shows the latest image.</span>
</p>
<a href="https://github.com/matteason/live-cloud-maps" class="button">
<svg xmlns="http://www.w3.org/2000/svg"
aria-hidden="true"
viewBox="0 0 512 512" id="github-icon">
<circle cx="256" cy="256" r="256" fill="currentColor" />
<path fill="#fff" d="M335 499c14 0 12 17 12 17H165s-2-17 12-17c13 0 16-6 16-12l-1-44c-71 16-86-34-86-34-12-30-28-37-28-37-24-16 1-16 1-16 26 2 40 26 40 26 22 39 59 28 74 22 2-17 9-28 16-35-57-6-116-28-116-126 0-28 10-51 26-69-3-6-11-32 3-67 0 0 21-7 70 26 42-12 86-12 128 0 49-33 70-26 70-26 14 35 6 61 3 67 16 18 26 41 26 69 0 98-60 120-117 126 10 8 18 24 18 48l-1 70c0 6 3 12 16 12z"/></svg>
Learn more and get the images
</a>
<a style="display: block;" href='https://ko-fi.com/matteason'><img height="362" style="border:0px; height:36px; display: block;" src="https://cdn.ko-fi.com/cdn/kofi1.png?v=3" alt="Buy Me a Coffee at ko-fi.com" /></a>
</div>
</main>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 MiB

+119
View File
@@ -0,0 +1,119 @@
#!/usr/bin/env bash
function downloadClouds() { #Download latest clouds image from matteason.co.uk if newer than the local copy exists
echo downloading latest cloud image if newer...
local sourceImage="${1:?Error output file not provided (arg 1)}"
local httpStatus curlStatus
local etagFile="${sourceImage}.etag"
if [ ! -d "${sourceImage%/*}" ]; then # If the source directory does not exist, return an error code
echo Could not find source image directory for clouds image
return 1
fi
# TODO return sample image if the source image does not exist, or if the download fails
# if [ ! -e "$sourceImage" ]; then # If the image path does not exist, return an error code
# echo Cloud source image path does not exist
# return 1
# fi
# Download the image saving the http status code and curl status code for error checking
httpStatus=$(curl -s --show-error -R \
--write-out "%{http_code}" \
--etag-compare "$etagFile" \
--etag-save "$etagFile" \
-o "$sourceImage" \
"https://clouds.matteason.co.uk/images/8192x4096/clouds.jpg" )
curlStatus="$?"
if (( curlStatus != 0 )); then # return an error code if curl failed to download the image
echo "Cloud image request failed, curl exit status: $curlStatus" >&2
return "$curlStatus"
fi
case "$httpStatus" in # Report the status of the download based on the HTTP status code returned by curl
200) echo "Cloud image successfully downloaded"; return 0 ;;
304) echo "Cloud image already up to date"; return 0 ;;
"") echo "Cloud image successfully downloaded or already up to date"; return 0 ;;
*) echo "Error: failed to download clouds image, HTTP status: $httpStatus" >&2; return 1 ;;
esac
}
function downloadStations() { # Download latest stations data from celestrak.org and format it to only include the names of the stations
echo downloading latest stations data...
curl -s --show-error -L -o "$STATIONS_TLE" "https://celestrak.org/NORAD/elements/gp.php?GROUP=stations&FORMAT=tle" && echo stations data downloaded successfully || echo Error: failed to download stations data
sed -i 's/\r//' "$STATIONS_TLE" #Strip carriage returns from file if they exist
# sed -n '1~3p' "$STATIONS_TLE" > "$STATIONS_FINAL" && echo stations data formatted successfully || echo Error: failed to format stations data
# sed -n '1~3p' stations.tle | sed 's/[[:space:]]*$//' > stations
sed -n '1~3p' stations.tle > stations
}
function connectedMonitors() { # returns list of connected monitors
monitors=$(hyprctl monitors -j | jq ".[].name")
echo "${monitors//$'\n'/ }"
}
function cacheImages() { # Validate that the images exist, cache them if they do, return a path to the temp image
# TODO make functional
local monitor="${1:?Error monitor name not provided (arg 1)}"
local imageDir="${2:?Error image directory not provided (arg 2)}"
local imagePath="$imageDir/$monitor-render.png"
if [ -e "$imagePath" ]; then # If the Image exists, move it to a temp file and set it as the wallpaper
echo image exists for "$monitor", caching old walpaper...
mv "$imagePath" "$imagePath.tmp"
noctalia msg wallpaper-set "$monitor" "$imagePath.tmp" 1>/dev/null && echo "$monitor walpaper cached" || echo "Warning: not connected to monitor $monitor, wallpaper will not be set."
# TODO return here
elif [ -e "$imagePath.tmp" ]; then # If temp exists but not the original, move temp back to original
# TODO report work
mv "$imagePath.tmp" "$monitor"
noctalia msg wallpaper-set "$monitor" "$imagePath.tmp" 1>/dev/null && echo "$monitor walpaper cached" || echo "Warning: not connected to monitor $monitor, wallpaper will not be set."
# TODO return here
else
echo Error: no previous image exists, using sample image instead
noctalia msg wallpaper-set eDP-1 "$imagePath/sample-render.png" 1>/dev/null || return 1
# TODO return 1 instead of exiting, and handle the error in the calling function
fi
# TODO handle this case
}
function old_cacheImages() { # Validate that the images exist and cache them if they do, otherwise use a sample image
# Noctalia must see an image path update in order to change the active wallpaper
# So set a tmp file with the current image, upodate to that tmp file, and then switch back once the image is rendered.
# TODO: only render monitors that currectly exist.
if [ -e "$OUTPUT_IMG_ULTRAWIDE" ]; then # Check for ultrawide image
echo ultrawide image exists, caching old walpaper...
mv "$OUTPUT_IMG_ULTRAWIDE" "$OUTPUT_IMG_ULTRAWIDE.tmp"
noctalia msg wallpaper-set DP-2 "$OUTPUT_IMG_ULTRAWIDE.tmp" 1>/dev/null && echo ultrawide walpaper cached || echo Warning: not connected to monitor DP-2, wallpaper will not be set.
elif [ -e "$OUTPUT_IMG_ULTRAWIDE.tmp" ]; then # If temp exists but not the original, move temp back to original
mv "$OUTPUT_IMG_ULTRAWIDE.tmp" "$OUTPUT_IMG_ULTRAWIDE"
else
echo Error: no builtin image exists, using sample image instead
noctalia msg wallpaper-set eDP-1 "test.png" 1>/dev/null || exit 1
fi
if [ -e "$OUTPUT_IMG_EDP" ]; then # Check for builtin image
echo builtin image exists, caching old walpaper...
mv "$OUTPUT_IMG_EDP" "$OUTPUT_IMG_EDP.tmp"
noctalia msg wallpaper-set eDP-1 "$OUTPUT_IMG_EDP.tmp" 1>/dev/null || exit 1
elif [ -e "$OUTPUT_IMG_EDP.tmp" ]; then # If temp exists but not the original, move temp back to original
mv "$OUTPUT_IMG_EDP.tmp" "$OUTPUT_IMG_EDP"
else # Use a smample image if no original or temp exists
echo Error: no builtin image exists, using sample image instead
noctalia msg wallpaper-set eDP-1 "test.png" 1>/dev/null || exit 1
fi
}
function renderWallpaper() {
NATIVE_RES="$1"
MONITOR_NAME="$2"
XPLANET_ARGS=$3
OUTPUT_RES="$"
}
function cleanup() { # Cleanup temp files if no errors occurred
rm "$OUTPUT_IMG_ULTRAWIDE.tmp"
rm "$OUTPUT_IMG_EDP.tmp"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

+1
View File
@@ -0,0 +1 @@
"62cff0f01c8d144e941dcdc63a84253d"
+1
View File
@@ -0,0 +1 @@
"3754b588a6126e9725838eb1480539d4"
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
View File
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

+18
View File
@@ -0,0 +1,18 @@
ISS (ZARYA)
POISK
CSS (TIANHE)
ISS (NAUKA)
FREGAT DEB
CSS (WENTIAN)
CSS (MENGTIAN)
HRC MONOBLOCK CAMERA
SZ-21 MODULE
DUPLEX
KNACKSAT-2
GXIBA-1
UITMSAT-2
LEOPARD
HMU-SAT2
PROGRESS-MS 34
TIANZHOU-10
SHENZHOU-23 (SZ-23)
+54
View File
@@ -0,0 +1,54 @@
ISS (ZARYA)
1 25544U 98067A 26286.43465595 .00005946 00000+0 11657-3 0 9991
2 25544 51.6321 74.9235 0006732 257.7935 102.2300 15.48850287590084
POISK
1 36086U 09060A 26286.43465595 .00005946 00000+0 11657-3 0 9999
2 36086 51.6321 74.9235 0006732 257.7935 102.2300 15.48850287586352
CSS (TIANHE)
1 48274U 21035A 26286.58038026 .00022176 00000+0 26300-3 0 9993
2 48274 41.4695 322.9239 0000414 91.3605 268.7281 15.60678231311658
ISS (NAUKA)
1 49044U 21066A 26286.43465595 .00005946 00000+0 11657-3 0 9997
2 49044 51.6321 74.9235 0006732 257.7935 102.2300 15.48850287586394
FREGAT DEB
1 49271U 11037PF 26285.63781208 .00012645 00000+0 17527-1 0 9993
2 49271 51.6488 7.7998 0942190 186.1418 172.7167 12.45203430239662
CSS (WENTIAN)
1 53239U 22085A 26286.58038026 .00022176 00000+0 26300-3 0 9996
2 53239 41.4695 322.9239 0000414 91.3605 268.7281 15.60678231288232
CSS (MENGTIAN)
1 54216U 22143A 26286.58038026 .00022176 00000+0 26300-3 0 9997
2 54216 41.4695 322.9239 0000414 91.3605 268.7281 15.60678231308040
HRC MONOBLOCK CAMERA
1 66052U 98067XS 26286.46245025 .03459387 12169-4 69110-3 0 9993
2 66052 51.6040 19.0232 0008645 329.1073 30.9439 16.30553028 56790
SZ-21 MODULE
1 66515U 25246C 26286.06481423 .00091945 10310-4 30828-3 0 9995
2 66515 41.4690 286.8938 0010791 158.2745 201.8564 15.89534023 52411
DUPLEX
1 66906U 98067XT 26286.59495366 .00071912 00000+0 52250-3 0 9994
2 66906 51.6245 47.4027 0004595 291.5860 68.4648 15.72692002 49227
KNACKSAT-2
1 67683U 98067YA 26286.55464863 .00099059 00000+0 70833-3 0 9990
2 67683 51.6259 53.9169 0009078 295.5456 64.4604 15.72896894 38827
GXIBA-1
1 67685U 98067YC 26286.64267861 .00152200 00000+0 84092-3 0 9991
2 67685 51.6208 49.9457 0010530 300.0478 59.9477 15.78570177 38881
UITMSAT-2
1 67686U 98067YD 26286.58140857 .00799493 32685-3 12049-2 0 9991
2 67686 51.6139 41.1435 0011791 320.9324 39.0835 16.03906447 38997
LEOPARD
1 67687U 98067YE 26286.61761830 .00445036 00000+0 16163-2 0 9990
2 67687 51.6208 49.8055 0011405 309.3308 50.6684 15.86729551 38803
HMU-SAT2
1 67688U 98067YF 26286.59839112 .00278409 00000+0 97593-3 0 9992
2 67688 51.6234 45.8802 0009171 302.4185 57.5932 15.87879434 38857
PROGRESS-MS 34
1 68837U 26093A 26286.43465595 .00005946 00000+0 11657-3 0 9993
2 68837 51.6321 74.9235 0006732 257.7935 102.2300 15.48850287587329
TIANZHOU-10
1 69049U 26102A 26286.58038026 .00022176 00000+0 26300-3 0 9996
2 69049 41.4695 322.9239 0000414 91.3605 268.7281 15.60678231310986
SHENZHOU-23 (SZ-23)
1 69180U 26113A 26286.58038026 .00022176 00000+0 26300-3 0 9994
2 69180 41.4695 322.9239 0000414 91.3605 268.7281 15.60678231307865
Executable
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# A testbed script for experimenting with rendering the live-earth-wallpaper.
# xplanet -num_times 1 -output "test-render.png" -geometry 2560x1600 -config xplanet.conf -origin moon -target earth
# xplanet -num_times 1 -output "test-render.png" -geometry 2560x1600 -config xplanet.conf -projection rectangular -origin moon -target earth
xplanet -num_times 1 -output "test-render.png" -geometry 2560x1600 -config xplanet.conf -projection rectangular -longitude -87.56 -latitude 33.21
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

+15
View File
@@ -0,0 +1,15 @@
# ~/.config/scripts/live-earth-wallpaper/xplanet.conf
[earth]
"Earth"
color={255,255,255}
map=./full-res-source/earth.png
night_map=./full-res-source/earth-night.png
cloud_map=./full-res-source/clouds-alpha.jpg
specular_map=./full-res-source/earthspec.png
cloud_gamma=0.7
cloud_threshold=20
twilight=12
# satellite_file=stations
[moon]
image=./full-res-source/moon.png
magnify=15