I wrote a TamperMonkey script for adding a list of others sats over head on or neat an observations frequency to the bottom of observation pages.
It works using a new endpoint on my satnogs map server to let python handle the heavy lifting. Currently it just shows sats that are within 30Khz either side of the observation frequency using the current TLEs (I may add support for using old TLEs later)
I have plans to expand it to generate ikhnos like waterfalls that display all the other satellites on the waterfall.
Here is an example.
// ==UserScript==
// @name ObservationExtra
// @version 2026-08-21
// @description Add Other Sats on Freq Over Head to Satnogs Observations
// @author KD9KCK
// @match https://network.satnogs.org/observations/*/
// @icon https://www.google.com/s2/favicons?sz=64&domain=satnogs.org
// @grant GM.xmlHttpRequest
// @require https://cdnjs.cloudflare.com/ajax/libs/satellite.js/4.1.4/satellite.min.js
// ==/UserScript==
(async function() {
‘use strict’;
let obs = document.getElementById(“observation-info”).innerHTML.trim().split(“#”)[1]
let overhead = JSON.parse(await httpGet( “https://satnogs.jwgtechs.com/overhead_sats/”+obs))
let edgeTable = document.getElementsByClassName(“table table-sm table-borderless table-hover”)[0].tBodies[0]
const newRow = edgeTable.insertRow();
const label = newRow.insertCell();
label.classList.add(‘badge’)
label.classList.add(‘badge-secondary’);
label.innerHTML = “Other Sats On Freq Over Head”
const list = newRow.insertCell();
let mittle = “”
overhead.forEach(sat => {
mittle += “”+ sat + “”;
})
list.innerHTML = “” +mittle + “”
function httpGet(url) {
return new Promise((resolve, reject) => {
GM.xmlHttpRequest({
method: “GET”,
url: url,
onload: (response) => resolve(response.responseText),
onerror: (error) => reject(error),
ontimeout: (error) => reject(error)
});
});
}
})();

