Relations between image objects

Hello, I'm looking for an annotation tool for annotating images of pdf pages with text blocks and reading order. I can easily annotate the text blocks as image objects and categorise them but I don't see any way of annotating their reading order. Ideally, I would like a feature where I could draw an arrow from one object to another. Does Prodigy support anything like this?

I think the order in which you annotate the examples is also the order in which the annotations are saved. I double-checked to make sure.


I have a folder with images of my cats locally, and I started an annotation interface via:

python -m prodigy image.manual demo-issue-6023 images --label noa,sok --remove-base64

This is what the annotation interface looks like.

I will now first annotate the white cat, Noa.

Next, I will annotate the black one, Sok.

When I now hit "save" I'm able to retrieve the annotations from the database. I'll use this command from the command line:

python -m prodigy db-out demo-issue-6023 | jq -c ".spans"

This command grabs the "spans" key from the annotated example. That's the part of the JSON that has the image annotation. Here's what it contains:


As you can see, the annotations with the label "noa" always appear first.

Final Thoughts

So you might be able to get what you want if you annnotate in the correct order. That said, if you're still unsure and you're acting on behalf of a company, you can also send an email to for a trial. To quote the FAQ page:

Prodigy runs entirely on your own hardware and never phones home or connects to our servers. So we typically do trials by hosting a VM that you can log in to. This gives you the full experience of the tool, including the scriptable back-end, and also makes it easy for us to log in and help if you get stuck. If you’re interested, get in touch! Please note that we’re only able to offer VM trials to companies and organizations, not individuals.

Thanks for the reply, Vincent! We are using model assisted labelling where we use our current ML model to pre-annotate the pages. Since there is no way to verify in which order the text blocks were pre-annotated (in the labelling UI), I think your approach will not work in our case, unfortunately.