OK I figured this out... for my future 'goldfish memory' self and for any one else out there who may find this useful, here's how to do it. Assuming the following:
- you have Photoshop and a lot of JPGs in nested folders (in my case a WordPress Media folder of 10yrs with 10,000 images).
Image Processor doesn't work for nested folders, so instead, we will use Batch process. First you have to record the actions the batch process will follow. Open any random image, specifics don't matter, as long as it's a large JPG - this is just to "teach" PS what to do.
Go to window > Actions > Create New Set > Create New Action and press the record button and do the following:
- File > Automate > Fit Image [ set constrain sizes e.g. 1200 x 1200 ]
AND make sure you tick "Don't Enlarge", so it will skip smaller images.
Note. the sizes here are the maximum that the resize will affect, it won't resize anything that is already smaller than this and secondly, these are maximum sizes, not the actual size it will crop to. Example; if you set 1200 x 1200 and your image is 1920 x 960, it will retain the existing profile because it crops proportionally - it won't "square it" at 1200 x 1200. This is important because in my case, I already had a huge range of sizes and profiles, and I only wanted to set the maximum a portrait or landscape size will be.
Still in action record mode: Save As > set the "Image Options Quality" (I set mine to 6 = 60% ish, which will drastically reduce the file size when saved)
Still in action record mode: Close the image (File > Close)
Now stop the recording - you should have three actions.
Fit Image
Save As
Close
Now for the fun part - go to File > Automate > Batch.

A) On the left side (called "Play"), you need to select the Set you created, then the Action folder you made where your actions are stored.
B) Select the Source as Folder and then choose the top level folder. In my case, I selected my "-uploads" folder (see original question) because I want PS to iterate through all of the sub folders, years and months.
C) Next there are four options, (see screenshot) I've ticked them as No \ YES \ YES \ YES
Also, ensure to select " Log Errors to File" - and select a location - so we don't get interruptions.
In the Right Side "Destination" Make sure you select Save and Close, then tick "Override Action "Save As" Commands.
Leave everything else as it is. NOTE: this will OVERWRITE your original images - so you may wish to make a backup.
Now you are ready to run it. If you have thousands of images like me, it will take time, so go and have a swim ;-) paint the roof or watch telly with your cat.
Sadly, there is no "success" message when complete - yes, I expected a "congratulations" and fake screen fireworks, but maybe I'm showing my age here!
To check the outcome, simply navigate to the file folder and check the time stamp and image sizes (in Widows you can activate the column "date modified"). If they correspond with date/time when you ran it, they're processed successfully.
Another annoying thing is there's no "resume" function if it encounters an issue. Several times, the batch process borked for some unknown reason and I had to restart it. However one plus is it will skip all the images it's already done so should be a bit faster. I left this to run for a few hours and like magic it's all done!
Hope this helps someone!