from io import BytesIO

from requests import get
from PIL import Image, ImageDraw
from instaloader import *

L = Instaloader()

# Load Post instance
post = load_structure_from_file(L.context, '2017-10-01_18-53-03_UTC.json.xz')
# or post = Post.from_shortcode(L.context, SHORTCODE)

# Render caption
image = Image.open(BytesIO(get(post.url).content))
draw = ImageDraw.Draw(image)
color = 'rgb(0, 0, 0)'  # black color
draw.text((300,100), post.caption.encode('latin1', errors='ignore'), fill=color)

# Save image
image.save('test.jpg')