https://community.libre.space/t/observation-14707468-marina-98293/15148
> Download as satnogs.csv (2026-08-07 09:37:xx UTC)
> Take the parts starting with the string: 87 BF 54
> there are missing lines for the sequences: 19 13 00, 19 15 00, 19 16 80, 19 18 80
> there are repair parts starting with string 87 BF 94 and 87 BF D4 to replace the
> missing lines / sequences.
> (Details are under analysis.)
> right_sequence.txt
> only_payload.txt
$ cat only_payload.txt | tr -d ' ' > space_cut.txt
$ cat space_cut.txt | tr -d '\r\n' > oneline.txt
$ cat oneline.txt | xxd -r -p > marina.jpg
Marina jpg Automatic experiment
The process of generating JPG images has now become almost entirely automated. I conducted
experiments focusing on lines starting with "87BF54" where the total amount of data is small
and confirmed that these methods allow for 100% generation into JPG images. I will explain
the sequence of steps here. Use the most recent satnogs.csv file. It is necessary to perform
a little form of formatting on the intermediate files output from each of the following stages.
----------------------------------------------------------------------------------------------
[extract1.rb] ... Extract lines starting with "87BF54" from satnogs.csv.
> File.open("extract1.txt", "w") do |out|
> File.foreach("satnogs.csv") do |line|
> out.puts line if line.include?("87BF54")
> end
> end
$ ruby extract1.rb > 60811ma1.sh
$ sh 60811ma1.sh
----------------------------------------------------------------------------------------------
[sequence1.rb] ... Rearrange the lines in pairs of "[i]80,[i]00" to match
the area outlined in red in the figure above.
> for i in 0..0x0b2
> printf("grep 87BF5400841B00000007A7CB63A...%02X extract1.txt | head -2 >> sequence1.txt\n", i)
> end
$ ruby sequence1.rb > 60811ma2.sh
$ sh 60811ma2.sh
----------------------------------------------------------------------------------------------
[reverse1.rb] ,,, Swap the top and bottom lines of each pair changing
from "[i]80,[i]00" to "[i]00,[i]80". Check the [i] sequences for all lines.
In particular, verify the presence of FFD8 in the first line and FFD9 in
the last line. After making the corrections, rename the file from "sequence2
.txt" to "reverse1.txt" and save it.
> lines = File.readlines("sequence1.txt")
> File.open("sequence2.txt", "w") do |file|
> lines.each_slice(2) do |pair|
> pair.reverse_each { |line| file.print line }
> end
> end
$ ruby reverse1.rb > 60811ma3.sh
$ sh 60811ma3.sh
----------------------------------------------------------------------------------------------
[reverse2.rb] ... Trim the beginning and end of each line, and extract the core data
range from all lines.
> File.open("reverse2.txt", "w") do |out|
> File.foreach("reverse1.txt") do |line|
> out.puts line.chomp[58, 256]
> end
> end
$ ruby reverse2.rb > 60811ma4.sh
$ sh 60811ma4.sh
----------------------------------------------------------------------------------------------
[one_line1.txt] ... Edit the FFD8~FFD9 range in reverse2.txt into a single line and convert it.
$ tr -d '\n' < reverse2.txt > one_line1.txt
$ cat one_line1.txt | xxd -r -p > marina.jpg