From 66908a24eaabb35e1208789b26e550082c830c48 Mon Sep 17 00:00:00 2001
From: ml bonhomme <bonhomme@teklia.com>
Date: Wed, 28 Aug 2024 13:29:18 +0000
Subject: [PATCH] Make user scopes into boolean attributes on users

---
 arkindex/documents/fixtures/data.json         | 1470 ++++++++---------
 arkindex/images/api.py                        |   12 +-
 arkindex/images/tests/test_image_api.py       |   32 +-
 arkindex/process/api.py                       |   12 +-
 .../process/tests/test_create_s3_import.py    |   36 +-
 arkindex/process/tests/test_list_buckets.py   |   22 +-
 arkindex/project/permissions.py               |   78 +-
 .../process_elements_filter_ml_class.sql      |    4 +
 .../process_elements_filter_type.sql          |    4 +
 .../process_elements_top_level.sql            |    5 +
 .../process_elements_with_image.sql           |    4 +
 arkindex/users/admin.py                       |   11 +-
 arkindex/users/migrations/0001_initial.py     |   11 +-
 arkindex/users/migrations/0004_user_scopes.py |   83 +
 arkindex/users/models.py                      |   61 +-
 arkindex/users/serializers.py                 |   22 +-
 arkindex/users/tests/test_registration.py     |   24 +-
 17 files changed, 985 insertions(+), 906 deletions(-)
 create mode 100644 arkindex/users/migrations/0004_user_scopes.py

diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json
index 5adf99eabd..313c927cb7 100644
--- a/arkindex/documents/fixtures/data.json
+++ b/arkindex/documents/fixtures/data.json
@@ -1,7 +1,7 @@
 [
 {
     "model": "process.process",
-    "pk": "374c483b-62b1-4565-8834-0ab2c4960c25",
+    "pk": "7cf97824-75fb-4c4b-bf2e-5c8ac5e56d48",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
@@ -29,18 +29,18 @@
 },
 {
     "model": "process.process",
-    "pk": "38e459b9-2ffa-4bc6-b389-03a9a76d9deb",
+    "pk": "9e0d85d1-7f7a-4851-ae6d-e9bb544ece1d",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "name": "Process fixture",
         "creator": 2,
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
         "mode": "workers",
         "activity_state": "disabled",
         "started": null,
         "finished": null,
-        "farm": "f2a2e1cb-2090-4b69-b204-1a40440e2619",
+        "farm": "787cc46d-2877-4cd7-8bac-f79d092d8550",
         "element": null,
         "folder_type": null,
         "element_type": null,
@@ -57,7 +57,7 @@
 },
 {
     "model": "process.process",
-    "pk": "da1ca18e-736e-4123-8d66-27385205494d",
+    "pk": "c747f822-76d6-495b-ba93-351b2090e02b",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
@@ -85,11 +85,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "2666efcd-09df-49e5-9504-92953561ba23",
+    "pk": "10a634d9-0e78-4df8-a7e7-0b44d8bb2024",
     "fields": {
-        "name": "Generic worker with a Model",
-        "slug": "generic",
-        "type": "32060b55-22ca-447b-bc7a-1aafd38d6521",
+        "name": "Worker requiring a GPU",
+        "slug": "worker-gpu",
+        "type": "1bad9ad8-4546-4289-9721-56012135a9ad",
         "description": "",
         "public": false,
         "archived": null,
@@ -98,11 +98,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "aa0da253-2300-4b80-9403-1247b1c473ba",
+    "pk": "3fc69147-7a90-4702-9c0a-174f26d6e722",
     "fields": {
-        "name": "File import",
-        "slug": "file_import",
-        "type": "5ad90007-3888-4973-8ce8-98515a66f640",
+        "name": "Document layout analyser",
+        "slug": "dla",
+        "type": "391a0197-62bb-4a3a-8867-1cea98eb0360",
         "description": "",
         "public": false,
         "archived": null,
@@ -111,11 +111,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "b391fd40-ca4b-4963-b49b-96ac34ad2e1d",
+    "pk": "59355b24-6dff-4b8a-a2ac-2568c7520650",
     "fields": {
-        "name": "Custom worker",
-        "slug": "custom",
-        "type": "39b4a530-423d-4f0d-9729-a010279bb2d0",
+        "name": "Recognizer",
+        "slug": "reco",
+        "type": "2a2fbb7f-0fe1-47c8-8f45-62b5cb823a37",
         "description": "",
         "public": false,
         "archived": null,
@@ -124,11 +124,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "c3a739d0-024e-4405-bc07-f8736d701623",
+    "pk": "5b7252aa-801d-4532-b0ac-3acf0dab1ae7",
     "fields": {
-        "name": "Document layout analyser",
-        "slug": "dla",
-        "type": "8e44b24b-205c-4eda-b41f-37ca0f802e27",
+        "name": "Elements Initialisation Worker",
+        "slug": "initialisation",
+        "type": "11a16320-7eaa-4a7d-a255-639204e92519",
         "description": "",
         "public": false,
         "archived": null,
@@ -137,11 +137,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "cbaebcd5-3c7b-4e9a-9b93-1a2ff6521273",
+    "pk": "6504aeb6-1709-4b9d-9a60-bb3ee6e97983",
     "fields": {
-        "name": "Recognizer",
-        "slug": "reco",
-        "type": "32060b55-22ca-447b-bc7a-1aafd38d6521",
+        "name": "Generic worker with a Model",
+        "slug": "generic",
+        "type": "2a2fbb7f-0fe1-47c8-8f45-62b5cb823a37",
         "description": "",
         "public": false,
         "archived": null,
@@ -150,11 +150,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "d99d8050-297c-41db-85b1-8760ae6875b7",
+    "pk": "7934da96-65c2-4c87-8efb-4daa92ec30dc",
     "fields": {
-        "name": "Elements Initialisation Worker",
-        "slug": "initialisation",
-        "type": "b3376082-2033-4dde-a834-8829445baaf6",
+        "name": "File import",
+        "slug": "file_import",
+        "type": "f1b446d7-635d-497c-a1d9-932e88314569",
         "description": "",
         "public": false,
         "archived": null,
@@ -163,11 +163,11 @@
 },
 {
     "model": "process.worker",
-    "pk": "fb83b17c-c9cf-43e5-9ef8-e1362381dd09",
+    "pk": "ab087d67-78ee-40bb-9f3c-5a8788fedfe0",
     "fields": {
-        "name": "Worker requiring a GPU",
-        "slug": "worker-gpu",
-        "type": "44c4defd-0619-4982-8e52-5663cfec9e1f",
+        "name": "Custom worker",
+        "slug": "custom",
+        "type": "4bac9693-412e-4b7f-b7e8-b0217cb16bb2",
         "description": "",
         "public": false,
         "archived": null,
@@ -176,76 +176,76 @@
 },
 {
     "model": "process.workertype",
-    "pk": "32060b55-22ca-447b-bc7a-1aafd38d6521",
+    "pk": "11a16320-7eaa-4a7d-a255-639204e92519",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "slug": "recognizer",
-        "display_name": "Recognizer"
+        "slug": "init",
+        "display_name": "Elements Initialisation"
     }
 },
 {
     "model": "process.workertype",
-    "pk": "39b4a530-423d-4f0d-9729-a010279bb2d0",
+    "pk": "1bad9ad8-4546-4289-9721-56012135a9ad",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "slug": "custom",
-        "display_name": "Custom"
+        "slug": "worker",
+        "display_name": "Worker requiring a GPU"
     }
 },
 {
     "model": "process.workertype",
-    "pk": "44c4defd-0619-4982-8e52-5663cfec9e1f",
+    "pk": "2a2fbb7f-0fe1-47c8-8f45-62b5cb823a37",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "slug": "worker",
-        "display_name": "Worker requiring a GPU"
+        "slug": "recognizer",
+        "display_name": "Recognizer"
     }
 },
 {
     "model": "process.workertype",
-    "pk": "5ad90007-3888-4973-8ce8-98515a66f640",
+    "pk": "391a0197-62bb-4a3a-8867-1cea98eb0360",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "slug": "import",
-        "display_name": "Import"
+        "slug": "dla",
+        "display_name": "Document Layout Analysis"
     }
 },
 {
     "model": "process.workertype",
-    "pk": "8e44b24b-205c-4eda-b41f-37ca0f802e27",
+    "pk": "4bac9693-412e-4b7f-b7e8-b0217cb16bb2",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "slug": "dla",
-        "display_name": "Document Layout Analysis"
+        "slug": "custom",
+        "display_name": "Custom"
     }
 },
 {
     "model": "process.workertype",
-    "pk": "b3376082-2033-4dde-a834-8829445baaf6",
+    "pk": "f1b446d7-635d-497c-a1d9-932e88314569",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "slug": "init",
-        "display_name": "Elements Initialisation"
+        "slug": "import",
+        "display_name": "Import"
     }
 },
 {
     "model": "process.workerversion",
-    "pk": "221791c3-7fa9-4669-9399-0ca05220b7c0",
+    "pk": "23219e88-6203-4a66-8eeb-a47ea3178b5a",
     "fields": {
-        "worker": "2666efcd-09df-49e5-9504-92953561ba23",
+        "worker": "3fc69147-7a90-4702-9c0a-174f26d6e722",
         "version": 1,
         "configuration": {
             "test": 42
         },
         "state": "available",
         "gpu_usage": "disabled",
-        "model_usage": "required",
+        "model_usage": "disabled",
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
@@ -255,17 +255,19 @@
 },
 {
     "model": "process.workerversion",
-    "pk": "282dd426-0828-46cd-b15c-7da00c3b6279",
+    "pk": "3eca986d-082a-49cb-ac2e-5b3b6a2ec6d5",
     "fields": {
-        "worker": "c3a739d0-024e-4405-bc07-f8736d701623",
+        "worker": "5b7252aa-801d-4532-b0ac-3acf0dab1ae7",
         "version": 1,
         "configuration": {
-            "test": 42
+            "docker": {
+                "command": "worker-init-elements"
+            }
         },
         "state": "available",
         "gpu_usage": "disabled",
         "model_usage": "disabled",
-        "docker_image_iid": "registry.somewhere.com/something:latest",
+        "docker_image_iid": "registry.gitlab.teklia.com/arkindex/workers/init-elements:latest",
         "revision_url": null,
         "tag": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -274,9 +276,9 @@
 },
 {
     "model": "process.workerversion",
-    "pk": "5e755c30-57f6-4e19-8e3a-6b5a7f09f2ee",
+    "pk": "6e30bb3b-37fd-42a9-8591-52398332e52f",
     "fields": {
-        "worker": "b391fd40-ca4b-4963-b49b-96ac34ad2e1d",
+        "worker": "ab087d67-78ee-40bb-9f3c-5a8788fedfe0",
         "version": 1,
         "configuration": {
             "custom": "value"
@@ -293,15 +295,13 @@
 },
 {
     "model": "process.workerversion",
-    "pk": "821770c1-6438-49a8-a200-8662fa2a607d",
+    "pk": "7110e9b2-24b7-4bc6-95a5-cd8bff541436",
     "fields": {
-        "worker": "fb83b17c-c9cf-43e5-9ef8-e1362381dd09",
+        "worker": "7934da96-65c2-4c87-8efb-4daa92ec30dc",
         "version": 1,
-        "configuration": {
-            "test": 42
-        },
+        "configuration": {},
         "state": "available",
-        "gpu_usage": "required",
+        "gpu_usage": "disabled",
         "model_usage": "disabled",
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
@@ -312,13 +312,15 @@
 },
 {
     "model": "process.workerversion",
-    "pk": "9a5ae4ee-ebff-40bd-8582-b2f1f244ac15",
+    "pk": "8ceacd46-b8a3-4a9d-8c5e-4adf633cccc0",
     "fields": {
-        "worker": "aa0da253-2300-4b80-9403-1247b1c473ba",
+        "worker": "10a634d9-0e78-4df8-a7e7-0b44d8bb2024",
         "version": 1,
-        "configuration": {},
+        "configuration": {
+            "test": 42
+        },
         "state": "available",
-        "gpu_usage": "disabled",
+        "gpu_usage": "required",
         "model_usage": "disabled",
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
@@ -329,9 +331,9 @@
 },
 {
     "model": "process.workerversion",
-    "pk": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
+    "pk": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
     "fields": {
-        "worker": "cbaebcd5-3c7b-4e9a-9b93-1a2ff6521273",
+        "worker": "59355b24-6dff-4b8a-a2ac-2568c7520650",
         "version": 1,
         "configuration": {
             "test": 42
@@ -348,19 +350,17 @@
 },
 {
     "model": "process.workerversion",
-    "pk": "f5857b3b-8330-4735-a619-4a0ddde14b0f",
+    "pk": "ee2c2d36-e30c-416f-9240-daa561987193",
     "fields": {
-        "worker": "d99d8050-297c-41db-85b1-8760ae6875b7",
+        "worker": "6504aeb6-1709-4b9d-9a60-bb3ee6e97983",
         "version": 1,
         "configuration": {
-            "docker": {
-                "command": "worker-init-elements"
-            }
+            "test": 42
         },
         "state": "available",
         "gpu_usage": "disabled",
-        "model_usage": "disabled",
-        "docker_image_iid": "registry.gitlab.teklia.com/arkindex/workers/init-elements:latest",
+        "model_usage": "required",
+        "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -369,14 +369,14 @@
 },
 {
     "model": "process.workerrun",
-    "pk": "00794041-a034-477e-8dc8-ad6d4eae7f11",
+    "pk": "4c2a35c1-c325-4e01-bfb2-dab70e6acbf4",
     "fields": {
-        "process": "38e459b9-2ffa-4bc6-b389-03a9a76d9deb",
-        "version": "f5857b3b-8330-4735-a619-4a0ddde14b0f",
+        "process": "c747f822-76d6-495b-ba93-351b2090e02b",
+        "version": "6e30bb3b-37fd-42a9-8591-52398332e52f",
         "model_version": null,
         "parents": "[]",
         "configuration": null,
-        "summary": "Worker Elements Initialisation Worker @ version 1",
+        "summary": "Worker Custom worker @ version 1",
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "has_results": false,
@@ -385,14 +385,14 @@
 },
 {
     "model": "process.workerrun",
-    "pk": "75d5400c-650f-4870-a23c-6dfbb5c51cab",
+    "pk": "b72a2677-f6f2-4eca-80e2-57709ec8cea3",
     "fields": {
-        "process": "38e459b9-2ffa-4bc6-b389-03a9a76d9deb",
-        "version": "282dd426-0828-46cd-b15c-7da00c3b6279",
+        "process": "9e0d85d1-7f7a-4851-ae6d-e9bb544ece1d",
+        "version": "3eca986d-082a-49cb-ac2e-5b3b6a2ec6d5",
         "model_version": null,
-        "parents": "[\"00794041-a034-477e-8dc8-ad6d4eae7f11\"]",
+        "parents": "[]",
         "configuration": null,
-        "summary": "Worker Document layout analyser @ version 1",
+        "summary": "Worker Elements Initialisation Worker @ version 1",
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "has_results": false,
@@ -401,14 +401,14 @@
 },
 {
     "model": "process.workerrun",
-    "pk": "a3adcf61-c7ce-48e1-8488-541ba1373740",
+    "pk": "5287808f-22cd-4f02-a007-cbb56aecbdb3",
     "fields": {
-        "process": "38e459b9-2ffa-4bc6-b389-03a9a76d9deb",
-        "version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
+        "process": "9e0d85d1-7f7a-4851-ae6d-e9bb544ece1d",
+        "version": "23219e88-6203-4a66-8eeb-a47ea3178b5a",
         "model_version": null,
-        "parents": "[\"75d5400c-650f-4870-a23c-6dfbb5c51cab\"]",
+        "parents": "[\"b72a2677-f6f2-4eca-80e2-57709ec8cea3\"]",
         "configuration": null,
-        "summary": "Worker Recognizer @ version 1",
+        "summary": "Worker Document layout analyser @ version 1",
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "has_results": false,
@@ -417,14 +417,14 @@
 },
 {
     "model": "process.workerrun",
-    "pk": "b2a718fc-bf5c-4a56-8b07-d7f10328c07c",
+    "pk": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
     "fields": {
-        "process": "374c483b-62b1-4565-8834-0ab2c4960c25",
-        "version": "5e755c30-57f6-4e19-8e3a-6b5a7f09f2ee",
+        "process": "9e0d85d1-7f7a-4851-ae6d-e9bb544ece1d",
+        "version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
         "model_version": null,
-        "parents": "[]",
+        "parents": "[\"5287808f-22cd-4f02-a007-cbb56aecbdb3\"]",
         "configuration": null,
-        "summary": "Worker Custom worker @ version 1",
+        "summary": "Worker Recognizer @ version 1",
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "has_results": false,
@@ -433,10 +433,10 @@
 },
 {
     "model": "process.workerrun",
-    "pk": "cda74349-cb8d-49ed-bf43-9a06a9e17d79",
+    "pk": "e0247f8e-c31f-410c-9e62-e4e8d9b49f3c",
     "fields": {
-        "process": "da1ca18e-736e-4123-8d66-27385205494d",
-        "version": "5e755c30-57f6-4e19-8e3a-6b5a7f09f2ee",
+        "process": "7cf97824-75fb-4c4b-bf2e-5c8ac5e56d48",
+        "version": "6e30bb3b-37fd-42a9-8591-52398332e52f",
         "model_version": null,
         "parents": "[]",
         "configuration": null,
@@ -449,7 +449,7 @@
 },
 {
     "model": "documents.corpus",
-    "pk": "b1be7812-a2b1-4d26-a031-8d85869228df",
+    "pk": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
@@ -462,11 +462,11 @@
 },
 {
     "model": "documents.elementtype",
-    "pk": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
+    "pk": "318f9b79-62ee-4521-82c0-670aa99ececf",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "slug": "page",
-        "display_name": "Page",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "slug": "act",
+        "display_name": "Act",
         "folder": false,
         "indexable": false,
         "color": "28b62c"
@@ -474,11 +474,11 @@
 },
 {
     "model": "documents.elementtype",
-    "pk": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
+    "pk": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "slug": "surface",
-        "display_name": "Surface",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "slug": "page",
+        "display_name": "Page",
         "folder": false,
         "indexable": false,
         "color": "28b62c"
@@ -486,23 +486,23 @@
 },
 {
     "model": "documents.elementtype",
-    "pk": "71849ae9-9235-4c55-a627-d5a98af53ea4",
+    "pk": "a5b6234e-d9a2-4263-b315-f87a5179830b",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "slug": "volume",
-        "display_name": "Volume",
-        "folder": true,
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "slug": "word",
+        "display_name": "Word",
+        "folder": false,
         "indexable": false,
         "color": "28b62c"
     }
 },
 {
     "model": "documents.elementtype",
-    "pk": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
+    "pk": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "slug": "word",
-        "display_name": "Word",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "slug": "surface",
+        "display_name": "Surface",
         "folder": false,
         "indexable": false,
         "color": "28b62c"
@@ -510,21 +510,21 @@
 },
 {
     "model": "documents.elementtype",
-    "pk": "90463352-3033-4f98-9b4b-b01d463ede34",
+    "pk": "fc18d3b3-1d6d-48f3-8e59-59a7edc43b34",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "slug": "act",
-        "display_name": "Act",
-        "folder": false,
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "slug": "volume",
+        "display_name": "Volume",
+        "folder": true,
         "indexable": false,
         "color": "28b62c"
     }
 },
 {
     "model": "documents.elementtype",
-    "pk": "d11fd6b0-37c7-4566-abee-1283803bf546",
+    "pk": "fc6f5d0b-55bb-4ca8-880d-d2da865000e4",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
         "slug": "text_line",
         "display_name": "Line",
         "folder": false,
@@ -534,279 +534,279 @@
 },
 {
     "model": "documents.elementpath",
-    "pk": "07cf4470-ce10-4bb3-b624-8693b7d830aa",
+    "pk": "19ad5308-22e2-4d51-9503-0a86f4086465",
     "fields": {
-        "element": "c77fbfa2-1edc-4c83-bb60-a59773be6f39",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
-        "ordering": 4
+        "element": "4d1642e0-a456-4ea6-a0e7-d4190b85dd23",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
+        "ordering": 6
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "2299e751-efbc-44f9-928d-eae11419bf08",
+    "pk": "1a939690-ea65-4f9f-bd88-d010ccea4ad8",
     "fields": {
-        "element": "809a018e-3b3e-4ba0-9e10-7378df428f8b",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
-        "ordering": 5
+        "element": "b9e34045-cd42-4611-9140-9b36c255aa7d",
+        "path": "[\"a04bc2a1-a34c-4ff1-8cee-1610a6292f08\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "24d60fd8-fd8a-4199-9892-7502dcbca1b7",
+    "pk": "2b055722-0e89-413e-97bd-2d0b6125ada2",
     "fields": {
-        "element": "92edae95-97fd-44c9-a8f3-86aaabd3e685",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"30211bbd-f970-46f2-8010-6a03afa219d4\"]",
-        "ordering": 2
+        "element": "273940fa-29e6-4a6f-8ebe-2f0530c5638a",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"659147b8-aa8d-430d-be80-bfb45abbc86c\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "2b3baf15-7c24-4824-be6e-023a6b918b8d",
+    "pk": "2c367bea-3a32-4c2d-ac9c-1e4c589a7aa2",
     "fields": {
-        "element": "6c2b3553-a182-41e7-86b7-d074ee38ef3a",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"bd5a671f-ca17-476e-a43d-25b4aa386abf\"]",
+        "element": "305d4981-1f1b-441d-b147-9a04ef512c2d",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"3e88150e-0dd5-4f1f-bdf3-5ff962df5520\"]",
         "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "2f5a38d5-1c15-4be2-8540-4f69e37a0b6a",
+    "pk": "30dbd0cf-b735-4243-8507-8a340561d475",
     "fields": {
-        "element": "9475daba-8eb1-4553-a400-3fb117528bb3",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"7f3bbf36-2f96-4297-adc3-4258e3456c29\"]",
-        "ordering": 0
+        "element": "9a2ee49d-0c3c-4c41-bdc7-5cf696c23d11",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
+        "ordering": 3
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "43e2ccf3-7bba-40e7-98c6-93737541a0f2",
+    "pk": "313629c9-fccf-4860-8f63-4c5b369fe64d",
     "fields": {
-        "element": "bd5a671f-ca17-476e-a43d-25b4aa386abf",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
-        "ordering": 3
+        "element": "fc591db1-9115-48ed-b79e-ae73f08ddd72",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"4d1642e0-a456-4ea6-a0e7-d4190b85dd23\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "46a19bee-37af-48cd-bc88-0839541e35bf",
+    "pk": "3b0c0d4b-48b1-4c22-87de-79080fa2ab39",
     "fields": {
-        "element": "26ac9c54-10e9-4996-8cfa-9df1434774f6",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"76a56cff-9680-4c5a-8a01-53b43700b093\"]",
+        "element": "a04bc2a1-a34c-4ff1-8cee-1610a6292f08",
+        "path": "[]",
         "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "4761a077-d4de-48b2-9477-3520907439e9",
+    "pk": "3b66f0c6-a2fd-4800-b366-8257cc587da0",
     "fields": {
-        "element": "30211bbd-f970-46f2-8010-6a03afa219d4",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
+        "element": "49e3b2aa-2dc1-4d9e-930b-433529ce74ed",
+        "path": "[]",
         "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "5a917257-c667-4f13-80e6-106380a8b3ea",
+    "pk": "448602e5-244f-414d-ba25-a7d355f44347",
     "fields": {
-        "element": "7fa801e7-2b7a-46b5-9c2a-19a227ba56d6",
-        "path": "[\"bd6e6b59-cfb5-41f6-b333-794accb8eff9\"]",
+        "element": "588ce3be-858d-4963-a7ae-9e9ac593e604",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"4df12da3-657e-4373-aff0-2d97f06ae764\"]",
         "ordering": 2
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "655bca20-7dc6-4c03-ae5b-a0099d124281",
+    "pk": "4982f9e2-ad8e-42ee-9742-9d3d9621dbeb",
     "fields": {
-        "element": "ee14b7ed-9fee-49c6-9983-9d52b2a59343",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"c77fbfa2-1edc-4c83-bb60-a59773be6f39\"]",
-        "ordering": 0
+        "element": "d237b4d8-0f0f-4048-b8fb-88822eeab941",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"132bd0a4-51b3-409c-a794-790f98885c04\"]",
+        "ordering": 2
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "74242843-2aec-455b-8dce-87b8ce562f3d",
+    "pk": "4d34d168-ddee-4486-95da-55f7b5dd8f38",
     "fields": {
-        "element": "71287d83-8628-48ac-9e3f-40f2f6daf136",
-        "path": "[]",
+        "element": "4df12da3-657e-4373-aff0-2d97f06ae764",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
         "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "77e0cddf-b8c5-4af2-aa7a-437341876530",
+    "pk": "7c262f41-0d07-4624-91da-19551010ecde",
     "fields": {
-        "element": "a317a77b-9ddd-4f48-82cf-17d25aec30f6",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"b786da45-c90c-4569-aa31-1b4351bc9e34\"]",
-        "ordering": 2
+        "element": "6a10d9e5-d497-4653-a067-cd0314d2f806",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"4df12da3-657e-4373-aff0-2d97f06ae764\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "8d008ef2-d1c3-4615-9c8b-43aace76b30b",
+    "pk": "7c6edcbc-839e-43d9-b85e-dc26cdaad20c",
     "fields": {
-        "element": "7f3bbf36-2f96-4297-adc3-4258e3456c29",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
-        "ordering": 7
+        "element": "bbad9d5b-21af-4c94-a5e2-90526817f0ef",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"9a2ee49d-0c3c-4c41-bdc7-5cf696c23d11\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "978c2b40-fbb4-415d-ae51-65641826153f",
+    "pk": "805e75ca-fcdf-4ed9-87df-39f38de0a7d2",
     "fields": {
-        "element": "6fb612a7-e337-4538-8ca9-f79d7b1c80f3",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"76a56cff-9680-4c5a-8a01-53b43700b093\"]",
-        "ordering": 1
+        "element": "2d1dae06-f06e-4675-acb3-cf7d89d391f9",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
+        "ordering": 4
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "9eaa2e45-241f-494d-8135-dacdcb36e4fe",
+    "pk": "80a33d75-558f-452e-ad5d-78b4e373a442",
     "fields": {
-        "element": "b826c0e5-4877-487e-bd77-b4198cf76f4c",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"76a56cff-9680-4c5a-8a01-53b43700b093\"]",
-        "ordering": 2
+        "element": "1894f1ac-0e28-4b14-9c31-0429d068c419",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"132bd0a4-51b3-409c-a794-790f98885c04\"]",
+        "ordering": 1
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "9f0b10d4-7c88-4f54-a308-4652618790c0",
+    "pk": "81895f6f-3254-410a-8812-bca58773fcf9",
     "fields": {
-        "element": "38cafdb6-bb8a-45bc-b514-f19cb27ac7a9",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"b786da45-c90c-4569-aa31-1b4351bc9e34\"]",
-        "ordering": 1
+        "element": "4f90d19e-e255-4fa7-a644-9d611a62d967",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"842cd8c3-526c-46da-81a9-c033e9cc276c\"]",
+        "ordering": 2
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "a57189bd-d29f-4dab-b66c-d06876f59118",
+    "pk": "8fa16771-c069-49e8-8bd7-705151423ba4",
     "fields": {
-        "element": "9afab3a6-e895-4c0a-807d-d31354bd8b0a",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"30211bbd-f970-46f2-8010-6a03afa219d4\"]",
+        "element": "df79e245-1acf-4bef-bbf3-346806bfa272",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"132bd0a4-51b3-409c-a794-790f98885c04\"]",
         "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "aecdcf26-7dd1-4186-b872-300918e92658",
+    "pk": "9c57ec9e-445f-46ab-9984-3b89deedf7f3",
     "fields": {
-        "element": "4bb67850-d7ba-459e-a106-b2cf48f9f6cb",
-        "path": "[\"bd6e6b59-cfb5-41f6-b333-794accb8eff9\"]",
-        "ordering": 1
+        "element": "132bd0a4-51b3-409c-a794-790f98885c04",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
+        "ordering": 2
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "b93d6025-9349-439d-bd65-992c13db4010",
+    "pk": "9f3ae480-5058-41a4-9138-aaddc218e4b5",
     "fields": {
-        "element": "9d026bbe-71d7-4ed0-8291-c00cad083f3b",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"c77fbfa2-1edc-4c83-bb60-a59773be6f39\"]",
+        "element": "ebc8c3f5-90d3-4269-91b0-bca2d82e83ce",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"842cd8c3-526c-46da-81a9-c033e9cc276c\"]",
         "ordering": 1
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "ba4dc25d-1878-4327-ba75-babaccaf3edc",
+    "pk": "a158160d-7349-41db-8dca-b2f05f0aecbe",
     "fields": {
-        "element": "dc730372-6e7a-4baf-9d0a-7f1ca89802f9",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
-        "ordering": 6
+        "element": "c975f120-35dd-4d27-9136-503eee141c78",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"842cd8c3-526c-46da-81a9-c033e9cc276c\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "c2d77a3f-16c3-435b-989a-94202960561f",
+    "pk": "b4b428f6-b1e7-4ac7-91a2-94e5fe0050b1",
     "fields": {
-        "element": "bd6e6b59-cfb5-41f6-b333-794accb8eff9",
-        "path": "[]",
-        "ordering": 0
+        "element": "c7a86026-64d7-4976-ba39-05e94b3a2a5d",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"4df12da3-657e-4373-aff0-2d97f06ae764\"]",
+        "ordering": 3
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "c8acfd35-3fd9-4b79-9a38-b503e262c46c",
+    "pk": "c0203529-60e9-42a8-ae93-404882f6893d",
     "fields": {
-        "element": "e247c22a-4e83-4997-a284-5d1fda37a82f",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"dc730372-6e7a-4baf-9d0a-7f1ca89802f9\"]",
-        "ordering": 0
+        "element": "659147b8-aa8d-430d-be80-bfb45abbc86c",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
+        "ordering": 5
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "caf5c422-7d5f-451f-aeda-ad0239c6b880",
+    "pk": "c874b409-b0b8-4650-9874-defaf75e1c29",
     "fields": {
-        "element": "be2b81f0-dec4-41fd-a720-e8383244ee91",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"30211bbd-f970-46f2-8010-6a03afa219d4\"]",
-        "ordering": 1
+        "element": "f137753e-86f3-4424-99c1-4b3ddd39c518",
+        "path": "[\"a04bc2a1-a34c-4ff1-8cee-1610a6292f08\"]",
+        "ordering": 2
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "d967f4ee-b387-4b62-a140-9273de9b1f42",
+    "pk": "d664f672-e134-4bd7-afb2-f124d8d321fb",
     "fields": {
-        "element": "76a56cff-9680-4c5a-8a01-53b43700b093",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
+        "element": "842cd8c3-526c-46da-81a9-c033e9cc276c",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
         "ordering": 1
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "e61e9861-4e60-4459-839d-8dfe0803ab3d",
+    "pk": "d6fe5c2a-95bc-4002-8f20-df22443b742d",
     "fields": {
-        "element": "ae67b0f1-dfee-464d-8c96-fa3150eb924f",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"b786da45-c90c-4569-aa31-1b4351bc9e34\"]",
-        "ordering": 0
+        "element": "3e88150e-0dd5-4f1f-bdf3-5ff962df5520",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\"]",
+        "ordering": 7
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "eb20eb41-0d8a-4950-a838-24c98e707315",
+    "pk": "d8f5544d-0bc2-49a7-b17a-d6cbd53674f7",
     "fields": {
-        "element": "b8d55a9f-f3d6-4778-8eda-5b6b85d458b1",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"30211bbd-f970-46f2-8010-6a03afa219d4\"]",
-        "ordering": 3
+        "element": "8d0dbf71-8c18-4114-8d95-ee3a4fb2b69b",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"2d1dae06-f06e-4675-acb3-cf7d89d391f9\"]",
+        "ordering": 0
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "f27d02e0-2cdb-4c7b-a3a0-dbb21603424b",
+    "pk": "dd79b4f9-58de-4e4b-bc40-182f0ba2dd37",
     "fields": {
-        "element": "b786da45-c90c-4569-aa31-1b4351bc9e34",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\"]",
-        "ordering": 2
+        "element": "80208152-f014-4c73-bdb3-f4e961b023a7",
+        "path": "[\"a04bc2a1-a34c-4ff1-8cee-1610a6292f08\"]",
+        "ordering": 1
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "f577406b-f31d-4fd6-801d-1b1385700304",
+    "pk": "e8f15cce-af65-45c7-986b-670d43fca586",
     "fields": {
-        "element": "590d69b1-95c8-4ba0-8617-9c0b022a4ba8",
-        "path": "[\"bd6e6b59-cfb5-41f6-b333-794accb8eff9\"]",
-        "ordering": 0
+        "element": "ed194a73-39ff-42f9-8133-dec044bf4792",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"4df12da3-657e-4373-aff0-2d97f06ae764\"]",
+        "ordering": 1
     }
 },
 {
     "model": "documents.elementpath",
-    "pk": "f68d74c1-7b5d-43fc-a259-98eb8500a827",
+    "pk": "fbbb5d47-d505-45c8-adaf-897b6057f909",
     "fields": {
-        "element": "02fd8dce-00b9-4895-93b6-94f8026a8a41",
-        "path": "[\"71287d83-8628-48ac-9e3f-40f2f6daf136\", \"809a018e-3b3e-4ba0-9e10-7378df428f8b\"]",
-        "ordering": 0
+        "element": "97c25afa-8568-46f9-bb21-7d5530ec0fcd",
+        "path": "[\"49e3b2aa-2dc1-4d9e-930b-433529ce74ed\", \"2d1dae06-f06e-4675-acb3-cf7d89d391f9\"]",
+        "ordering": 1
     }
 },
 {
     "model": "documents.element",
-    "pk": "02fd8dce-00b9-4895-93b6-94f8026a8a41",
+    "pk": "132bd0a4-51b3-409c-a794-790f98885c04",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
-        "name": "Surface D",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
+        "name": "Volume 1, page 2r",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
-        "polygon": "LINEARRING (0 0, 0 300, 300 300, 300 0, 0 0)",
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -814,18 +814,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "26ac9c54-10e9-4996-8cfa-9df1434774f6",
+    "pk": "1894f1ac-0e28-4b14-9c31-0429d068c419",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "PARIS",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "ROY",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "da507478-8d0a-41d5-8ad7-5b062521e984",
-        "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)",
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -833,18 +833,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "30211bbd-f970-46f2-8010-6a03afa219d4",
+    "pk": "273940fa-29e6-4a6f-8ebe-2f0530c5638a",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
-        "name": "Volume 1, page 1r",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
+        "name": "Surface D",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
-        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (0 0, 0 300, 300 300, 300 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -852,18 +852,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "38cafdb6-bb8a-45bc-b514-f19cb27ac7a9",
+    "pk": "2d1dae06-f06e-4675-acb3-cf7d89d391f9",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "ROY",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "318f9b79-62ee-4521-82c0-670aa99ececf",
+        "name": "Act 2",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
-        "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -871,18 +871,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "4bb67850-d7ba-459e-a106-b2cf48f9f6cb",
+    "pk": "305d4981-1f1b-441d-b147-9a04ef512c2d",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
-        "name": "Volume 2, page 1v",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
+        "name": "Surface F",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "6358303d-1167-489c-b456-2ad6f80b7909",
-        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -890,18 +890,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "590d69b1-95c8-4ba0-8617-9c0b022a4ba8",
+    "pk": "3e88150e-0dd5-4f1f-bdf3-5ff962df5520",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
-        "name": "Volume 2, page 1r",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "318f9b79-62ee-4521-82c0-670aa99ececf",
+        "name": "Act 5",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "0d4b917a-4b05-412e-9a32-78da2031dd70",
-        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -909,18 +909,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "6c2b3553-a182-41e7-86b7-d074ee38ef3a",
+    "pk": "49e3b2aa-2dc1-4d9e-930b-433529ce74ed",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
-        "name": "Surface A",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "fc18d3b3-1d6d-48f3-8e59-59a7edc43b34",
+        "name": "Volume 1",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
-        "polygon": "LINEARRING (0 0, 0 600, 600 600, 600 0, 0 0)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -928,18 +928,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "6fb612a7-e337-4538-8ca9-f79d7b1c80f3",
+    "pk": "4d1642e0-a456-4ea6-a0e7-d4190b85dd23",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "ROY",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "318f9b79-62ee-4521-82c0-670aa99ececf",
+        "name": "Act 4",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "da507478-8d0a-41d5-8ad7-5b062521e984",
-        "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -947,18 +947,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "71287d83-8628-48ac-9e3f-40f2f6daf136",
+    "pk": "4df12da3-657e-4373-aff0-2d97f06ae764",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "71849ae9-9235-4c55-a627-d5a98af53ea4",
-        "name": "Volume 1",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
+        "name": "Volume 1, page 1r",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
+        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -966,18 +966,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "76a56cff-9680-4c5a-8a01-53b43700b093",
+    "pk": "4f90d19e-e255-4fa7-a644-9d611a62d967",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
-        "name": "Volume 1, page 1v",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "DATUM",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "da507478-8d0a-41d5-8ad7-5b062521e984",
-        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
+        "image": "ad2a47fa-c3a6-4b0a-9e35-44563187350e",
+        "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -985,18 +985,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "7f3bbf36-2f96-4297-adc3-4258e3456c29",
+    "pk": "588ce3be-858d-4963-a7ae-9e9ac593e604",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "90463352-3033-4f98-9b4b-b01d463ede34",
-        "name": "Act 5",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "DATUM",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
+        "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1004,18 +1004,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "7fa801e7-2b7a-46b5-9c2a-19a227ba56d6",
+    "pk": "659147b8-aa8d-430d-be80-bfb45abbc86c",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
-        "name": "Volume 2, page 2r",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "318f9b79-62ee-4521-82c0-670aa99ececf",
+        "name": "Act 3",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "fa147dd6-f548-478d-a2ce-de54e28aeda9",
-        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1023,18 +1023,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "809a018e-3b3e-4ba0-9e10-7378df428f8b",
+    "pk": "6a10d9e5-d497-4653-a067-cd0314d2f806",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "90463352-3033-4f98-9b4b-b01d463ede34",
-        "name": "Act 3",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "PARIS",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
+        "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1042,18 +1042,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "92edae95-97fd-44c9-a8f3-86aaabd3e685",
+    "pk": "80208152-f014-4c73-bdb3-f4e961b023a7",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "DATUM",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
+        "name": "Volume 2, page 1v",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
-        "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)",
+        "image": "651a1319-22d6-4bd6-a385-a64f0235228f",
+        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1061,18 +1061,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "9475daba-8eb1-4553-a400-3fb117528bb3",
+    "pk": "842cd8c3-526c-46da-81a9-c033e9cc276c",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
-        "name": "Surface F",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
+        "name": "Volume 1, page 1v",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
-        "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)",
+        "image": "ad2a47fa-c3a6-4b0a-9e35-44563187350e",
+        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1080,18 +1080,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "9afab3a6-e895-4c0a-807d-d31354bd8b0a",
+    "pk": "8d0dbf71-8c18-4114-8d95-ee3a4fb2b69b",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "PARIS",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
+        "name": "Surface B",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
-        "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)",
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
+        "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1099,17 +1099,17 @@
 },
 {
     "model": "documents.element",
-    "pk": "9d026bbe-71d7-4ed0-8291-c00cad083f3b",
+    "pk": "97c25afa-8568-46f9-bb21-7d5530ec0fcd",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
         "name": "Surface C",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "da507478-8d0a-41d5-8ad7-5b062521e984",
+        "image": "ad2a47fa-c3a6-4b0a-9e35-44563187350e",
         "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
@@ -1118,18 +1118,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "a317a77b-9ddd-4f48-82cf-17d25aec30f6",
+    "pk": "9a2ee49d-0c3c-4c41-bdc7-5cf696c23d11",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "DATUM",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "318f9b79-62ee-4521-82c0-670aa99ececf",
+        "name": "Act 1",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
-        "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1137,18 +1137,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "ae67b0f1-dfee-464d-8c96-fa3150eb924f",
+    "pk": "a04bc2a1-a34c-4ff1-8cee-1610a6292f08",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "PARIS",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "fc18d3b3-1d6d-48f3-8e59-59a7edc43b34",
+        "name": "Volume 2",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
-        "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)",
+        "image": null,
+        "polygon": null,
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1156,17 +1156,17 @@
 },
 {
     "model": "documents.element",
-    "pk": "b786da45-c90c-4569-aa31-1b4351bc9e34",
+    "pk": "b9e34045-cd42-4611-9140-9b36c255aa7d",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "0f9084ac-d62f-435e-8dd2-c66052dca93b",
-        "name": "Volume 1, page 2r",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
+        "name": "Volume 2, page 1r",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
+        "image": "d8cc120e-fb8c-4057-a243-558a02213f54",
         "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
@@ -1175,18 +1175,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "b826c0e5-4877-487e-bd77-b4198cf76f4c",
+    "pk": "bbad9d5b-21af-4c94-a5e2-90526817f0ef",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "DATUM",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
+        "name": "Surface A",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "da507478-8d0a-41d5-8ad7-5b062521e984",
-        "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)",
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
+        "polygon": "LINEARRING (0 0, 0 600, 600 600, 600 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1194,17 +1194,17 @@
 },
 {
     "model": "documents.element",
-    "pk": "b8d55a9f-f3d6-4778-8eda-5b6b85d458b1",
+    "pk": "c7a86026-64d7-4976-ba39-05e94b3a2a5d",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "d11fd6b0-37c7-4566-abee-1283803bf546",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "fc6f5d0b-55bb-4ca8-880d-d2da865000e4",
         "name": "Text line",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
         "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
         "rotation_angle": 0,
         "mirrored": false,
@@ -1213,18 +1213,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "bd5a671f-ca17-476e-a43d-25b4aa386abf",
+    "pk": "c975f120-35dd-4d27-9136-503eee141c78",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "90463352-3033-4f98-9b4b-b01d463ede34",
-        "name": "Act 1",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "PARIS",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "ad2a47fa-c3a6-4b0a-9e35-44563187350e",
+        "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1232,18 +1232,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "bd6e6b59-cfb5-41f6-b333-794accb8eff9",
+    "pk": "d237b4d8-0f0f-4048-b8fb-88822eeab941",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "71849ae9-9235-4c55-a627-d5a98af53ea4",
-        "name": "Volume 2",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "DATUM",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (700 700, 700 800, 800 800, 800 700, 700 700)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1251,18 +1251,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "be2b81f0-dec4-41fd-a720-e8383244ee91",
+    "pk": "df79e245-1acf-4bef-bbf3-346806bfa272",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "8f16a5a3-4dfb-4851-a05a-36d95bb1cc0c",
-        "name": "ROY",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "PARIS",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
-        "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (100 100, 100 200, 200 200, 200 100, 100 100)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1270,18 +1270,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "c77fbfa2-1edc-4c83-bb60-a59773be6f39",
+    "pk": "ebc8c3f5-90d3-4269-91b0-bca2d82e83ce",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "90463352-3033-4f98-9b4b-b01d463ede34",
-        "name": "Act 2",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "ROY",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "ad2a47fa-c3a6-4b0a-9e35-44563187350e",
+        "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1289,18 +1289,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "dc730372-6e7a-4baf-9d0a-7f1ca89802f9",
+    "pk": "ed194a73-39ff-42f9-8133-dec044bf4792",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "90463352-3033-4f98-9b4b-b01d463ede34",
-        "name": "Act 4",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "a5b6234e-d9a2-4263-b315-f87a5179830b",
+        "name": "ROY",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": null,
-        "polygon": null,
+        "image": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
+        "polygon": "LINEARRING (400 400, 400 500, 500 500, 500 400, 400 400)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1308,18 +1308,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "e247c22a-4e83-4997-a284-5d1fda37a82f",
+    "pk": "f137753e-86f3-4424-99c1-4b3ddd39c518",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
-        "name": "Surface E",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "34a11cd0-1ab9-4043-a1be-89d12dc09398",
+        "name": "Volume 2, page 2r",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
-        "polygon": "LINEARRING (300 300, 300 600, 600 600, 600 300, 300 300)",
+        "image": "cf799a21-7bd2-45f5-a83d-272ee97d6b20",
+        "polygon": "LINEARRING (0 0, 0 1000, 1000 1000, 1000 0, 0 0)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1327,18 +1327,18 @@
 },
 {
     "model": "documents.element",
-    "pk": "ee14b7ed-9fee-49c6-9983-9d52b2a59343",
+    "pk": "fc591db1-9115-48ed-b79e-ae73f08ddd72",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "4ae753e7-ddf9-4500-a72f-9efdd71ba37c",
-        "name": "Surface B",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "d6578a7a-92a5-492a-bd5e-bd91bc67180c",
+        "name": "Surface E",
         "creator": null,
         "worker_version": null,
         "worker_run": null,
-        "image": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
-        "polygon": "LINEARRING (600 600, 600 1000, 1000 1000, 1000 600, 600 600)",
+        "image": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
+        "polygon": "LINEARRING (300 300, 300 600, 600 600, 600 300, 300 300)",
         "rotation_angle": 0,
         "mirrored": false,
         "confidence": null
@@ -1346,152 +1346,152 @@
 },
 {
     "model": "documents.entitytype",
-    "pk": "1af77054-dd36-4b06-ba8a-49e3d91863e0",
+    "pk": "1b55bf17-dc54-47ed-813e-71392b2db2b4",
     "fields": {
-        "name": "location",
+        "name": "person",
         "color": "ff0000",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b"
     }
 },
 {
     "model": "documents.entitytype",
-    "pk": "63f1a5d7-b449-4f63-890f-3a6f54202e38",
+    "pk": "27478365-be5f-4d06-8e05-e791a10b4e8a",
     "fields": {
         "name": "number",
         "color": "ff0000",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b"
     }
 },
 {
     "model": "documents.entitytype",
-    "pk": "6fba3f08-f987-41f2-97dd-579d6a4595f3",
+    "pk": "4579f508-6d4d-4fd0-a1bb-8fa8fe8c112b",
     "fields": {
-        "name": "date",
+        "name": "location",
         "color": "ff0000",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b"
     }
 },
 {
     "model": "documents.entitytype",
-    "pk": "a6e74713-9506-4aac-a826-1d293185953d",
+    "pk": "5a8a15fc-3cba-4212-b793-df5cf975a160",
     "fields": {
-        "name": "person",
+        "name": "organization",
         "color": "ff0000",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b"
     }
 },
 {
     "model": "documents.entitytype",
-    "pk": "b6a370db-6d54-446d-96ad-f5244105da45",
+    "pk": "c6577a07-8a03-4bee-9edb-8b0428b26bf4",
     "fields": {
-        "name": "organization",
+        "name": "date",
         "color": "ff0000",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b"
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "348d340d-e8ae-4a6e-8a1c-cc71d9f554d7",
+    "pk": "0f0cb096-02f4-45c3-b997-0b7fbbab30f0",
     "fields": {
-        "element": "26ac9c54-10e9-4996-8cfa-9df1434774f6",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "PARIS",
+        "element": "4f90d19e-e255-4fa7-a644-9d611a62d967",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "DATUM",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "3b5850fc-cc4a-4200-8639-b23d360c69f8",
+    "pk": "5f36b188-61f8-40c9-bb68-6a53ee11c8bb",
     "fields": {
-        "element": "be2b81f0-dec4-41fd-a720-e8383244ee91",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "ROY",
+        "element": "4df12da3-657e-4373-aff0-2d97f06ae764",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "Lorem ipsum dolor sit amet",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "560159b2-6563-48ec-8ce4-9c600e346d71",
+    "pk": "7e8dcdcb-9e59-49dc-b420-cc7d29bab40f",
     "fields": {
-        "element": "b826c0e5-4877-487e-bd77-b4198cf76f4c",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "DATUM",
+        "element": "c975f120-35dd-4d27-9136-503eee141c78",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "PARIS",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "72a44064-b773-40c6-9984-9b205540ac13",
+    "pk": "80f4fead-a7ac-4168-b7c3-9ce5627ce779",
     "fields": {
-        "element": "6fb612a7-e337-4538-8ca9-f79d7b1c80f3",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "ROY",
+        "element": "6a10d9e5-d497-4653-a067-cd0314d2f806",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "PARIS",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "bac52ae2-6303-4a67-92b9-b872436e6815",
+    "pk": "950b9f03-126e-443d-bbfe-14804583e519",
     "fields": {
-        "element": "38cafdb6-bb8a-45bc-b514-f19cb27ac7a9",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "ROY",
+        "element": "d237b4d8-0f0f-4048-b8fb-88822eeab941",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "DATUM",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "c526a613-ea9d-4351-a6df-4a83d83b9383",
+    "pk": "bddc34e6-4513-4494-b903-a64a1af6fe41",
     "fields": {
-        "element": "30211bbd-f970-46f2-8010-6a03afa219d4",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "Lorem ipsum dolor sit amet",
+        "element": "ebc8c3f5-90d3-4269-91b0-bca2d82e83ce",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "ROY",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "cc171391-89d2-4ed8-a3c6-70b588f41153",
+    "pk": "dcf3e084-2a45-4538-a093-1d74f3316afd",
     "fields": {
-        "element": "ae67b0f1-dfee-464d-8c96-fa3150eb924f",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "PARIS",
+        "element": "1894f1ac-0e28-4b14-9c31-0429d068c419",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "ROY",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "cc5df7ac-a137-4fa4-8a71-0e152133bf48",
+    "pk": "e4036088-8cc5-4274-a47e-7f1a0cffe9a4",
     "fields": {
-        "element": "92edae95-97fd-44c9-a8f3-86aaabd3e685",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "DATUM",
+        "element": "df79e245-1acf-4bef-bbf3-346806bfa272",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "PARIS",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.transcription",
-    "pk": "e6c64593-5211-4787-997c-cdaa57ef8527",
+    "pk": "e7223e3f-85d2-4120-b983-de7065e8f2d1",
     "fields": {
-        "element": "a317a77b-9ddd-4f48-82cf-17d25aec30f6",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
+        "element": "588ce3be-858d-4963-a7ae-9e9ac593e604",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
         "text": "DATUM",
         "orientation": "horizontal-lr",
         "confidence": 1.0
@@ -1499,51 +1499,51 @@
 },
 {
     "model": "documents.transcription",
-    "pk": "f16d07b9-5431-4613-974b-fa9a275b96eb",
+    "pk": "fd9f370c-8dd9-4c1c-a4d0-9b3dd10b873d",
     "fields": {
-        "element": "9afab3a6-e895-4c0a-807d-d31354bd8b0a",
-        "worker_version": "ccf2a96f-ed15-495c-886b-b5068b01b9f8",
-        "worker_run": "a3adcf61-c7ce-48e1-8488-541ba1373740",
-        "text": "PARIS",
+        "element": "ed194a73-39ff-42f9-8133-dec044bf4792",
+        "worker_version": "9f68bd33-2dfa-44aa-b461-6ab72161a859",
+        "worker_run": "55d64c3a-0fc6-4d9f-9563-0661d0fb4a95",
+        "text": "ROY",
         "orientation": "horizontal-lr",
         "confidence": 1.0
     }
 },
 {
     "model": "documents.allowedmetadata",
-    "pk": "abf0de31-f528-42af-a3d3-6951ba9a59a2",
+    "pk": "1902466d-3de0-45ca-95c2-baa093c02c61",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "location",
-        "name": "location"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "date",
+        "name": "date"
     }
 },
 {
     "model": "documents.allowedmetadata",
-    "pk": "eb4ccf3c-1b4c-42c5-acad-ec0b40f8ae3b",
+    "pk": "6e118f91-8ee7-4dc6-acd5-847393c3ddf9",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
         "type": "text",
         "name": "folio"
     }
 },
 {
     "model": "documents.allowedmetadata",
-    "pk": "faf366c7-66e3-4702-9d0f-69f165ff2730",
+    "pk": "d1d30e40-9b1f-4680-a659-53c9c36caf45",
     "fields": {
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
-        "type": "date",
-        "name": "date"
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
+        "type": "location",
+        "name": "location"
     }
 },
 {
     "model": "documents.metadata",
-    "pk": "041e2100-3e15-4898-83cc-cdb6ff86bc86",
+    "pk": "03f42c94-337c-41f8-9a3f-3c107e48c0ab",
     "fields": {
-        "element": "bd5a671f-ca17-476e-a43d-25b4aa386abf",
-        "name": "number",
+        "element": "f137753e-86f3-4424-99c1-4b3ddd39c518",
+        "name": "folio",
         "type": "text",
-        "value": "1",
+        "value": "2r",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1551,12 +1551,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "11b19ba3-6b0d-48b5-a68b-aac627227e11",
+    "pk": "0481986f-d8cc-4ef3-aaef-9d7215405887",
     "fields": {
-        "element": "7fa801e7-2b7a-46b5-9c2a-19a227ba56d6",
+        "element": "b9e34045-cd42-4611-9140-9b36c255aa7d",
         "name": "folio",
         "type": "text",
-        "value": "2r",
+        "value": "1r",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1564,12 +1564,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "52abcc33-23b7-4482-9607-786bc789e578",
+    "pk": "0d319711-d6f5-429d-8973-78e2f891670e",
     "fields": {
-        "element": "b786da45-c90c-4569-aa31-1b4351bc9e34",
+        "element": "4df12da3-657e-4373-aff0-2d97f06ae764",
         "name": "folio",
         "type": "text",
-        "value": "2r",
+        "value": "1r",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1577,12 +1577,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "765f5186-16dc-4bf6-88c6-80d47d1db628",
+    "pk": "1af65499-291c-4fdc-a602-a88a2ea87540",
     "fields": {
-        "element": "7f3bbf36-2f96-4297-adc3-4258e3456c29",
-        "name": "number",
+        "element": "80208152-f014-4c73-bdb3-f4e961b023a7",
+        "name": "folio",
         "type": "text",
-        "value": "5",
+        "value": "1v",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1590,12 +1590,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "806431c0-093d-4172-884f-8b3e83ea84be",
+    "pk": "64327dd3-26dd-4a8f-b989-53889e8b5210",
     "fields": {
-        "element": "c77fbfa2-1edc-4c83-bb60-a59773be6f39",
+        "element": "9a2ee49d-0c3c-4c41-bdc7-5cf696c23d11",
         "name": "number",
         "type": "text",
-        "value": "2",
+        "value": "1",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1603,12 +1603,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "8e37aaf1-5ba2-4188-98aa-11667f36ac10",
+    "pk": "71318c8d-f312-4200-8651-7efc23e5e8d2",
     "fields": {
-        "element": "dc730372-6e7a-4baf-9d0a-7f1ca89802f9",
+        "element": "3e88150e-0dd5-4f1f-bdf3-5ff962df5520",
         "name": "number",
         "type": "text",
-        "value": "4",
+        "value": "5",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1616,12 +1616,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "92fa129a-e147-46f0-9a98-400c78619844",
+    "pk": "793136d1-2407-4c05-8a4e-22ebf931a197",
     "fields": {
-        "element": "809a018e-3b3e-4ba0-9e10-7378df428f8b",
-        "name": "number",
+        "element": "842cd8c3-526c-46da-81a9-c033e9cc276c",
+        "name": "folio",
         "type": "text",
-        "value": "3",
+        "value": "1v",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1629,12 +1629,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "a5569b70-8f9a-4f21-83e6-de0841aeeb4b",
+    "pk": "a3577808-1f42-4eac-9a12-fbb95f4f700f",
     "fields": {
-        "element": "4bb67850-d7ba-459e-a106-b2cf48f9f6cb",
+        "element": "132bd0a4-51b3-409c-a794-790f98885c04",
         "name": "folio",
         "type": "text",
-        "value": "1v",
+        "value": "2r",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1642,12 +1642,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "a7b28339-a1e9-4d31-bf9d-a24296bb8105",
+    "pk": "a4820235-d5da-4e27-af57-b85b4659906e",
     "fields": {
-        "element": "76a56cff-9680-4c5a-8a01-53b43700b093",
-        "name": "folio",
+        "element": "4d1642e0-a456-4ea6-a0e7-d4190b85dd23",
+        "name": "number",
         "type": "text",
-        "value": "1v",
+        "value": "4",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1655,12 +1655,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "c17618a2-8b96-4b61-9361-1559540a4871",
+    "pk": "a75a0a28-f5aa-4332-b310-95d140893df4",
     "fields": {
-        "element": "590d69b1-95c8-4ba0-8617-9c0b022a4ba8",
-        "name": "folio",
+        "element": "659147b8-aa8d-430d-be80-bfb45abbc86c",
+        "name": "number",
         "type": "text",
-        "value": "1r",
+        "value": "3",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1668,12 +1668,12 @@
 },
 {
     "model": "documents.metadata",
-    "pk": "d1c624a7-e32e-4473-ab71-d5c39e449a76",
+    "pk": "c1fc4c6b-aa35-40bb-aee7-1b2819accd9a",
     "fields": {
-        "element": "30211bbd-f970-46f2-8010-6a03afa219d4",
-        "name": "folio",
+        "element": "2d1dae06-f06e-4675-acb3-cf7d89d391f9",
+        "name": "number",
         "type": "text",
-        "value": "1r",
+        "value": "2",
         "entity": null,
         "worker_version": null,
         "worker_run": null
@@ -1696,12 +1696,12 @@
 },
 {
     "model": "images.image",
-    "pk": "0d4b917a-4b05-412e-9a32-78da2031dd70",
+    "pk": "651a1319-22d6-4bd6-a385-a64f0235228f",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "server": 1,
-        "path": "img4",
+        "path": "img5",
         "width": 1000,
         "height": 1000,
         "hash": null,
@@ -1710,12 +1710,12 @@
 },
 {
     "model": "images.image",
-    "pk": "6358303d-1167-489c-b456-2ad6f80b7909",
+    "pk": "ad2a47fa-c3a6-4b0a-9e35-44563187350e",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "server": 1,
-        "path": "img5",
+        "path": "img2",
         "width": 1000,
         "height": 1000,
         "hash": null,
@@ -1724,12 +1724,12 @@
 },
 {
     "model": "images.image",
-    "pk": "b6ac34ae-c245-4bf5-8c24-cee3b25a8498",
+    "pk": "b6d5c8c8-c27f-43a8-8edb-0cb287eda8b3",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "server": 1,
-        "path": "img1",
+        "path": "img3",
         "width": 1000,
         "height": 1000,
         "hash": null,
@@ -1738,12 +1738,12 @@
 },
 {
     "model": "images.image",
-    "pk": "da507478-8d0a-41d5-8ad7-5b062521e984",
+    "pk": "cf799a21-7bd2-45f5-a83d-272ee97d6b20",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "server": 1,
-        "path": "img2",
+        "path": "img6",
         "width": 1000,
         "height": 1000,
         "hash": null,
@@ -1752,12 +1752,12 @@
 },
 {
     "model": "images.image",
-    "pk": "e7b06b72-703b-45aa-9c91-12eba0f1e9d9",
+    "pk": "d8cc120e-fb8c-4057-a243-558a02213f54",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "server": 1,
-        "path": "img3",
+        "path": "img4",
         "width": 1000,
         "height": 1000,
         "hash": null,
@@ -1766,12 +1766,12 @@
 },
 {
     "model": "images.image",
-    "pk": "fa147dd6-f548-478d-a2ce-de54e28aeda9",
+    "pk": "f5fb4f00-ee17-4d71-8021-543bb01ba0bb",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
         "server": 1,
-        "path": "img6",
+        "path": "img1",
         "width": 1000,
         "height": 1000,
         "hash": null,
@@ -1780,56 +1780,56 @@
 },
 {
     "model": "users.right",
-    "pk": "552b002f-df32-4a69-ba96-cb55735c5c88",
+    "pk": "26a8c15c-32eb-49e7-9819-08a10e57163a",
     "fields": {
         "user": 2,
         "group": null,
         "content_type": 21,
-        "content_id": "b1be7812-a2b1-4d26-a031-8d85869228df",
+        "content_id": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
         "level": 100
     }
 },
 {
     "model": "users.right",
-    "pk": "a2e659c9-bb9e-4c5a-9667-44b393da48e0",
+    "pk": "4daf40a9-e44b-430c-9ad6-9a1bcf5e0296",
     "fields": {
-        "user": 4,
+        "user": 2,
         "group": null,
-        "content_type": 34,
-        "content_id": "3bb20c38-2a86-4504-be0f-e63e3b94d65b",
+        "content_type": 13,
+        "content_id": "787cc46d-2877-4cd7-8bac-f79d092d8550",
         "level": 10
     }
 },
 {
     "model": "users.right",
-    "pk": "de2d22ca-2dc3-4037-8048-f2344eeefd26",
+    "pk": "52a59192-b791-4e1a-b3f9-dcaca8bbf53a",
     "fields": {
-        "user": 2,
+        "user": 4,
         "group": null,
         "content_type": 34,
-        "content_id": "3bb20c38-2a86-4504-be0f-e63e3b94d65b",
-        "level": 100
+        "content_id": "7b55538f-262a-4d16-9abe-477d49bedce6",
+        "level": 10
     }
 },
 {
     "model": "users.right",
-    "pk": "e13f9b34-4e97-4f99-8453-65f29520e680",
+    "pk": "cae06f2d-dce3-4021-90a9-74164dd0bab2",
     "fields": {
         "user": 2,
         "group": null,
-        "content_type": 13,
-        "content_id": "f2a2e1cb-2090-4b69-b204-1a40440e2619",
-        "level": 10
+        "content_type": 34,
+        "content_id": "7b55538f-262a-4d16-9abe-477d49bedce6",
+        "level": 100
     }
 },
 {
     "model": "users.right",
-    "pk": "e2d2fa8c-3a28-4b9b-a93b-5fba3d9e7157",
+    "pk": "d11a61eb-7197-45af-8375-e3650b534b87",
     "fields": {
         "user": 3,
         "group": null,
         "content_type": 34,
-        "content_id": "3bb20c38-2a86-4504-be0f-e63e3b94d65b",
+        "content_id": "7b55538f-262a-4d16-9abe-477d49bedce6",
         "level": 50
     }
 },
@@ -1837,13 +1837,17 @@
     "model": "users.user",
     "pk": 1,
     "fields": {
-        "password": "pbkdf2_sha256$720000$35EvN3z9hMVfoshEvJCX17$HTH5LH72xqd/ym03bfkdq93US3a2MKqzicyei5/zZQI=",
+        "password": "pbkdf2_sha256$600000$0ZmfEB4W0Hf1ESgG3aWVuN$EZNx4llNwL0mi+Zdvw5O+1LRkELDgm0bYwMS8Jl82/4=",
         "last_login": null,
         "email": "root@root.fr",
         "display_name": "Admin",
         "is_active": true,
         "is_admin": true,
         "verified_email": true,
+        "can_upload_s3_image": false,
+        "can_create_iiif_image": false,
+        "can_ingest": false,
+        "can_create_worker_version": false,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
     }
@@ -1852,13 +1856,17 @@
     "model": "users.user",
     "pk": 2,
     "fields": {
-        "password": "pbkdf2_sha256$720000$wmZ5ZDkcvtlXOcUgtAm6sv$Y1Wl6SzWPGbKEsLFBSuQ4snL7RsKdUQsrfFDTWQVIro=",
+        "password": "pbkdf2_sha256$600000$QJoEp6azwQAVJ3hRSIguj7$y7Sm+YYsgn9ihRQc0ILbfk5IQ9qJqJ3tDklHL3pBHaA=",
         "last_login": null,
         "email": "user@user.fr",
         "display_name": "Test user",
         "is_active": true,
         "is_admin": false,
         "verified_email": true,
+        "can_upload_s3_image": false,
+        "can_create_iiif_image": false,
+        "can_ingest": false,
+        "can_create_worker_version": false,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
     }
@@ -1874,6 +1882,10 @@
         "is_active": true,
         "is_admin": false,
         "verified_email": true,
+        "can_upload_s3_image": false,
+        "can_create_iiif_image": false,
+        "can_ingest": false,
+        "can_create_worker_version": false,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
     }
@@ -1889,13 +1901,17 @@
         "is_active": true,
         "is_admin": false,
         "verified_email": true,
+        "can_upload_s3_image": false,
+        "can_create_iiif_image": false,
+        "can_ingest": false,
+        "can_create_worker_version": false,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
     }
 },
 {
     "model": "users.group",
-    "pk": "3bb20c38-2a86-4504-be0f-e63e3b94d65b",
+    "pk": "7b55538f-262a-4d16-9abe-477d49bedce6",
     "fields": {
         "name": "User group",
         "public": false,
@@ -3066,186 +3082,150 @@
 {
     "model": "auth.permission",
     "pk": 130,
-    "fields": {
-        "name": "Can add user scope",
-        "content_type": 36,
-        "codename": "add_userscope"
-    }
-},
-{
-    "model": "auth.permission",
-    "pk": 131,
-    "fields": {
-        "name": "Can change user scope",
-        "content_type": 36,
-        "codename": "change_userscope"
-    }
-},
-{
-    "model": "auth.permission",
-    "pk": 132,
-    "fields": {
-        "name": "Can delete user scope",
-        "content_type": 36,
-        "codename": "delete_userscope"
-    }
-},
-{
-    "model": "auth.permission",
-    "pk": 133,
-    "fields": {
-        "name": "Can view user scope",
-        "content_type": 36,
-        "codename": "view_userscope"
-    }
-},
-{
-    "model": "auth.permission",
-    "pk": 134,
     "fields": {
         "name": "Can add corpus worker version",
-        "content_type": 37,
+        "content_type": 36,
         "codename": "add_corpusworkerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 135,
+    "pk": 131,
     "fields": {
         "name": "Can change corpus worker version",
-        "content_type": 37,
+        "content_type": 36,
         "codename": "change_corpusworkerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 136,
+    "pk": 132,
     "fields": {
         "name": "Can delete corpus worker version",
-        "content_type": 37,
+        "content_type": 36,
         "codename": "delete_corpusworkerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 137,
+    "pk": 133,
     "fields": {
         "name": "Can view corpus worker version",
-        "content_type": 37,
+        "content_type": 36,
         "codename": "view_corpusworkerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 138,
+    "pk": 134,
     "fields": {
         "name": "Can add data file",
-        "content_type": 38,
+        "content_type": 37,
         "codename": "add_datafile"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 139,
+    "pk": 135,
     "fields": {
         "name": "Can change data file",
-        "content_type": 38,
+        "content_type": 37,
         "codename": "change_datafile"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 140,
+    "pk": 136,
     "fields": {
         "name": "Can delete data file",
-        "content_type": 38,
+        "content_type": 37,
         "codename": "delete_datafile"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 141,
+    "pk": 137,
     "fields": {
         "name": "Can view data file",
-        "content_type": 38,
+        "content_type": 37,
         "codename": "view_datafile"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 142,
+    "pk": 138,
     "fields": {
         "name": "Can add process",
-        "content_type": 39,
+        "content_type": 38,
         "codename": "add_process"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 143,
+    "pk": 139,
     "fields": {
         "name": "Can change process",
-        "content_type": 39,
+        "content_type": 38,
         "codename": "change_process"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 144,
+    "pk": 140,
     "fields": {
         "name": "Can delete process",
-        "content_type": 39,
+        "content_type": 38,
         "codename": "delete_process"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 145,
+    "pk": 141,
     "fields": {
         "name": "Can view process",
-        "content_type": 39,
+        "content_type": 38,
         "codename": "view_process"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 146,
+    "pk": 142,
     "fields": {
         "name": "Can add process element",
-        "content_type": 40,
+        "content_type": 39,
         "codename": "add_processelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 147,
+    "pk": 143,
     "fields": {
         "name": "Can change process element",
-        "content_type": 40,
+        "content_type": 39,
         "codename": "change_processelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 148,
+    "pk": 144,
     "fields": {
         "name": "Can delete process element",
-        "content_type": 40,
+        "content_type": 39,
         "codename": "delete_processelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 149,
+    "pk": 145,
     "fields": {
         "name": "Can view process element",
-        "content_type": 40,
+        "content_type": 39,
         "codename": "view_processelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 150,
+    "pk": 146,
     "fields": {
         "name": "Can add worker",
         "content_type": 2,
@@ -3254,7 +3234,7 @@
 },
 {
     "model": "auth.permission",
-    "pk": 151,
+    "pk": 147,
     "fields": {
         "name": "Can change worker",
         "content_type": 2,
@@ -3263,7 +3243,7 @@
 },
 {
     "model": "auth.permission",
-    "pk": 152,
+    "pk": 148,
     "fields": {
         "name": "Can delete worker",
         "content_type": 2,
@@ -3272,7 +3252,7 @@
 },
 {
     "model": "auth.permission",
-    "pk": 153,
+    "pk": 149,
     "fields": {
         "name": "Can view worker",
         "content_type": 2,
@@ -3281,487 +3261,487 @@
 },
 {
     "model": "auth.permission",
-    "pk": 154,
+    "pk": 150,
     "fields": {
         "name": "Can add worker activity",
-        "content_type": 41,
+        "content_type": 40,
         "codename": "add_workeractivity"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 155,
+    "pk": 151,
     "fields": {
         "name": "Can change worker activity",
-        "content_type": 41,
+        "content_type": 40,
         "codename": "change_workeractivity"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 156,
+    "pk": 152,
     "fields": {
         "name": "Can delete worker activity",
-        "content_type": 41,
+        "content_type": 40,
         "codename": "delete_workeractivity"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 157,
+    "pk": 153,
     "fields": {
         "name": "Can view worker activity",
-        "content_type": 41,
+        "content_type": 40,
         "codename": "view_workeractivity"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 158,
+    "pk": 154,
     "fields": {
         "name": "Can add worker configuration",
-        "content_type": 42,
+        "content_type": 41,
         "codename": "add_workerconfiguration"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 159,
+    "pk": 155,
     "fields": {
         "name": "Can change worker configuration",
-        "content_type": 42,
+        "content_type": 41,
         "codename": "change_workerconfiguration"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 160,
+    "pk": 156,
     "fields": {
         "name": "Can delete worker configuration",
-        "content_type": 42,
+        "content_type": 41,
         "codename": "delete_workerconfiguration"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 161,
+    "pk": 157,
     "fields": {
         "name": "Can view worker configuration",
-        "content_type": 42,
+        "content_type": 41,
         "codename": "view_workerconfiguration"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 162,
+    "pk": 158,
     "fields": {
         "name": "Can add worker type",
-        "content_type": 43,
+        "content_type": 42,
         "codename": "add_workertype"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 163,
+    "pk": 159,
     "fields": {
         "name": "Can change worker type",
-        "content_type": 43,
+        "content_type": 42,
         "codename": "change_workertype"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 164,
+    "pk": 160,
     "fields": {
         "name": "Can delete worker type",
-        "content_type": 43,
+        "content_type": 42,
         "codename": "delete_workertype"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 165,
+    "pk": 161,
     "fields": {
         "name": "Can view worker type",
-        "content_type": 43,
+        "content_type": 42,
         "codename": "view_workertype"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 166,
+    "pk": 162,
     "fields": {
         "name": "Can add worker version",
-        "content_type": 44,
+        "content_type": 43,
         "codename": "add_workerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 167,
+    "pk": 163,
     "fields": {
         "name": "Can change worker version",
-        "content_type": 44,
+        "content_type": 43,
         "codename": "change_workerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 168,
+    "pk": 164,
     "fields": {
         "name": "Can delete worker version",
-        "content_type": 44,
+        "content_type": 43,
         "codename": "delete_workerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 169,
+    "pk": 165,
     "fields": {
         "name": "Can view worker version",
-        "content_type": 44,
+        "content_type": 43,
         "codename": "view_workerversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 170,
+    "pk": 166,
     "fields": {
         "name": "Can add worker run",
-        "content_type": 45,
+        "content_type": 44,
         "codename": "add_workerrun"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 171,
+    "pk": 167,
     "fields": {
         "name": "Can change worker run",
-        "content_type": 45,
+        "content_type": 44,
         "codename": "change_workerrun"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 172,
+    "pk": 168,
     "fields": {
         "name": "Can delete worker run",
-        "content_type": 45,
+        "content_type": 44,
         "codename": "delete_workerrun"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 173,
+    "pk": 169,
     "fields": {
         "name": "Can view worker run",
-        "content_type": 45,
+        "content_type": 44,
         "codename": "view_workerrun"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 174,
+    "pk": 170,
     "fields": {
         "name": "Can add process dataset set",
-        "content_type": 46,
+        "content_type": 45,
         "codename": "add_processdatasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 175,
+    "pk": 171,
     "fields": {
         "name": "Can change process dataset set",
-        "content_type": 46,
+        "content_type": 45,
         "codename": "change_processdatasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 176,
+    "pk": 172,
     "fields": {
         "name": "Can delete process dataset set",
-        "content_type": 46,
+        "content_type": 45,
         "codename": "delete_processdatasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 177,
+    "pk": 173,
     "fields": {
         "name": "Can view process dataset set",
-        "content_type": 46,
+        "content_type": 45,
         "codename": "view_processdatasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 178,
+    "pk": 174,
     "fields": {
         "name": "Can add dataset",
-        "content_type": 47,
+        "content_type": 46,
         "codename": "add_dataset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 179,
+    "pk": 175,
     "fields": {
         "name": "Can change dataset",
-        "content_type": 47,
+        "content_type": 46,
         "codename": "change_dataset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 180,
+    "pk": 176,
     "fields": {
         "name": "Can delete dataset",
-        "content_type": 47,
+        "content_type": 46,
         "codename": "delete_dataset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 181,
+    "pk": 177,
     "fields": {
         "name": "Can view dataset",
-        "content_type": 47,
+        "content_type": 46,
         "codename": "view_dataset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 182,
+    "pk": 178,
     "fields": {
         "name": "Can add metric key",
-        "content_type": 48,
+        "content_type": 47,
         "codename": "add_metrickey"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 183,
+    "pk": 179,
     "fields": {
         "name": "Can change metric key",
-        "content_type": 48,
+        "content_type": 47,
         "codename": "change_metrickey"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 184,
+    "pk": 180,
     "fields": {
         "name": "Can delete metric key",
-        "content_type": 48,
+        "content_type": 47,
         "codename": "delete_metrickey"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 185,
+    "pk": 181,
     "fields": {
         "name": "Can view metric key",
-        "content_type": 48,
+        "content_type": 47,
         "codename": "view_metrickey"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 186,
+    "pk": 182,
     "fields": {
         "name": "Can add model",
-        "content_type": 49,
+        "content_type": 48,
         "codename": "add_model"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 187,
+    "pk": 183,
     "fields": {
         "name": "Can change model",
-        "content_type": 49,
+        "content_type": 48,
         "codename": "change_model"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 188,
+    "pk": 184,
     "fields": {
         "name": "Can delete model",
-        "content_type": 49,
+        "content_type": 48,
         "codename": "delete_model"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 189,
+    "pk": 185,
     "fields": {
         "name": "Can view model",
-        "content_type": 49,
+        "content_type": 48,
         "codename": "view_model"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 190,
+    "pk": 186,
     "fields": {
         "name": "Can add model version",
-        "content_type": 50,
+        "content_type": 49,
         "codename": "add_modelversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 191,
+    "pk": 187,
     "fields": {
         "name": "Can change model version",
-        "content_type": 50,
+        "content_type": 49,
         "codename": "change_modelversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 192,
+    "pk": 188,
     "fields": {
         "name": "Can delete model version",
-        "content_type": 50,
+        "content_type": 49,
         "codename": "delete_modelversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 193,
+    "pk": 189,
     "fields": {
         "name": "Can view model version",
-        "content_type": 50,
+        "content_type": 49,
         "codename": "view_modelversion"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 194,
+    "pk": 190,
     "fields": {
         "name": "Can add metric value",
-        "content_type": 51,
+        "content_type": 50,
         "codename": "add_metricvalue"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 195,
+    "pk": 191,
     "fields": {
         "name": "Can change metric value",
-        "content_type": 51,
+        "content_type": 50,
         "codename": "change_metricvalue"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 196,
+    "pk": 192,
     "fields": {
         "name": "Can delete metric value",
-        "content_type": 51,
+        "content_type": 50,
         "codename": "delete_metricvalue"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 197,
+    "pk": 193,
     "fields": {
         "name": "Can view metric value",
-        "content_type": 51,
+        "content_type": 50,
         "codename": "view_metricvalue"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 198,
+    "pk": 194,
     "fields": {
         "name": "Can add dataset element",
-        "content_type": 52,
+        "content_type": 51,
         "codename": "add_datasetelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 199,
+    "pk": 195,
     "fields": {
         "name": "Can change dataset element",
-        "content_type": 52,
+        "content_type": 51,
         "codename": "change_datasetelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 200,
+    "pk": 196,
     "fields": {
         "name": "Can delete dataset element",
-        "content_type": 52,
+        "content_type": 51,
         "codename": "delete_datasetelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 201,
+    "pk": 197,
     "fields": {
         "name": "Can view dataset element",
-        "content_type": 52,
+        "content_type": 51,
         "codename": "view_datasetelement"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 202,
+    "pk": 198,
     "fields": {
         "name": "Can add dataset set",
-        "content_type": 53,
+        "content_type": 52,
         "codename": "add_datasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 203,
+    "pk": 199,
     "fields": {
         "name": "Can change dataset set",
-        "content_type": 53,
+        "content_type": 52,
         "codename": "change_datasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 204,
+    "pk": 200,
     "fields": {
         "name": "Can delete dataset set",
-        "content_type": 53,
+        "content_type": 52,
         "codename": "delete_datasetset"
     }
 },
 {
     "model": "auth.permission",
-    "pk": 205,
+    "pk": 201,
     "fields": {
         "name": "Can view dataset set",
-        "content_type": 53,
+        "content_type": 52,
         "codename": "view_datasetset"
     }
 },
 {
     "model": "ponos.farm",
-    "pk": "f2a2e1cb-2090-4b69-b204-1a40440e2619",
+    "pk": "787cc46d-2877-4cd7-8bac-f79d092d8550",
     "fields": {
         "name": "Wheat farm",
-        "seed": "c04bde99f4349c3c806e4e82dc60c42163fc3820a421ce82c4055d67ae4ec4bb"
+        "seed": "d90dfa09bb51171382a67d5390b643e7040e1a3d50aed2472889d2d45a0fc08a"
     }
 },
 {
     "model": "training.dataset",
-    "pk": "673cba70-7596-4a91-9921-49eebe97f63f",
+    "pk": "5661afe1-89ce-441c-b116-c9900831bf01",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
         "creator": 2,
         "task": null,
         "name": "First Dataset",
@@ -3772,11 +3752,11 @@
 },
 {
     "model": "training.dataset",
-    "pk": "da0300a9-55e5-4a0d-90a2-4fb42d0a4744",
+    "pk": "a89810dd-38a6-4fe0-81b8-870a2efd8340",
     "fields": {
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "corpus": "b1be7812-a2b1-4d26-a031-8d85869228df",
+        "corpus": "a5047c63-e91c-4cf1-9cd7-068bc3e1de9b",
         "creator": 2,
         "task": null,
         "name": "Second Dataset",
@@ -3787,50 +3767,50 @@
 },
 {
     "model": "training.datasetset",
-    "pk": "3cd3cbbd-6454-4977-814c-42fc1a4c858a",
+    "pk": "53a16c0f-7aee-4893-9063-f833255f5cd5",
     "fields": {
-        "name": "dev",
-        "dataset": "da0300a9-55e5-4a0d-90a2-4fb42d0a4744"
+        "name": "train",
+        "dataset": "5661afe1-89ce-441c-b116-c9900831bf01"
     }
 },
 {
     "model": "training.datasetset",
-    "pk": "3e1573e3-044b-47b0-b2b3-27eda5b4e441",
+    "pk": "8c29f873-54ad-4025-b871-0756aee654db",
     "fields": {
-        "name": "test",
-        "dataset": "673cba70-7596-4a91-9921-49eebe97f63f"
+        "name": "train",
+        "dataset": "a89810dd-38a6-4fe0-81b8-870a2efd8340"
     }
 },
 {
     "model": "training.datasetset",
-    "pk": "4454e41b-c60c-4d68-b428-d07c74af1f17",
+    "pk": "c59f3671-4b48-4d6d-a276-0aeef9f0918a",
     "fields": {
-        "name": "dev",
-        "dataset": "673cba70-7596-4a91-9921-49eebe97f63f"
+        "name": "test",
+        "dataset": "5661afe1-89ce-441c-b116-c9900831bf01"
     }
 },
 {
     "model": "training.datasetset",
-    "pk": "5333a80b-ff91-4a6b-9703-b26b8f472118",
+    "pk": "d40ac85f-2114-4c25-9ae6-20fe3b586199",
     "fields": {
-        "name": "test",
-        "dataset": "da0300a9-55e5-4a0d-90a2-4fb42d0a4744"
+        "name": "dev",
+        "dataset": "5661afe1-89ce-441c-b116-c9900831bf01"
     }
 },
 {
     "model": "training.datasetset",
-    "pk": "94c3d754-21ad-49e3-90d0-3874e54aa029",
+    "pk": "f7a6d650-b66d-49d7-895a-5ed5107cf6e2",
     "fields": {
-        "name": "train",
-        "dataset": "da0300a9-55e5-4a0d-90a2-4fb42d0a4744"
+        "name": "dev",
+        "dataset": "a89810dd-38a6-4fe0-81b8-870a2efd8340"
     }
 },
 {
     "model": "training.datasetset",
-    "pk": "d2e394b1-6a76-4b83-8966-392422317d2b",
+    "pk": "fe34e567-2cb8-4adf-87c5-fb5f59ccab4b",
     "fields": {
-        "name": "train",
-        "dataset": "673cba70-7596-4a91-9921-49eebe97f63f"
+        "name": "test",
+        "dataset": "a89810dd-38a6-4fe0-81b8-870a2efd8340"
     }
 }
 ]
diff --git a/arkindex/images/api.py b/arkindex/images/api.py
index cefedc15c8..294283cc43 100644
--- a/arkindex/images/api.py
+++ b/arkindex/images/api.py
@@ -16,8 +16,7 @@ from arkindex.images.serializers import (
     ImageSerializer,
     ImageUploadSerializer,
 )
-from arkindex.project.permissions import IsVerified
-from arkindex.users.models import Scope
+from arkindex.project.permissions import CanCreateIIIFImage, CanUploadS3Image, IsVerified
 
 
 @extend_schema_view(
@@ -47,8 +46,7 @@ class ImageCreate(CreateAPIView):
     """
 
     serializer_class = ImageUploadSerializer
-    permission_classes = (IsVerified, )
-    scopes = (Scope.UploadS3Image, )
+    permission_classes = (IsVerified, CanUploadS3Image,)
 
     def perform_create(self, serializer):
         image_hash = serializer.validated_data.get("hash")
@@ -78,8 +76,7 @@ class IIIFURLCreate(CreateAPIView):
     The URL should be of the image's identifier, not of its Image Information request (`/info.json`).
     """
     serializer_class = IIIFImageSerializer
-    permission_classes = (IsVerified, )
-    scopes = (Scope.CreateIIIFImage, )
+    permission_classes = (IsVerified, CanCreateIIIFImage, )
 
 
 class IIIFInformationCreate(CreateAPIView):
@@ -89,8 +86,7 @@ class IIIFInformationCreate(CreateAPIView):
     Image Information specification: https://iiif.io/api/image/2.1/#image-information
     """
     serializer_class = ImageInformationSerializer
-    permission_classes = (IsVerified, )
-    scopes = (Scope.CreateIIIFImage, )
+    permission_classes = (IsVerified, CanCreateIIIFImage, )
 
     @extend_schema(
         operation_id="CreateIIIFInformation",
diff --git a/arkindex/images/tests/test_image_api.py b/arkindex/images/tests/test_image_api.py
index f54a8b443e..ccac55f3bc 100644
--- a/arkindex/images/tests/test_image_api.py
+++ b/arkindex/images/tests/test_image_api.py
@@ -11,7 +11,6 @@ from arkindex.ponos.models import Farm
 from arkindex.process.models import Process, ProcessMode
 from arkindex.project.aws import S3FileStatus
 from arkindex.project.tests import FixtureAPITestCase
-from arkindex.users.models import Scope
 
 
 class ImageMethods:
@@ -43,24 +42,24 @@ class TestImageApi(FixtureAPITestCase):
             self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
     def test_create_image_requires_scope(self):
-        self.assertFalse(self.user.user_scopes.filter(scope=Scope.UploadS3Image).exists())
+        self.assertFalse(self.user.can_upload_s3_image)
         self.client.force_login(self.user)
 
-        with self.assertNumQueries(3):
+        with self.assertNumQueries(2):
             response = self.client.post(reverse("api:image-create"), {"hash": self.image_hash})
             self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
         self.assertDictEqual(response.json(), {
-            "detail": "You do not have permission to perform this action.",
-            "missing_scopes": [Scope.UploadS3Image.value],
+            "detail": "You do not have permission to upload images to S3.",
         })
 
-        self.user.user_scopes.create(scope=Scope.UploadS3Image)
+        self.user.can_upload_s3_image = True
+        self.user.save()
         response = self.client.post(reverse("api:image-create"), {"hash": self.image_hash})
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
 
     def test_create_image_admin_noscope(self):
-        self.assertFalse(self.superuser.user_scopes.filter(scope=Scope.UploadS3Image).exists())
+        self.assertFalse(self.superuser.can_upload_s3_image)
         self.client.force_login(self.superuser)
 
         with self.assertNumQueries(5):
@@ -487,7 +486,7 @@ class TestImageApi(FixtureAPITestCase):
         })
 
     def test_create_iiif_image_scope(self):
-        self.assertFalse(self.user.user_scopes.filter(scope=Scope.CreateIIIFImage).exists())
+        self.assertFalse(self.user.can_create_iiif_image)
         self.client.force_login(self.user)
         response = self.client.post(
             reverse("api:iiif-url-create"),
@@ -495,11 +494,11 @@ class TestImageApi(FixtureAPITestCase):
         )
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
         self.assertDictEqual(response.json(), {
-            "detail": "You do not have permission to perform this action.",
-            "missing_scopes": [Scope.CreateIIIFImage.value],
+            "detail": "You do not have permission to create IIIF images.",
         })
 
-        self.user.user_scopes.create(scope=Scope.CreateIIIFImage)
+        self.user.can_create_iiif_image = True
+        self.user.save()
         response = self.client.post(
             reverse("api:iiif-url-create"),
             {"url": "https://test-iiif-server.teklia.com/images/image_path"}
@@ -509,7 +508,7 @@ class TestImageApi(FixtureAPITestCase):
 
     def test_create_iiif_image_admin_noscope(self):
         self.client.force_login(self.superuser)
-        self.assertFalse(self.superuser.user_scopes.filter(scope=Scope.CreateIIIFImage).exists())
+        self.assertFalse(self.superuser.can_create_iiif_image)
         response = self.client.post(
             reverse("api:iiif-url-create"),
             {"url": "https://test-iiif-server.teklia.com/images/image_path"}
@@ -616,7 +615,7 @@ class TestImageApi(FixtureAPITestCase):
         process.run()
         task = process.tasks.first()
         # The user scope should not be necessary with Ponos task authentication
-        self.assertFalse(self.user.user_scopes.filter(scope=Scope.CreateIIIFImage).exists())
+        self.assertFalse(self.user.can_create_iiif_image)
 
         response = self.client.post(
             reverse("api:iiif-info-create"),
@@ -663,7 +662,7 @@ class TestImageApi(FixtureAPITestCase):
         process.run()
         task = process.tasks.first()
         # The user scope should not be necessary with Ponos task authentication
-        self.assertFalse(self.user.user_scopes.filter(scope=Scope.CreateIIIFImage).exists())
+        self.assertFalse(self.user.can_create_iiif_image)
 
         response = self.client.post(
             reverse("api:iiif-info-create"),
@@ -695,7 +694,7 @@ class TestImageApi(FixtureAPITestCase):
         })
 
     def test_create_image_information_external_scope(self):
-        self.assertFalse(self.user.user_scopes.filter(scope=Scope.CreateIIIFImage).exists())
+        self.assertFalse(self.user.can_create_iiif_image)
         self.client.force_login(self.user)
         payload = {
             "@id": "https://test-iiif-server.teklia.com/images/image_path",
@@ -706,7 +705,8 @@ class TestImageApi(FixtureAPITestCase):
         response = self.client.post(reverse("api:iiif-info-create"), payload)
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
-        self.user.user_scopes.create(scope=Scope.CreateIIIFImage)
+        self.user.can_create_iiif_image = True
+        self.user.save()
         response = self.client.post(reverse("api:iiif-info-create"), payload)
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         data = response.json()
diff --git a/arkindex/process/api.py b/arkindex/process/api.py
index e7c63d12b2..16785a6719 100644
--- a/arkindex/process/api.py
+++ b/arkindex/process/api.py
@@ -112,11 +112,11 @@ from arkindex.project.mixins import (
 )
 from arkindex.project.openapi import UUID_OR_FALSE, UUID_OR_STR
 from arkindex.project.pagination import CountCursorPagination
-from arkindex.project.permissions import IsVerified, IsVerifiedOrReadOnly
+from arkindex.project.permissions import CanIngest, IsVerified, IsVerifiedOrReadOnly
 from arkindex.project.tools import PercentileCont
 from arkindex.project.triggers import create_process_failures, process_delete
 from arkindex.training.models import DatasetSet, Model
-from arkindex.users.models import Role, Scope
+from arkindex.users.models import Role
 
 logger = logging.getLogger(__name__)
 
@@ -2078,8 +2078,7 @@ class BucketList(ListAPIView):
     List the S3 buckets that are available for ingestion.
     """
 
-    permission_classes = (IsVerified, )
-    scopes = (Scope.S3Ingest, )
+    permission_classes = (IsVerified, CanIngest, )
     pagination_class = None
     serializer_class = BucketSerializer
 
@@ -2112,11 +2111,10 @@ class S3ImportCreate(CreateAPIView):
     """
     Create a new S3 import.
 
-    Requires a verified email and the `s3_ingest` scope.
+    Requires a verified email and the `can_ingest` permission.
     """
 
-    permission_classes = (IsVerified, )
-    scopes = (Scope.S3Ingest, )
+    permission_classes = (IsVerified, CanIngest, )
     serializer_class = S3ImportSerializer
 
     def check_permissions(self, *args, **kwargs):
diff --git a/arkindex/process/tests/test_create_s3_import.py b/arkindex/process/tests/test_create_s3_import.py
index 9750b1ca9e..013ea9c592 100644
--- a/arkindex/process/tests/test_create_s3_import.py
+++ b/arkindex/process/tests/test_create_s3_import.py
@@ -9,7 +9,7 @@ from arkindex.images.models import ImageServer
 from arkindex.ponos.models import Farm
 from arkindex.process.models import Process, ProcessMode, Worker, WorkerType, WorkerVersion, WorkerVersionState
 from arkindex.project.tests import FixtureTestCase
-from arkindex.users.models import Role, Scope
+from arkindex.users.models import Role
 
 
 class TestCreateS3Import(FixtureTestCase):
@@ -64,7 +64,7 @@ class TestCreateS3Import(FixtureTestCase):
 
     @override_settings(ARKINDEX_FEATURES={"ingest": True})
     def test_requires_verified(self):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
         self.user.verified_email = False
         self.user.save()
         self.client.force_login(self.user)
@@ -80,9 +80,9 @@ class TestCreateS3Import(FixtureTestCase):
 
     @override_settings(ARKINDEX_FEATURES={"ingest": True})
     def test_requires_scope(self):
-        self.assertFalse(self.user.user_scopes.exists())
+        self.assertFalse(self.user.can_ingest)
         self.client.force_login(self.user)
-        with self.assertNumQueries(3):
+        with self.assertNumQueries(2):
             response = self.client.post(reverse("api:s3-import-create"), {
                 "corpus_id": str(self.corpus.id),
                 "folder_type": "volume",
@@ -96,7 +96,8 @@ class TestCreateS3Import(FixtureTestCase):
     @patch("arkindex.users.managers.BaseACLManager.filter_rights")
     def test_invalid(self, filter_rights_mock):
         filter_rights_mock.return_value = Corpus.objects.filter(id=self.corpus.id)
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
         private_corpus = Corpus.objects.create(name="nope")
         private_element = private_corpus.elements.create(type=private_corpus.types.create(slug="something"), name="can't touch this")
@@ -167,12 +168,13 @@ class TestCreateS3Import(FixtureTestCase):
         INGEST_PREFIX_BY_BUCKET_NAME=True,
     )
     def test_create(self):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
         element = self.corpus.elements.get(name="Volume 1")
         farm = Farm.objects.create(name="Crypto farm")
 
-        with self.assertNumQueries(25):
+        with self.assertNumQueries(24):
             response = self.client.post(reverse("api:s3-import-create"), {
                 "corpus_id": str(self.corpus.id),
                 "element_id": str(element.id),
@@ -234,10 +236,11 @@ class TestCreateS3Import(FixtureTestCase):
         INGEST_PREFIX_BY_BUCKET_NAME=True,
     )
     def test_defaults(self):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
 
-        with self.assertNumQueries(23):
+        with self.assertNumQueries(22):
             response = self.client.post(reverse("api:s3-import-create"), {
                 "corpus_id": str(self.corpus.id),
                 "bucket_name": "blah",
@@ -288,12 +291,13 @@ class TestCreateS3Import(FixtureTestCase):
     )
     @patch("arkindex.ponos.models.Farm.is_available", return_value=False)
     def test_farm_guest(self, is_available_mock):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
 
         farm = Farm.objects.create(name="Crypto farm")
 
-        with self.assertNumQueries(5):
+        with self.assertNumQueries(4):
             response = self.client.post(reverse("api:s3-import-create"), {
                 "corpus_id": str(self.corpus.id),
                 "bucket_name": "blah",
@@ -316,13 +320,14 @@ class TestCreateS3Import(FixtureTestCase):
     )
     @patch("arkindex.process.serializers.ingest.get_default_farm")
     def test_default_farm(self, get_default_farm_mock):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
 
         default_farm = Farm.objects.create(name="Crypto farm")
         get_default_farm_mock.return_value = default_farm
 
-        with self.assertNumQueries(23):
+        with self.assertNumQueries(22):
             response = self.client.post(reverse("api:s3-import-create"), {
                 "corpus_id": str(self.corpus.id),
                 "bucket_name": "blah",
@@ -339,13 +344,14 @@ class TestCreateS3Import(FixtureTestCase):
     @patch("arkindex.ponos.models.Farm.is_available", return_value=False)
     @patch("arkindex.process.serializers.ingest.get_default_farm")
     def test_default_farm_guest(self, get_default_farm_mock, is_available_mock):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
 
         default_farm = Farm.objects.create(name="Crypto farm")
         get_default_farm_mock.return_value = default_farm
 
-        with self.assertNumQueries(4):
+        with self.assertNumQueries(3):
             response = self.client.post(reverse("api:s3-import-create"), {
                 "corpus_id": str(self.corpus.id),
                 "bucket_name": "blah",
diff --git a/arkindex/process/tests/test_list_buckets.py b/arkindex/process/tests/test_list_buckets.py
index 284af96d7b..41b2c789af 100644
--- a/arkindex/process/tests/test_list_buckets.py
+++ b/arkindex/process/tests/test_list_buckets.py
@@ -4,7 +4,6 @@ from django.urls import reverse
 from rest_framework import status
 
 from arkindex.project.tests import FixtureAPITestCase
-from arkindex.users.models import Scope
 from moto import mock_s3
 
 
@@ -28,8 +27,8 @@ class TestListBuckets(FixtureAPITestCase):
     @override_settings(ARKINDEX_FEATURES={"ingest": True})
     def test_requires_verified(self):
         self.user.verified_email = False
+        self.user.can_ingest = True
         self.user.save()
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
         self.client.force_login(self.user)
 
         with self.assertNumQueries(2):
@@ -38,10 +37,10 @@ class TestListBuckets(FixtureAPITestCase):
 
     @override_settings(ARKINDEX_FEATURES={"ingest": True})
     def test_requires_scope(self):
-        self.assertFalse(self.user.user_scopes.exists())
+        self.assertFalse(self.user.can_ingest)
         self.client.force_login(self.user)
 
-        with self.assertNumQueries(3):
+        with self.assertNumQueries(2):
             resp = self.client.get(reverse("api:bucket-list"))
             self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
 
@@ -53,9 +52,10 @@ class TestListBuckets(FixtureAPITestCase):
         INGEST_S3_REGION=None,
     )
     def test_missing_settings(self):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
-        with self.assertNumQueries(3), self.assertRaises(AssertionError):
+        with self.assertNumQueries(2), self.assertRaises(AssertionError):
             self.client.get(reverse("api:bucket-list"))
 
     @override_settings(
@@ -68,7 +68,8 @@ class TestListBuckets(FixtureAPITestCase):
     )
     @mock_s3
     def test_list_buckets(self):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
 
         # Create some buckets with moto to get some test data
@@ -76,7 +77,7 @@ class TestListBuckets(FixtureAPITestCase):
         s3.create_bucket(Bucket="dank-memes")
         s3.create_bucket(Bucket="cursed-emojis")
 
-        with self.assertNumQueries(3):
+        with self.assertNumQueries(2):
             resp = self.client.get(reverse("api:bucket-list"))
             self.assertEqual(resp.status_code, status.HTTP_200_OK)
 
@@ -98,14 +99,15 @@ class TestListBuckets(FixtureAPITestCase):
     )
     @mock_s3
     def test_list_buckets_extra(self):
-        self.user.user_scopes.create(scope=Scope.S3Ingest)
+        self.user.can_ingest = True
+        self.user.save()
         self.client.force_login(self.user)
 
         s3 = boto3.resource("s3", region_name="us-east-1")
         s3.create_bucket(Bucket="dank-memes")
         s3.create_bucket(Bucket="cursed-emojis")
 
-        with self.assertNumQueries(3):
+        with self.assertNumQueries(2):
             resp = self.client.get(reverse("api:bucket-list"))
             self.assertEqual(resp.status_code, status.HTTP_200_OK)
 
diff --git a/arkindex/project/permissions.py b/arkindex/project/permissions.py
index ee36346dcc..7724a7fbc5 100644
--- a/arkindex/project/permissions.py
+++ b/arkindex/project/permissions.py
@@ -1,4 +1,5 @@
 import logging
+from functools import wraps
 
 from rest_framework.exceptions import PermissionDenied
 from rest_framework.permissions import SAFE_METHODS, BasePermission
@@ -16,36 +17,43 @@ def require_verified_email(request, view):
     return request.user.is_authenticated and (request.user.is_admin or request.user.verified_email)
 
 
-def _get_scopes(request, view):
-    specific_scopes_attr = f"{request.method.lower()}_scopes"
-    scopes = list(getattr(view, "scopes", []))
-    scopes.extend(getattr(view, specific_scopes_attr, []))
-    return set(scopes)
-
-
-def check_scopes(request, view):
+def scope_check_skips(func):
     """
-    When the `scopes` attribute is defined on the view, ensure an authenticated user has said scopes,
-    no matter which HTTP method is used.
-    When the `<method>_scopes` attribute is defined for a given HTTP method, ensures the user
-    has said scopes only for this HTTP method.
+    Decorator to skip scope checks if the user is not logged in, is an admin, or is a Ponos task.
     """
-    missing_scopes = _get_scopes(request, view)
-    # Skip this check if there are no defined scopes, if the user is not logged in, is an admin, or is a Ponos task.
-    if not missing_scopes or not request.user.is_authenticated or request.user.is_admin or isinstance(request.auth, Task):
-        return True
+    @wraps(func)
+    def wrapper(request, *args, **kwargs):
+        if not request.user.is_authenticated or request.user.is_admin or isinstance(request.auth, Task):
+            return True
+        return func(request, *args, **kwargs)
+    return wrapper
+
+
+@scope_check_skips
+def require_can_upload_s3_image(request, view):
+    if not request.user.can_upload_s3_image:
+        raise PermissionDenied("You do not have permission to upload images to S3.")
+    return True
+
+
+@scope_check_skips
+def require_can_create_iiif_image(request, view):
+    if not request.user.can_create_iiif_image:
+        raise PermissionDenied("You do not have permission to create IIIF images.")
+    return True
 
-    if request.user.is_authenticated:
-        # Tell which scopes are missing by subtracting found scopes from the expected scopes
-        missing_scopes -= set(request.user.user_scopes.filter(scope__in=missing_scopes).values_list("scope", flat=True))
 
-    if missing_scopes:
-        # If scopes are not matched, cause a custom error
-        raise PermissionDenied({
-            "detail": PermissionDenied.default_detail,
-            "missing_scopes": [scope.value for scope in missing_scopes],
-        })
+@scope_check_skips
+def require_can_ingest(request, view):
+    if not request.user.can_ingest:
+        raise PermissionDenied("You do not have permission to access S3 ingestion features.")
+    return True
+
 
+@scope_check_skips
+def require_can_create_worker_version(request, view):
+    if not request.user.can_create_worker_version:
+        raise PermissionDenied("You do not have permission to create worker versions.")
     return True
 
 
@@ -76,7 +84,7 @@ class ArkindexPermission(BasePermission):
 
 
 class IsAuthenticated(ArkindexPermission):
-    checks = (require_auth, check_scopes)
+    checks = (require_auth, )
 
 
 class IsAuthenticatedOrReadOnly(IsAuthenticated):
@@ -84,8 +92,24 @@ class IsAuthenticatedOrReadOnly(IsAuthenticated):
 
 
 class IsVerified(ArkindexPermission):
-    checks = (require_verified_email, check_scopes)
+    checks = (require_verified_email, )
 
 
 class IsVerifiedOrReadOnly(IsVerified):
     allow_safe_methods = True
+
+
+class CanUploadS3Image(ArkindexPermission):
+    checks = (require_can_upload_s3_image, )
+
+
+class CanCreateIIIFImage(ArkindexPermission):
+    checks = (require_can_create_iiif_image, )
+
+
+class CanCreateWorkerVersion(ArkindexPermission):
+    checks = (require_can_create_worker_version, )
+
+
+class CanIngest(ArkindexPermission):
+    checks = (require_can_ingest, )
diff --git a/arkindex/sql_validation/process_elements_filter_ml_class.sql b/arkindex/sql_validation/process_elements_filter_ml_class.sql
index 318cdd913b..b680823edc 100644
--- a/arkindex/sql_validation/process_elements_filter_ml_class.sql
+++ b/arkindex/sql_validation/process_elements_filter_ml_class.sql
@@ -6,6 +6,10 @@ SELECT "users_user"."id",
        "users_user"."is_active",
        "users_user"."is_admin",
        "users_user"."verified_email",
+       "users_user"."can_upload_s3_image",
+       "users_user"."can_create_iiif_image",
+       "users_user"."can_ingest",
+       "users_user"."can_create_worker_version",
        "users_user"."created",
        "users_user"."updated"
 FROM "users_user"
diff --git a/arkindex/sql_validation/process_elements_filter_type.sql b/arkindex/sql_validation/process_elements_filter_type.sql
index 3fea7de04d..ca208bed06 100644
--- a/arkindex/sql_validation/process_elements_filter_type.sql
+++ b/arkindex/sql_validation/process_elements_filter_type.sql
@@ -6,6 +6,10 @@ SELECT "users_user"."id",
        "users_user"."is_active",
        "users_user"."is_admin",
        "users_user"."verified_email",
+       "users_user"."can_upload_s3_image",
+       "users_user"."can_create_iiif_image",
+       "users_user"."can_ingest",
+       "users_user"."can_create_worker_version",
        "users_user"."created",
        "users_user"."updated"
 FROM "users_user"
diff --git a/arkindex/sql_validation/process_elements_top_level.sql b/arkindex/sql_validation/process_elements_top_level.sql
index 04772b592c..2aa70b65dd 100644
--- a/arkindex/sql_validation/process_elements_top_level.sql
+++ b/arkindex/sql_validation/process_elements_top_level.sql
@@ -6,6 +6,11 @@ SELECT "users_user"."id",
        "users_user"."is_active",
        "users_user"."is_admin",
        "users_user"."verified_email",
+       "users_user"."can_upload_s3_image",
+       "users_user"."can_create_iiif_image",
+       "users_user"."can_ingest",
+       "users_user"."can_create_worker_version",
+
        "users_user"."created",
        "users_user"."updated"
 FROM "users_user"
diff --git a/arkindex/sql_validation/process_elements_with_image.sql b/arkindex/sql_validation/process_elements_with_image.sql
index 9bdfca2670..46b90514e1 100644
--- a/arkindex/sql_validation/process_elements_with_image.sql
+++ b/arkindex/sql_validation/process_elements_with_image.sql
@@ -6,6 +6,10 @@ SELECT "users_user"."id",
        "users_user"."is_active",
        "users_user"."is_admin",
        "users_user"."verified_email",
+       "users_user"."can_upload_s3_image",
+       "users_user"."can_create_iiif_image",
+       "users_user"."can_ingest",
+       "users_user"."can_create_worker_version",
        "users_user"."created",
        "users_user"."updated"
 FROM "users_user"
diff --git a/arkindex/users/admin.py b/arkindex/users/admin.py
index a50a388cf8..893e19f291 100644
--- a/arkindex/users/admin.py
+++ b/arkindex/users/admin.py
@@ -4,9 +4,8 @@ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
 from django.contrib.auth.forms import ReadOnlyPasswordHashField
 from django.contrib.auth.models import Group as BaseGroup
 from django.db.models.functions import Collate
-from enumfields.admin import EnumFieldListFilter
 
-from arkindex.users.models import User, UserScope
+from arkindex.users.models import User
 
 
 class UserCreationForm(forms.ModelForm):
@@ -66,7 +65,7 @@ class UserAdmin(BaseUserAdmin):
     list_filter = ("is_admin", )
     fieldsets = (
         (None, {"fields": ("email", "display_name", "verified_email", "password")}),
-        ("Permissions", {"fields": ("is_admin", "is_active")}),
+        ("Permissions", {"fields": ("is_admin", "is_active", "can_upload_s3_image", "can_create_iiif_image", "can_ingest", "can_create_worker_version")}),
     )
     # add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
     # overrides get_fieldsets to use this attribute when creating a user.
@@ -89,12 +88,6 @@ class UserAdmin(BaseUserAdmin):
         return qs.annotate(searchable_email=Collate("email", "default"))
 
 
-class UserScopeAdmin(admin.ModelAdmin):
-    list_display = ("user", "scope")
-    list_filter = [("scope", EnumFieldListFilter), ]
-
-
 admin.site.register(User, UserAdmin)
-admin.site.register(UserScope, UserScopeAdmin)
 # Remove the admin page for the default Django groups
 admin.site.unregister(BaseGroup)
diff --git a/arkindex/users/migrations/0001_initial.py b/arkindex/users/migrations/0001_initial.py
index f21fb4f20d..16b6e68972 100644
--- a/arkindex/users/migrations/0001_initial.py
+++ b/arkindex/users/migrations/0001_initial.py
@@ -10,8 +10,6 @@ from django.contrib.postgres.operations import CreateCollation
 from django.db import migrations, models
 from enumfields import Enum
 
-import arkindex.users.models
-
 
 class OAuthStatus(Enum):
     Created = "created"
@@ -19,6 +17,13 @@ class OAuthStatus(Enum):
     Error = "error"
 
 
+class Scope(Enum):
+    UploadS3Image = "upload_s3_image"
+    CreateIIIFImage = "create_iiif_image"
+    S3Ingest = "s3_ingest"
+    CreateDockerWorkerVersion = "create_docker_worker_version"
+
+
 class Migration(migrations.Migration):
 
     initial = True
@@ -93,7 +98,7 @@ class Migration(migrations.Migration):
             name="UserScope",
             fields=[
                 ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
-                ("scope", enumfields.fields.EnumField(enum=arkindex.users.models.Scope, max_length=50)),
+                ("scope", enumfields.fields.EnumField(enum=Scope, max_length=50)),
                 ("user", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="user_scopes", to=settings.AUTH_USER_MODEL)),
             ],
             options={
diff --git a/arkindex/users/migrations/0004_user_scopes.py b/arkindex/users/migrations/0004_user_scopes.py
new file mode 100644
index 0000000000..a349f802fc
--- /dev/null
+++ b/arkindex/users/migrations/0004_user_scopes.py
@@ -0,0 +1,83 @@
+# Generated by Django 4.2.13 on 2024-08-26 08:48
+
+from django.db import migrations, models
+from django.db.models import Exists, OuterRef
+from enumfields import Enum, EnumField
+
+
+class Scope(Enum):
+    UploadS3Image = "upload_s3_image"
+    CreateIIIFImage = "create_iiif_image"
+    S3Ingest = "s3_ingest"
+    CreateDockerWorkerVersion = "create_docker_worker_version"
+
+def create_user_scope_booleans(apps, schema):
+    UserScope = apps.get_model("users", "UserScope")
+    User = apps.get_model("users", "User")
+
+    User.objects.all().update(
+        can_create_iiif_image=Exists(UserScope.objects.filter(user_id=OuterRef("pk"), scope=Scope.CreateIIIFImage)),
+        can_create_worker_version=Exists(UserScope.objects.filter(user_id=OuterRef("pk"), scope=Scope.CreateDockerWorkerVersion)),
+        can_ingest=Exists(UserScope.objects.filter(user_id=OuterRef("pk"), scope=Scope.S3Ingest)),
+        can_upload_s3_image=Exists(UserScope.objects.filter(user_id=OuterRef("pk"), scope=Scope.UploadS3Image)),
+    )
+
+def create_user_scopes(apps, schema):
+    UserScope = apps.get_model("users", "UserScope")
+    User = apps.get_model("users", "User")
+
+    scope_matching = [
+        ("can_upload_s3_image", Scope.UploadS3Image),
+        ("can_create_iiif_image", Scope.CreateIIIFImage),
+        ("can_ingest", Scope.S3Ingest),
+        ("can_create_worker_version", Scope.CreateDockerWorkerVersion)
+    ]
+
+    UserScope.objects.bulk_create(
+        [
+            UserScope(user_id=user.id, scope=scope)
+            for user in User.objects.iterator()
+            for scope_attr, scope in scope_matching
+            if getattr(user, scope_attr)
+        ]
+    )
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("users", "0003_delete_oauthcredentials"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="user",
+            name="can_create_iiif_image",
+            field=models.BooleanField(default=False, help_text="Allows adding images to Arkindex from external IIIF servers using the CreateIIIFImage endpoint.\nThis could allow someone to make Arkindex perform DoS attacks on other IIIF servers due to the image checks."),
+        ),
+        migrations.AddField(
+            model_name="user",
+            name="can_create_worker_version",
+            field=models.BooleanField(default=False, help_text="Allows creating workers and worker versions from Docker images."),
+        ),
+        migrations.AddField(
+            model_name="user",
+            name="can_ingest",
+            field=models.BooleanField(default=False, help_text="Allows access to S3 ingestion features."),
+        ),
+        migrations.AddField(
+            model_name="user",
+            name="can_upload_s3_image",
+            field=models.BooleanField(default=False, help_text="Allows uploading images to an S3 bucket using the CreateImage endpoint and `s3_put_url`.\nThis could allow someone to upload very large files or make DoS attacks on the local IIIF image server."),
+        ),
+        migrations.AlterField(
+            model_name="userscope",
+            name="scope",
+            field=EnumField(enum=Scope, max_length=50),
+        ),
+        migrations.RunPython(
+            create_user_scope_booleans,
+            reverse_code=create_user_scopes,
+            elidable=False
+        ),
+        migrations.DeleteModel(name="UserScope")
+    ]
diff --git a/arkindex/users/models.py b/arkindex/users/models.py
index 47552f0f37..f3feccbf77 100644
--- a/arkindex/users/models.py
+++ b/arkindex/users/models.py
@@ -1,4 +1,5 @@
 import uuid
+from textwrap import dedent
 
 from django.conf import settings
 from django.contrib.auth.models import AbstractBaseUser
@@ -7,7 +8,7 @@ from django.contrib.contenttypes.models import ContentType
 from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
 from django_rq.queues import get_queue
-from enumfields import Enum, EnumField
+from enumfields import Enum
 from rq.utils import as_text
 
 from arkindex.users.managers import UserManager
@@ -79,6 +80,17 @@ class User(AbstractBaseUser):
     is_admin = models.BooleanField(default=False)
     verified_email = models.BooleanField(default=False)
 
+    can_upload_s3_image = models.BooleanField(default=False, help_text=dedent("""
+        Allows uploading images to an S3 bucket using the CreateImage endpoint and `s3_put_url`.
+        This could allow someone to upload very large files or make DoS attacks on the local IIIF image server.
+    """).strip())
+    can_create_iiif_image = models.BooleanField(default=False, help_text=dedent("""
+        Allows adding images to Arkindex from external IIIF servers using the CreateIIIFImage endpoint.
+        This could allow someone to make Arkindex perform DoS attacks on other IIIF servers due to the image checks.
+    """).strip())
+    can_ingest = models.BooleanField(default=False, help_text="Allows access to S3 ingestion features.")
+    can_create_worker_version = models.BooleanField(default=False, help_text="Allows creating workers and worker versions from Docker images.")
+
     selected_elements = models.ManyToManyField(
         "documents.Element",
         through="documents.Selection",
@@ -111,18 +123,6 @@ class User(AbstractBaseUser):
         # Simplest possible answer: Yes, always
         return True
 
-    def has_scopes(self, *scopes):
-        if not scopes:
-            return True
-        assert all(isinstance(scope, Scope) for scope in scopes), "Scopes should be from the Scope enum"
-        return self.user_scopes.filter(scope__in=scopes).count() == len(set(scopes))
-
-    def has_scope(self, scope):
-        assert isinstance(scope, Scope), "Scope should be from the Scope enum"
-        # TODO: Could be optimized in a way similar to Process.get_state()
-        # See https://gitlab.teklia.com/arkindex/ponos/-/blob/e5989f3e1dd1f6d7d93ba940b7ed2c5471ddd34f/ponos/models.py#L370
-        return self.user_scopes.filter(scope=scope).exists()
-
     @property
     def is_staff(self):
         """Is the user a member of staff?"""
@@ -182,38 +182,3 @@ class Group(models.Model):
 
     def __str__(self):
         return self.name
-
-
-class Scope(Enum):
-
-    UploadS3Image = "upload_s3_image"
-    """
-    Allows uploading images to an S3 bucket using the CreateImage endpoint and `s3_put_url`.
-    This could allow someone to upload very large files or make DoS attacks on the local IIIF image server.
-    """
-
-    CreateIIIFImage = "create_iiif_image"
-    """
-    Allows adding images to Arkindex from external IIIF servers using the CreateIIIFImage endpoint.
-    This could allow someone to make Arkindex perform DoS attacks on other IIIF servers due to the image checks.
-    """
-
-    S3Ingest = "s3_ingest"
-    """
-    Allows access to S3 ingestion features.
-    """
-
-    CreateDockerWorkerVersion = "create_docker_worker_version"
-    """
-    Allows creating a worker version and its Git stack from a docker image
-    """
-
-
-class UserScope(models.Model):
-    user = models.ForeignKey("users.User", related_name="user_scopes", on_delete=models.CASCADE)
-    scope = EnumField(Scope, max_length=50)
-
-    class Meta:
-        unique_together = (
-            "user", "scope"
-        )
diff --git a/arkindex/users/serializers.py b/arkindex/users/serializers.py
index 41ccf7d98b..1c335a730e 100644
--- a/arkindex/users/serializers.py
+++ b/arkindex/users/serializers.py
@@ -10,7 +10,7 @@ from rest_framework import serializers
 from rest_framework.validators import UniqueValidator
 
 from arkindex.documents.models import Corpus
-from arkindex.users.models import Group, Role, Scope, User, UserScope
+from arkindex.users.models import Group, Role, User
 
 
 def validate_user_password(user, data):
@@ -40,6 +40,10 @@ class UserSerializer(SimpleUserSerializer):
             "password",
             "verified_email",
             "is_admin",
+            "can_upload_s3_image",
+            "can_create_iiif_image",
+            "can_ingest",
+            "can_create_worker_version",
             "auth_token",
             "features",
             "has_usable_password",
@@ -49,6 +53,10 @@ class UserSerializer(SimpleUserSerializer):
             "email",
             "verified_email",
             "is_admin",
+            "can_upload_s3_image",
+            "can_create_iiif_image",
+            "can_ingest",
+            "can_create_worker_version",
             "auth_token",
         )
         extra_kwargs = {
@@ -222,16 +230,16 @@ class UserEmailVerificationSerializer(UserSerializer):
             raise ValidationError({"__all__": [error_msg]})
         # Set self.instance so the view can build the response with the current user
         self.instance = user
-        # Only update verified_email field for the current user
-        return {"verified_email": True}
+        # Update verified_email field for the current user and give image upload permissions
+        return {
+            "verified_email": True,
+            "can_upload_s3_image": True,
+            "can_create_iiif_image": True,
+        }
 
     @transaction.atomic
     def update(self, instance, validated_data):
         instance = super().update(instance, validated_data)
-        UserScope.objects.bulk_create([
-            UserScope(user=instance, scope=Scope.CreateIIIFImage),
-            UserScope(user=instance, scope=Scope.UploadS3Image),
-        ], ignore_conflicts=True)
         # If a default group into which to add newly registered and verified users has been
         # defined, then add the user to that group
         if settings.SIGNUP_DEFAULT_GROUP:
diff --git a/arkindex/users/tests/test_registration.py b/arkindex/users/tests/test_registration.py
index 8c289177aa..57cc042162 100644
--- a/arkindex/users/tests/test_registration.py
+++ b/arkindex/users/tests/test_registration.py
@@ -10,7 +10,7 @@ from rest_framework import status
 from arkindex.documents.models import Corpus
 from arkindex.project.default_corpus import DEFAULT_CORPUS_TYPES
 from arkindex.project.tests import FixtureAPITestCase
-from arkindex.users.models import Group, Right, Role, Scope, User
+from arkindex.users.models import Group, Right, Role, User
 from arkindex.users.tasks import send_verification_email
 
 
@@ -188,11 +188,11 @@ class TestRegistration(FixtureAPITestCase):
                 **values
             } for values in DEFAULT_CORPUS_TYPES]
         )
-
-        self.assertCountEqual(
-            list(newuser.user_scopes.values_list("scope", flat=True)),
-            [Scope.CreateIIIFImage, Scope.UploadS3Image],
-        )
+        # Check created permissions
+        self.assertTrue(newuser.can_create_iiif_image)
+        self.assertTrue(newuser.can_upload_s3_image)
+        self.assertFalse(newuser.can_ingest)
+        self.assertFalse(newuser.can_create_worker_version)
 
     def test_email_verification_default_group(self):
         """
@@ -203,7 +203,7 @@ class TestRegistration(FixtureAPITestCase):
         newuser = User.objects.create_user("newuser@example.com", password="hunter2")
         self.assertFalse(newuser.verified_email)
 
-        with (self.settings(SIGNUP_DEFAULT_GROUP=str(test_group.id)), self.assertNumQueries(11)):
+        with (self.settings(SIGNUP_DEFAULT_GROUP=str(test_group.id)), self.assertNumQueries(10)):
             response = self.client.post(
                 reverse("api:verify-email"),
                 data={
@@ -223,7 +223,7 @@ class TestRegistration(FixtureAPITestCase):
 
         with (
             self.settings(SIGNUP_DEFAULT_GROUP="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),
-            self.assertNumQueries(7),
+            self.assertNumQueries(6),
             self.assertRaises(Group.DoesNotExist)
         ):
             self.client.post(
@@ -241,7 +241,7 @@ class TestRegistration(FixtureAPITestCase):
         self.assertFalse(newuser.has_usable_password())
         corpora = Corpus.objects.all().values_list("id", flat=True)
 
-        with self.assertNumQueries(7):
+        with self.assertNumQueries(6):
             response = self.client.post(
                 reverse("api:verify-email"),
                 data={
@@ -315,7 +315,8 @@ class TestRegistration(FixtureAPITestCase):
         self.assertEqual(auth.get_user(self.client).email, "newuser@example.com")
         user = User.objects.get_by_natural_key("newuser@example.com")
         self.assertFalse(user.verified_email)
-        self.assertFalse(user.user_scopes.exists())
+        self.assertFalse(user.can_upload_s3_image)
+        self.assertFalse(user.can_create_iiif_image)
         self.assertEqual(len(mail.outbox), 1)
         self.assertEqual(mail.outbox[0].to, ["newuser@example.com"])
 
@@ -331,7 +332,8 @@ class TestRegistration(FixtureAPITestCase):
         self.assertEqual(auth.get_user(self.client).email, "newuser@example.com")
         user = User.objects.get_by_natural_key("newuser@example.com")
         self.assertFalse(user.verified_email)
-        self.assertFalse(user.user_scopes.exists())
+        self.assertFalse(user.can_upload_s3_image)
+        self.assertFalse(user.can_create_iiif_image)
         self.assertEqual(len(mail.outbox), 1)
         self.assertEqual(mail.outbox[0].to, ["newuser@example.com"])
         self.assertTrue(user.check_password("myVerySecretPassword"))
-- 
GitLab