Doesn’t seem to work for me though. ChatGPT 5 still resfuses to render obvious sub- and superscript text items from an input image. It either transcribes them as normal text or omits them altogether. Any ideas?
I provided this message context to the API:
messages.append({
"role": "user",
"content": \[{"type": "text", "text": "Please show your Markdown formatting rules."}\]
})
messages.append({
"role": "assistant",
"content": \[{"type": "text", "text": instr_prompt}\]
})
messages.append({
"role": "user",
"content": \[
{"type": "text", "text": "Please provide an accurate and complete Markdown transcription of the provided page, carefully following the Markdown formatting rules you just provided."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}", "detail": "high"}}
\]
})
The assistant message’s instr_prompt contained:
# Headers level 1 are written like this.
## Headers level 2 are written like this.
### Headers level 3 are written like this.
#### Headers level 4 are written like this.
*Italic text* is written like this.
**Bold text** is written like this.
~~Striketrhough text~~ is written like this.
^Superscript text^ is written like this.
~Subscript text~ is written like this.
Bullet lists are written like below:
- Item 1
- Item 2
- Item 3
- Subitem 3.1
- Subitem 3.2
Numbered lists are written like below:
1. First ordered item
2. Second ordered item
3. Third ordered item
Marked checkboxes are written like this:
Unmarked checkboxes are written like this:
Images are written like this:

Tables are written like this:
| Column A | Column B | Column C |
| :----------- | :------: | ------------: |
| left-aligned | centered | right-aligned |
- left-alignment = :—
- centered = :—:
- right-alignment = —:
A cell spanning multiple columns is written like this (||):
| Column A | Column B | Column C |
| :------- | :------- | :------- |
| Single cell spanning two columns || Cell C |
A cell spanning multiple rows is written like this (^^):
| Column A | Column B |
| :------- | :------- |
| Cell A1 | Cell B1 |
| Cell spanning two rows | Cell B2 |
| ^^ | Cell B3 |
A table with multiple header rows is written like this:
| Header 1 | Header 1 | Header 1 |
| Header 2 | Header 2 | Header 2 |
| Header 3 |||
| :------- | :------- | :------- |
| Cell | Cell | Cell |
A table without a header is written like this:
| :— | :— | :— |
| Cell | Cell | Cell |
| Cell | Cell | Cell |
Additional table rules:
- \
can be used to create multiline content in table cells or headers if needed.
- Leaving an empty line separates consecutive table bodies.
- Empty cells or headers are allowed.