A Guide to Changing Program Icons

A guide to icons on the V5

When you upload a program to the V5, you may notice that the icon for it corresponds with what program you used to code it in. But you’ve probably wondered at some point how to change the icon, right? Well here’s a guide on how to do so, wether you code in PROS or VexCode (but it still requires PROS either way).


How it works

But first, let’s get into how it works. VexOS looks for the icon you specify in the .ini file uploaded to the brain when uploading your program to it. Every time your program is uploaded it sends a .ini file with info about your program (icon, description, what editor it was written in, etc.) and the actual program itself (a .bin file), both with the name of slot_# (with the # being the program slot). By changing the icon filename in the .ini file, you can use any icon you please.

The icons

From what I found by brute-forcing all (reasonable) filenames, there are 18 total icons that are usable by programs. All of them are in the format USER9##x.bmp, with ## representing the icon. And before you ask – no, you can’t upload custom images to use. Not by uploading it to the flash and not by using an SD card and pointing to it. However, there still are some interesting icons to use. Here’s a quick breakdown of them:

USER901x.bmp: MATLAB logo
USER902x.bmp: PROS logo
USER903x.bmp: Robot Mesh Studio logo
USER910x.bmp: Robot Mesh Studio logo (again)
USER911x.bmp: Robot Mesh Studio C++ logo
USER912x.bmp: Robot Mesh Studio Blockly logo
USER913x.bmp: Robot Mesh Studio Flowol logo
USER914x.bmp: Robot Mesh Studio JavaScript logo
USER915x.bmp: Robot Mesh Studio Python logo
USER920x.bmp: Default file logo
USER921x.bmp: VexCode logo
USER922x.bmp: VexCode Blocks logo
USER923x.bmp: Default file logo
USER924x.bmp: Default file logo
USER925x.bmp: VexCode Python logo
USER926x.bmp: VexCode C++ logo
USER999x.bmp: Default file logo (A file with </> in it)
Any other filename: A question mark

View Images

USER901x
bmp
USER903x
USER910x
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
USER924xbmp
bmp
bmp
bmp
Unknown

So it looks like the 0s are for other types of programming, the 10s are for Robot Mesh Studio, and the 20s are for VexCode. No valid icons for anything beginning with VEX either.

Now, how to actually change the icons. If your program is already written in PROS it is very simple, if it’s written in something else, it becomes a bit more involved.


PROS

Just simply run

prosv5 upload --icon  '[icon filename]' 

to get the icon you desire when uploading.

Anything else (VexCode, etc)

For uploading anything else, you need a way of modifying the .ini file. The easiest way I could think of was modifying the PROS-cli to get it to upload binary files along with .ini files. Technically, you could upload a modified version of an .ini file every time you upload a file with

prosv5 v5 upload-file [slot_#.ini]

but you’d have to manually create and maintain that. Not to mention that it has to change depending on what slot you upload it to. So instead what I’ve done is modify the PROS-cli a little to get it working with .bin files only. Here’s a link to my fork of it. Just install it and it will run as normal. This way you can just run

prosv5 upload --icon  '[icon filename]' --target v5 build/Program.bin

replacing build/Program.bin with your binary file. For example, in VexCode now you just have to run make every time and then the above command to upload the program with the custom icon. I’ve only tried this method with VexCode, so if there’s any problems with anything else just post them.


If anyone knows any other valid icons, I’d be interested in hearing what they are. Have fun changing those icons!

19 Likes

The fork of PROS-cli I made has some extra options for uploading, too. You can also specify a description with --description and change the program type with --ide. You can run

prosv5 upload --help

for a list of all commands you can run to edit the metadata.

5 Likes

Cool writeup, thanks for sharing!

On SQL’s 15" robot this year (control code written in VEXcode text), I switched between red/blue/programming skills auton by commenting or uncommenting a couple of #define directives, changing the name of the project, then recompiling and uploading to a different slot on the brain. A cool extension of that approach would be to assign each version of the program a different icon - maybe RobotMesh for blue-side auton, VEXcode for red-side auton, and “generic icon” for programming skills - and then write a script to automate the build process for all three versions, so instead of changing several lines in various places I could just run a single command to compile and upload everything.

Shame I don’t have access to our robots at the moment - would be fun to try and implement that…

6 Likes

Very cool! At least in the early days, there are other icons available. What number range did you try? You could use this, a bash script, and the screenshot command in the CLI to automate figuring out what icons are available.

BTW, feel free to open PRs on the CLI for the changes you made. I told the team to expect them.

7 Likes

This makes me wonder if the images are stored on the same filesystem as programs (probably not), and, if so, would it be possible to push a bmp to that filesystem and use it? PROS’ hot/cold linking already makes use of storing a cold image in that filesystem, so storing files that don’t follow the SLOT_#.[ini, bin] format isn’t completely out of the range of possibilities.

icons are fixed and not stored in the user program filesystem.
Please don’t use program icons for other ide’s at big competitions, it just makes the job of the techs harder when you say something didn’t work during a match and want help.

10 Likes

Yeah, I made a script that went through the 900s and that’s how I got those. I tried the others, but I just realized that I did it wrong and forgot the “x” so I’m rerunning it for 0-1000 right now. There’s some super interesting ones now that I’m seeing them. I’ll post tomorrow. Also thanks for the idea for the screenshots, I’m using that method too. Before I was just making a pause so I could take pictures and then press enter. I’ll also be making a pull request soon. PROS-cli is pretty much the only way to interact with the V5 through command line, so there’s a lot of cool features that can still be added.

4 Likes

Side note to all of this: this was probably one of the best written vex forum posts I’ve seen in a while. Maybe make a guide on how to make a guide? This will be very useful for people that are new to the forums to make this space a lot more productive.

5 Likes

Okay here are all the files for real this time (and in better detail):

USER000x.bmp: VEX logo
USER001x.bmp: A cool looking X
USER003x.bmp: A slice of pizza
USER010x.bmp: Clawbot
USER011x.bmp: Robot head
USER012x.bmp: Power icon
USER013x.bmp: Planet with two moons and a ring
USER027x.bmp: Alien
USER029x.bmp: UFO with alien in it
USER901x.bmp: MATLAB logo
USER902x.bmp: PROS logo
USER903x.bmp: Robot Mesh Studio logo
USER910x.bmp: Robot Mesh Studio logo (again)
USER911x.bmp: Robot Mesh Studio C++ logo
USER912x.bmp: Robot Mesh Studio Blockly logo
USER913x.bmp: Robot Mesh Studio Flowol logo
USER914x.bmp: Robot Mesh Studio JavaScript logo
USER915x.bmp: Robot Mesh Studio Python logo
USER920x.bmp: Default file logo
USER921x.bmp: VexCode logo
USER922x.bmp: VexCode Blocks logo
USER923x.bmp: Default file logo
USER924x.bmp: Default file logo
USER925x.bmp: VexCode Python logo
USER926x.bmp: VexCode C++ logo
USER999x.bmp: Default file logo (A file with </> in it)
Any other filename: A question mark

View Images

bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
bmp
Unknown

That’s about all I could find, I even tried going through it all with the VEX prefix, too. And as for uploading your own, right now the answer is no. As I said before, I tried a normal upload of a bitmap to the flash and it didn’t work and with an SD card and it didn’t work. But libraries aren’t stored there, so there might be a way to upload stuff to wherever those are stored, but there’s currently no way to do that.

7 Likes

Thanks! I’ve just had a lot of free time and our team’s robot at our house, so I decided to experiment. This is my first guide I’ve posted, but maybe sometime soon I’ll write a guide for guides.

2 Likes