Yeah, @AppsTrader, in my example I declared the property as a hash in go.property() but when I sent the property value via factory.create() I sent it as a string. It should have been like this:
factory.create("#factory", nil, nil, { image = hash("bullet2") })
IMPORTANT: With my suggested solution you should have one sprite. Not many as in your screenshot. The purpose of this line:
msg.post("#sprite", "play_animation", { id = self.image })
Is to tell the sprite component to change which image to use from the atlas you assigned to your sprite.