There are three different ways to upload custom images.
You need to have the OpenStack-CLI installed and configured.
Download an image you want to use, e.g. an Ubuntu cloud image.
After sourcing the openrc.sh you can easily upload your own image and use it right after, like this:
openstack image create --progress --private --disk-format=qcow2 --container-format=bare \
--property architecture=x86_64 --file noble-server-cloudimg-amd64.img "Ubuntu Noble"
Please refer to the official OpenStackClient documentation for the list of the supported parameters.
This overview contains a list of standard images sources.