wsjt-all 1.7.2
Automated plots and analysis from the WSJT-X ALL.txt file
Requires Python: >=3.8
Keywords: hamradio, WSJT, WSJT-X

<img align="right" height="350" src="https://github.com/user-attachments/assets/656d2b19-4ef9-41f8-9490-98db032a40c4"/> 

# wsjt_all [![PyPI Downloads](https://static.pepy.tech/badge/wsjt-all)](https://pepy.tech/projects/wsjt-all)
**A Python command-line tool to analyse WSJT-X 'all.txt' files**
## Purpose
The point of this tool is to make analysing the WSJT-X 'all.txt' files easier, avoiding having to open them with text editors, and providing various plots and statistical summaries. The 'all.txt' file produced by WSJT-X contains a wealth of information about your station's receive performance that is mostly untapped.

The software works with pairs of all.txt files (to compare overlapping sessions) as well as individual ones.

**Example use cases** include:
- Benchmarking your receive capability against a Web SDR
- Doing local A/B testing with two configurations, using a Web SDR as a stable reference (compare A vs Web SDR with B vs Web SDR at two different times, when you can't do A and B simultaneously)
- Look for patterns in decode rate over time
- Check if patterns apply to all decodes or just groups
- Make a change where you have to leave your screen, come back and see what happened to the decode rate (good for QRM hunting / elimination!)
- Just get a quick visual look at what's in your all.txt file! 

## More detail ...
For more detail on the motivation behind this project which *started* with A/B testing with a pair of all.txt files, have a look at this page:

[AB Testing with FT8](https://g1ojs.github.io/wsjt_all/docs/AB-testing-FT8.html).

## Features
**1) For a single 'all.txt' file:**
* Automatically parse an ALL.txt file and detect sessions of activity 
* Automatically produce the following plots for each session
    * decode rate (decodes / minute) across the session
    * SNR for each report for each callsign across the session
   
**2) For a pair of 'all.txt' files:**
* Automatically parse a pair (A,B) of ALL.txt files and detect sessions of activity that are common to both files
* Automatically produce the following plots for each session
    * number of callsigns decoded in A and B
    * number of decodes at A and B for each callsign
    * SNRs in A and B for simultaneous decodes
 
**For both use cases:**
 * Run as a batch process to process all historic sessions
 * Run 'live' to monitor a current & ongoing test
 * (Limited) plotting options

## Motivation
My own pesonal motivation here is to compare my reception performance, in a fairly dense urban/sub-urban location, with reception at a remote site (web SDR). To do this, I run two separate instances of WSJT-X, with one connected to the transceiver as normal, and the other receiving audio via a virtual cable from a web SDR running in a browser window. This results in a second ALL.txt file with a few sessions that overlap the sessions in the large 'main' all.txt file. Browsing these files to compare reception is not trivial, and getting a good overview of the differences is difficult - hence, this software.

I will probably develop this next to produce plots from *single* ALL.txt files, and produce more / different plots etc.

The questions I had in my mind, that I wrote this to try to answer, include:
 - At the basic level, how does my receive performance (All file A) compare to that of a 'good reference' (All file B): number of callsigns collected at each, comparison of SNR when both A and B receive the same callsign either simultaneously or within a specified time window.
 - How does that comparison change over time? Are signals fading in at A and out at B & vice versa? Is this true only for some callsigns and are the rest static or going the other way?
 - How variable is SNR at A, and at B?
 - What does SNR correlate with at A and B, if anything? (e.g. distance, bearing)
 - What's more meaningful, SNR or number of times a callsign is received over a time window?

## Outputs
[**Note**: *I have just uploaded V1.4 with the addition of single all.txt file processing, and need to update the section below a little*]

After you run the program, you will find a 'plots' folder in which you will find plots like this:

<img width="700" height="900" alt="3 573MHz-FT8 2025-08-09 2233 for 29 75 mins" src="https://github.com/user-attachments/assets/656d2b19-4ef9-41f8-9490-98db032a40c4" />

The very top of the figure shows the session information (this example was 80m late on a summer evening) with a Venn diagram-style ribbon showing the number of callsigns in each 'all.txt' file. In my case when producing this example, all.txt file A was generated by my usual station setup, and all.txt file B was generated by a second instance of WSJT-X connected to the audio from the Hack Green WebSDR.

In the upper plot, the markers represent each callsign detected in the session, and the marker position shows the number of times each callsign was seen within the session time window in each all.txt file. To allow visibility of markers that lie on top of each other, some random position errors are deliberately added. Markers lying on the X axis or Y axis were seen in only one of the all files.

In the lower plot, the markers represent each signal report (SNR in dB) found, plotting one 'all.txt' file against the other. Reports falling on the dashed black line are equal in SNR between the two files / reception configurations. Reports from a given remote callsign are shown as a collection by coloring them a specific (but random) colour per callsign, and by joining the markers with lines. Of course, there are typically far more callsigns than colours available, so colours are re-used across different callsigns. 

## Installation
Install with pip:
```
pip install wsjt_all
```

## Usage
There are currently four simple command line commands to use:

**wsjt_all** parses a single all file, automatically finding 'sessions' (defined time ranges covering reception of a single mode on a single band) and producing a timeline plot of decode rate and SNR.

**wsjt_all_live** analyses the very last session in the all files, and plots a live-updating plot covering the current time to 5 minutes ago. It will be blank if you are not currently running WSJT-X.

**wsjt_all_ab** runs the A/B comparison described above, automatically finding 'sessions' (defined time ranges covering reception of a single mode on a single band) and then automatically finding sessions that are common to both all files. A plot is produced and saved in the 'plots' folder for every common session.

**wsjt_all_ab_live** analyses the very last session in the all files, and plots a live-updating plot covering the current time to 5 minutes ago. It will be blank if you are not currently running two instances of WSJT-X as described above.

Note - I keep my all.txt files fairly small by archiving sections into other files, so if you have a single all file covering years of operation, you may have to edit it or wait quite a while for the plots!

## Configuration
The software uses a simple wsjt_all.ini file to locate the all.txt files and set a couple of options. If none exists, the software can create a template for you but you still need to edit it to specify the paths to the all files. The wsjt_all.ini file looks like this:
```
[inputs]
allA = C:\Users\drala\AppData\Local\WSJT-X\all.txt             
allB = C:\Users\drala\AppData\Local\WSJT-X - AltAB\all.txt

[settings]
session_guard_seconds = 300
live_plot_window_seconds = 300
show_best_snrs_only = N           
use_bandmode_folders = Y
```