Some tips (that will not change the time needed to render the images twice) :
Ren'py let you have dynamic almost everything. Therefore, for all the common scenes, you can just have things like :
Code:
default gender = "male"
[...]
label whatever:
scene expression "images/[gender]/thisScene.jpg"
or like :
Code:
default gender = "male"
image thisScene = "images/[gender]/thisScene.jpg"
[...]
label whatever:
scene thisScene
while having both a "images/male" and "images/female" folders.
For the generic text changes, like "he/she", you can go for :
Code:
init python:
class GenderStrings( renpy.python.RevertableObject ):
@property
def he( self ):
return "he" if gender == "male" else "she"
@property
def him( self ):
return "him" if gender == "male" else "her"
[...]
default gender = "male"
# You can have a smaller name, obviously
define textSwitch = GenderStrings()
label whatever:
"Yes [textSwitch.he]'s a good cadet."
And when the scenes are gender specific, you can have those kind of switch :
Code:
label whateverGeneric:
[...]
jump expression "scene{}152".format( gender.title() )
label sceneMale152:
[...]
jump commonAgain
label sceneFemale152:
[...]
jump commonAgain
Like I said, it don't change the fact that you'll have to make and render the scenes twice, but it really limit the extend time needed to write the code.
All this not being said as a "you need to do it", but since you already thought about it, if you want to give it a try, at least in private with placeholder to have a idea of the time needed, here's how to do it with Ren'py.
Honestly, your game already offering the possibility to have gay interactions, it's probably the best one for a male/female MC option. You don't have to add scenes or "romance" options, just to double them.