Take and Scrape Your Own Screenshots
-
@herb_fargus
cool trick dude!just some suggestions for improvements in
runcommand-onend.sh
:-
Get the system and the rom from the arguments. system is arg 1 and rom is arg 3, as you can see here: https://github.com/RetroPie/RetroPie-Setup/blob/master/scriptmodules/supplementary/runcommand/runcommand.sh#L777
-
Get the most recent screenshot with tail.
-
Avoid error messages.
-
Platform independent (home directory not hardcoded to
/home/pi
). -
Set a variable to store the image directory (if you change your mind about where to store the images, you have to change only one line).
The script becomes like this:
#!/usr/bin/env bash system="$1" rom="$3" rom_bn="${rom##*/}" rom_bn="${rom_bn%.*}" imgdir="$HOME/RetroPie/roms/$system/images" # find the most recent RetroArch screenshot screenshot=$(find "$imgdir" -type f -name 'RetroArch*' 2>/dev/null | tail -1) # rename the recently taken screenshot to the rom name and copy into the images folder if [[ -n "$screenshot" ]]; then mv "$screenshot" "$imgdir/$rom_bn.png" rm -f "$imgdir"/*RetroArch* fi
-
-
@meleu Thanks! I tried earlier with the $rom variable but I forgot I had to initialise it so it didn't work, ill give your updated script a go.
-
@meleu yep it works, I've updated my original post with your latest code.
There are a few caveats:
-
If you for example take 5 screenshots while playing super mario world, then open up donkey kong, and then don't take a screenshot, the 4th super mario world screenshot becomes your donkey kong screenshot
-
If you take a new screenshot after scraping, it will overwrite the screenshot that is there and will automatically replace the screenshot for that game (which is kinda cool, but also can be a bad thing depending on how you look at it.)
-
-
@herb_fargus said in Take and Scrape Your Own Screenshots:
- If you for example take 5 screenshots while playing super mario world, then open up donkey kong, and then don't take a screenshot, the 4th super mario world screenshot becomes your donkey kong screenshot
Oh, I see. Maybe it's better to remove all the remaining screenshots after the last
mv
. I'll edit my post. -
@herb_fargus It's important to mention that this trick only works on the Raspberry Pi version (home directory is
/home/pi
). -
@meleu ah thats right too, perhaps if we use the $user variable like we did with the retropie manager that should address it?
-
@herb_fargus
I've just realized that the rom name has a full path filename! We can get the home directory from it:homedir=$(echo "$rom" | grep -o '\/home\/[^\/]*')
[EDIT: explaining the grep: the
-o
tells the grep to show only the matching pattern (and not the entire line); the regex means: the string "/home/" followed by anything different from "/" (which is the username).]updating my script on the post...
-
@meleu what about this?
#!/usr/bin/env bash system="$1" rom="$3" rom_bn="${rom##*/}" rom_bn="${rom_bn%.*}" # Find most recent screenshot taken screenshot=$(find "/home/$USER/RetroPie/roms/$system/images" -type f -print | grep 'RetroArch' | tail -n -1) #rename most recent screenshot to rom name *note after scraping if you take a screenshot again it will overwrite the original image mv "$screenshot" "/home/$USER/RetroPie/roms/$system/images/$rom_bn.png" # Remove every RetroArch screenshot except the most recent find "/home/$USER/RetroPie/roms/$system/images" -type f -name '*RetroArch*' -delete
-
@herb_fargus
I avoided the$USER
because I was never really sure when RetroPie/emulationstation is executing a command with the regular user or withsudo
. But now I checked here and it's the regular user (looked at thees_system.cfg
to see the runcommand calling line, nosudo
).I would suggest just some superfluous/cosmetic changes:
- use
$HOME
instead of/home/$USER
; - use a variable to store the image directory path instead type it 3 times (if you change your mind about where to store the images, you have to change only one line):
imgdir="$HOME/RetroPie/roms/$system/images"
- I put a
2> /dev/null
in thescreenshot
's variable find to avoid error messages. I did it because all the error messages when executingruncommand-on{start,end}.sh
scripts are logged inruncommand.log
. I used thatif
to check ifscreenshot
is not empty for the same reason. - the last
find
to delete the unwanted screenshots is fully OK for this application. But for other applications it would delete all the files that match the-name
pattern in the subdirectories too. I usedrm
with-f
because this option ignores nonexistent files, therefore no error messages if there is no screenshots to delete.
Updating my script again...
- use
-
@meleu typo:
rm -f "$imgdir/*RetroArch*
should be
rm -f "$imgdir"/*RetroArch*
I presume. There may be ways we can refactor it further as well
also is the print necessary?
-
@herb_fargus
Actually the double quotes comes in the end, otherwise some parsing problems can happen. Thanks for noting this.[EDIT: this doesn't work. Look the next posts...]
rm -f "$imgdir/*RetroArch*"
-
@meleu you should really test things before you say them authoritatively ;) quotes at the end doesnt work.
-
@herb_fargus
You're right... updated my script...
I deserve a downvote!
-
@meleu alright I've taken some of your changes and just tweaked it a bit, and modified the original post. It seems to be working with my tests.
There may have been a slight lag either because I was taking screenshots too fast or I exited before it could be saved properly so it saved a screenshot from a couple seconds earlier rather than my latest one, so I'll have to look into that a little further. If you don't take a ton in a short period of time it seems to work as intended.
Also if anyone else cares, if you set it to 16:9 in the retroarch.cfg your screenshots will also be 16:9 rather than 4:3
-
@herb_fargus
I was thinking about this trick again and realized one thing:When using this trick, the user can't get screenshots for any other purpose.
The
runcommand-onend.sh
will delete the screenshots.While we don't make a workaround for this, I think it would be appropriate to add this warning at the first post disclaimers.
-
@meleu They can as long as they change the screenshot directory to somewhere else other than the images folder within a rom folder.
-
This tutorial could make a great entry in the RetroPie Wiki! What do you guys think?
-
@hiulit perhaps once I've cleaned up the code a bit more, might even be able to make a module of sorts perhaps, idk. Id also like for 4.0 to be released before adding something like this.
-
@herb_fargus Yeah sure, no rush! Just thinking out loud. Great work, btw!
-
@meleu said
When using this trick, the user can't get screenshots for any other purpose.
If they change the screenshot directory, they are not using this trick. :-)
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.