diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json
index 5d7bba2fdb6313aa34af9c179a3d373e393f84ae..1ac57919f4a87ee469453475b9b26e56e60055aa 100644
--- a/arkindex/documents/fixtures/data.json
+++ b/arkindex/documents/fixtures/data.json
@@ -249,6 +249,7 @@
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
@@ -271,6 +272,7 @@
         "docker_image_iid": "registry.gitlab.teklia.com/arkindex/workers/init-elements:latest",
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": "init_elements",
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
@@ -291,6 +293,7 @@
         "docker_image_iid": null,
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
@@ -309,6 +312,7 @@
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
@@ -329,6 +333,7 @@
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
@@ -349,6 +354,7 @@
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
@@ -369,6 +375,7 @@
         "docker_image_iid": "registry.somewhere.com/something:latest",
         "revision_url": null,
         "tag": null,
+        "branch": null,
         "feature": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z"
diff --git a/arkindex/process/admin.py b/arkindex/process/admin.py
index 7d427806eb78fe2ee3cbf6311c71111a7188c800..3dd8a2875dea9e2403a6bdc80f008d3805d247db 100644
--- a/arkindex/process/admin.py
+++ b/arkindex/process/admin.py
@@ -103,7 +103,20 @@ class WorkerTypeAdmin(admin.ModelAdmin):
 class WorkerVersionAdmin(admin.ModelAdmin):
     list_display = ("id", "worker", "version", "feature")
     list_filter = ("worker", "feature")
-    fields = ("id", "worker", "version", "configuration", "model_usage", "gpu_usage", "docker_image_iid", "state", "feature")
+    fields = (
+        "id",
+        "worker",
+        "version",
+        "revision_url",
+        "tag",
+        "branch",
+        "configuration",
+        "model_usage",
+        "gpu_usage",
+        "docker_image_iid",
+        "state",
+        "feature",
+    )
     readonly_fields = ("id", )
 
     def save_model(self, request, obj, form, change):
diff --git a/arkindex/process/migrations/0043_workerversion_branch.py b/arkindex/process/migrations/0043_workerversion_branch.py
new file mode 100644
index 0000000000000000000000000000000000000000..613c0203907f6bcc394b548c1d6a1281b037afad
--- /dev/null
+++ b/arkindex/process/migrations/0043_workerversion_branch.py
@@ -0,0 +1,32 @@
+# Generated by Django 5.0.8 on 2024-09-09 14:38
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("documents", "0012_alter_transcriptionentity_id"),
+        ("process", "0042_workerversion_feature"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="workerversion",
+            name="branch",
+            field=models.CharField(blank=True, default=None, max_length=512, null=True),
+        ),
+        migrations.AlterField(
+            model_name="workerversion",
+            name="tag",
+            field=models.CharField(blank=True, default=None, max_length=512, null=True),
+        ),
+        migrations.AddConstraint(
+            model_name="workerversion",
+            constraint=models.UniqueConstraint(
+                condition=models.Q(branch__isnull=False),
+                fields=("worker", "branch"),
+                name="workerversion_unique_branch",
+            ),
+        ),
+    ]
diff --git a/arkindex/process/models.py b/arkindex/process/models.py
index b0e0d243f4da58da64c532d9c979423e7bb49c35..8c618e980f0e230efb708d57111fafe7471efd91 100644
--- a/arkindex/process/models.py
+++ b/arkindex/process/models.py
@@ -685,7 +685,8 @@ class WorkerVersion(models.Model):
 
     # URL of the commit for this version, when worker is based on a repository
     revision_url = models.URLField(null=True, blank=True, max_length=250, default=None)
-    tag = models.CharField(blank=True, null=True, max_length=50, default=None)
+    branch = models.CharField(blank=True, null=True, max_length=512, default=None)
+    tag = models.CharField(blank=True, null=True, max_length=512, default=None)
 
     feature = EnumField(
         ArkindexFeature,
@@ -736,6 +737,11 @@ class WorkerVersion(models.Model):
                 name="workerversion_unique_tag",
                 condition=Q(tag__isnull=False),
             ),
+            models.UniqueConstraint(
+                fields=["worker", "branch"],
+                name="workerversion_unique_branch",
+                condition=Q(branch__isnull=False),
+            ),
             models.UniqueConstraint(
                 fields=["feature"],
                 name="workerversion_unique_feature",
@@ -955,8 +961,12 @@ class WorkerRun(models.Model):
         """
 
         summary_text = f"Worker {self.version.worker.name} @ "
-        if self.version.tag is not None:
-            summary_text += f"{self.version.tag} "
+        if self.version.tag is not None or self.version.branch is not None:
+            if self.version.tag is not None:
+                summary_text += f"{self.version.tag} "
+            else:
+                summary_text += f"{self.version.branch} "
+
             if self.version.revision_url is not None:
                 summary_text += f"({self.version.truncated_id})"
             else:
diff --git a/arkindex/process/serializers/workers.py b/arkindex/process/serializers/workers.py
index f795d6e64fdca7f57822a253716bff0a5f7336f2..bbafa5ca7201d2de1c2238a0e3b4388cc8432f76 100644
--- a/arkindex/process/serializers/workers.py
+++ b/arkindex/process/serializers/workers.py
@@ -244,7 +244,9 @@ class WorkerVersionSerializer(serializers.ModelSerializer):
     model_usage = EnumField(FeatureUsage, required=False, default=FeatureUsage.Disabled)
     # Ensure worker version configuration JSON body is an object
     configuration = serializers.DictField()
-    tag = serializers.CharField(allow_null=True, max_length=50, required=False)
+
+    tag = serializers.CharField(allow_null=True, max_length=512, required=False)
+    branch = serializers.CharField(allow_null=True, max_length=512, required=False)
 
     # Serialize worker with its basic information
     class Meta:
@@ -261,6 +263,7 @@ class WorkerVersionSerializer(serializers.ModelSerializer):
             "worker",
             "created",
             "tag",
+            "branch",
         )
         read_only_fields = ("revision_url", "version")
 
@@ -303,6 +306,12 @@ class WorkerVersionSerializer(serializers.ModelSerializer):
 
         return data
 
+    def update(self, instance, validated_data):
+        # If a branch is being set on this WorkerVersion, remove it from any version of the same worker
+        if validated_data.get("branch"):
+            WorkerVersion.objects.filter(worker_id=instance.worker_id, branch=validated_data["branch"]).update(branch=None)
+        return super().update(instance, validated_data)
+
 
 class WorkerVersionCreateSerializer(WorkerVersionSerializer):
     revision_url = serializers.URLField(
@@ -349,6 +358,12 @@ class WorkerVersionCreateSerializer(WorkerVersionSerializer):
         data["worker_id"] = worker.id
         return data
 
+    def create(self, validated_data):
+        # If a branch is being set on this WorkerVersion, remove it from any version of the same worker
+        if validated_data.get("branch"):
+            WorkerVersion.objects.filter(worker_id=validated_data["worker_id"], branch=validated_data["branch"]).update(branch=None)
+        return super().create(validated_data)
+
 
 class WorkerActivitySerializer(serializers.ModelSerializer):
     """
diff --git a/arkindex/process/tests/test_corpus_worker_runs.py b/arkindex/process/tests/test_corpus_worker_runs.py
index ba263817c2a464b7d05bd5ff225994f5585c7758..3e7cadf540c8062a426cc05060e958e269888be3 100644
--- a/arkindex/process/tests/test_corpus_worker_runs.py
+++ b/arkindex/process/tests/test_corpus_worker_runs.py
@@ -129,6 +129,7 @@ class TestCorpusWorkerRuns(FixtureAPITestCase):
                     "state": "created",
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "worker": {
                         "id": str(self.local_worker_version.worker.id),
                         "name": "Custom worker",
@@ -152,6 +153,7 @@ class TestCorpusWorkerRuns(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "created": self.dla_worker_version.created.isoformat().replace("+00:00", "Z"),
                     "state": "available",
                     "worker": {
diff --git a/arkindex/process/tests/test_user_workerruns.py b/arkindex/process/tests/test_user_workerruns.py
index 2806fbca1254cd67e1c05d356e6fa1a7307c3a7a..fa2956ae7cdbc83d33f49503d82138c70802fe71 100644
--- a/arkindex/process/tests/test_user_workerruns.py
+++ b/arkindex/process/tests/test_user_workerruns.py
@@ -101,6 +101,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 "state": "available",
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "worker": {
                     "id": str(self.version_1.worker.id),
                     "name": "Recognizer",
@@ -141,6 +142,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 "state": "created",
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "worker": {
                     "id": str(self.custom_version.worker.id),
                     "name": "Custom worker",
@@ -226,6 +228,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 "state": "created",
                 "version": 2,
                 "tag": None,
+                "branch": None,
                 "worker": {
                     "id": str(self.other_version.worker.id),
                     "name": "Custom worker",
@@ -439,6 +442,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 "state": "created",
                 "version": 2,
                 "tag": None,
+                "branch": None,
                 "worker": {
                     "id": str(self.other_version.worker.id),
                     "name": "Custom worker",
diff --git a/arkindex/process/tests/test_workers.py b/arkindex/process/tests/test_workers.py
index 43f5734d3e24152ca78e87561c030a4f58fa9588..5da77eb349004b5502f6fdf312c19605e2e44898 100644
--- a/arkindex/process/tests/test_workers.py
+++ b/arkindex/process/tests/test_workers.py
@@ -1114,6 +1114,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     },
                     "version": None,
                     "tag": None,
+                    "branch": None,
                     "revision_url": "https://gitlab.com/NERV/eva/commit/63e377e7f88c743d8428fc4e4eaedfc1c9356754",
                     "created": "2050-09-09T09:09:09.090909Z",
                 },
@@ -1135,6 +1136,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     },
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "revision_url": None,
                     "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 }
@@ -1402,6 +1404,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             "state": WorkerVersionState.Created.value,
             "version": None,
             "tag": None,
+            "branch": None,
             "worker": {
                 "id": str(self.worker_dla.id),
                 "name": "Document layout analyser",
@@ -1441,6 +1444,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             "state": WorkerVersionState.Created.value,
             "version": 42,
             "tag": None,
+            "branch": None,
             "worker": {
                 "id": str(self.worker_custom.id),
                 "name": "Custom worker",
@@ -1565,15 +1569,50 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(response.json(), {"tag": ["A version already exists for this worker with this tag."]})
 
-    def test_create_version_empty_tag(self):
+    def test_create_version_unassign_branch(self):
+        self.version_1.branch = "operation-yashima"
+        self.version_1.save()
+        self.version_2.branch = "operation-yashima"
+        self.version_2.save()
+
+        with self.assertNumQueries(7):
+            response = self.client.post(
+                reverse("api:worker-versions", kwargs={"pk": str(self.worker_reco.id)}),
+                data={
+                    "configuration": {"test": "test2"},
+                    "revision_url": "https://gitlab.com/NERV/eva/commit/eva-01",
+                    "branch": "operation-yashima",
+                },
+                HTTP_AUTHORIZATION=f"Ponos {self.task.token}",
+            )
+            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+
+        new_version = WorkerVersion.objects.get(id=response.json()["id"])
+        self.assertEqual(new_version.branch, "operation-yashima")
+
+        self.version_1.refresh_from_db()
+        self.assertIsNone(self.version_1.branch)
+
+        self.version_2.refresh_from_db()
+        self.assertEqual(self.version_2.branch, "operation-yashima")
+
+    def test_create_version_empty_tag_branch(self):
         with self.assertNumQueries(3):
             response = self.client.post(
                 reverse("api:worker-versions", kwargs={"pk": str(self.worker_reco.id)}),
-                data={"configuration": {"test": "test2"}, "revision_url": "https://gitlab.com/NERV/eva/commit/eva-01", "tag": ""},
+                data={
+                    "configuration": {"test": "test2"},
+                    "revision_url": "https://gitlab.com/NERV/eva/commit/eva-01",
+                    "tag": "",
+                    "branch": "",
+                },
                 HTTP_AUTHORIZATION=f"Ponos {self.task.token}",
             )
             self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-        self.assertDictEqual(response.json(), {"tag": ["This field may not be blank."]})
+        self.assertDictEqual(response.json(), {
+            "tag": ["This field may not be blank."],
+            "branch": ["This field may not be blank."],
+        })
 
     def test_create_version_wrong_gpu_usage(self):
         response = self.client.post(
@@ -2135,6 +2174,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             "revision_url": None,
             "version": 1,
             "tag": None,
+            "branch": None,
             "worker": {
                 "id": str(self.worker_reco.id),
                 "name": "Recognizer",
@@ -2162,6 +2202,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             "revision_url": None,
             "version": 1,
             "tag": None,
+            "branch": None,
             "worker": {
                 "id": str(self.worker_reco.id),
                 "name": "Recognizer",
@@ -2227,29 +2268,47 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
     def test_update_worker_version(self):
         """
         Update worker version artifact, configuration, state and tag
+        Updating the branch should reset the branch on any other version on the same worker
         """
         self.version_1.state = WorkerVersionState.Created
         self.version_1.save()
 
-        response = self.client.patch(
-            reverse("api:version-retrieve", kwargs={"pk": str(self.version_1.id)}),
-            data={
-                "configuration": {"test": "test2"},
-                "docker_image_iid": "eva:unit-01",
-                "state": "error",
-                "tag": "eva-01"
-            },
-            HTTP_AUTHORIZATION=f"Ponos {self.task.token}",
-        )
-        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertNotEqual(self.version_1.worker_id, self.version_2.worker_id)
+        self.version_2.branch = "operation-yashima"
+        self.version_2.save()
+
+        branch_version = self.version_1.worker.versions.create(branch="operation-yashima", version=2)
+
+        with self.assertNumQueries(6):
+            response = self.client.patch(
+                reverse("api:version-retrieve", kwargs={"pk": str(self.version_1.id)}),
+                data={
+                    "configuration": {"test": "test2"},
+                    "docker_image_iid": "eva:unit-01",
+                    "state": "error",
+                    "tag": "eva-01",
+                    "branch": "operation-yashima",
+                },
+                HTTP_AUTHORIZATION=f"Ponos {self.task.token}",
+            )
+            self.assertEqual(response.status_code, status.HTTP_200_OK)
+
         data = response.json()
         self.assertEqual(data["id"], str(self.version_1.id))
+
         self.version_1.refresh_from_db()
         self.assertEqual(self.version_1.configuration, {"test": "test2"})
         self.assertEqual(self.version_1.docker_image_iid, "eva:unit-01")
         self.assertEqual(self.version_1.state, WorkerVersionState.Error)
         self.assertEqual(self.version_1.gpu_usage, FeatureUsage.Disabled)
         self.assertEqual(self.version_1.tag, "eva-01")
+        self.assertEqual(self.version_1.branch, "operation-yashima")
+
+        self.version_2.refresh_from_db()
+        self.assertEqual(self.version_2.branch, "operation-yashima")
+
+        branch_version.refresh_from_db()
+        self.assertIsNone(branch_version.branch)
 
     def test_update_worker_version_unique_tag(self):
         self.worker_reco.versions.create(
@@ -2270,17 +2329,21 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(response.json(), {"tag": ["A version already exists for this worker with this tag."]})
 
-    def test_update_worker_version_empty_tag(self):
+    def test_update_worker_version_empty_tag_branch(self):
         with self.assertNumQueries(2):
             response = self.client.patch(
                 reverse("api:version-retrieve", kwargs={"pk": str(self.version_1.id)}),
                 data={
-                    "tag": ""
+                    "tag": "",
+                    "branch": "",
                 },
                 HTTP_AUTHORIZATION=f"Ponos {self.task.token}",
             )
             self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-        self.assertDictEqual(response.json(), {"tag": ["This field may not be blank."]})
+        self.assertDictEqual(response.json(), {
+            "tag": ["This field may not be blank."],
+            "branch": ["This field may not be blank."],
+        })
 
     def test_cannot_update_worker_version_revision_ignored(self):
         self.version_1.revision_url = "url"
@@ -2382,6 +2445,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_2.docker_image_iid,
@@ -2407,6 +2471,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_1.docker_image_iid,
@@ -2464,6 +2529,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_2.docker_image_iid,
@@ -2489,6 +2555,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_2.docker_image_iid,
@@ -2542,6 +2609,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_2.docker_image_iid,
@@ -2582,6 +2650,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_1.docker_image_iid,
@@ -2641,6 +2710,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                     "revision_url": None,
                     "version": 1,
                     "tag": None,
+                    "branch": None,
                     "gpu_usage": "disabled",
                     "model_usage": FeatureUsage.Disabled.value,
                     "docker_image_iid": self.version_1.docker_image_iid,
diff --git a/arkindex/process/tests/worker_runs/test_create.py b/arkindex/process/tests/worker_runs/test_create.py
index 0cf94a07eb15d8e4a55c9a35e056c5a2575b04f5..0e30114f0cd4385f6248c1398e9bcf29319246b7 100644
--- a/arkindex/process/tests/worker_runs/test_create.py
+++ b/arkindex/process/tests/worker_runs/test_create.py
@@ -296,6 +296,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase):
                         "revision_url": None,
                         "version": 1,
                         "tag": None,
+                        "branch": None,
                         "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                         "state": "available",
                         "worker": {
@@ -371,6 +372,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -430,22 +432,24 @@ class TestWorkerRunsCreate(FixtureAPITestCase):
         )
 
         cases = [
-            ("eva-01", "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
-            (None, "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
-            ("eva-01", "revision_url", None, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) using configuration 'My config'"),
-            (None, "revision_url", self.model_version_1, None, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]}"),
-            ("eva-01", "revision_url", None, None, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]})"),
-            (None, "revision_url", None, None, f"Worker Recognizer @ {str(test_version.id)[:6]}"),
-            ("eva-01", None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 (version 5) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
-            (None, None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
-            ("eva-01", None, None, self.configuration_1, "Worker Recognizer @ eva-01 (version 5) using configuration 'My config'"),
-            (None, None, self.model_version_1, None, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]}"),
-            ("eva-01", None, None, None, "Worker Recognizer @ eva-01 (version 5)"),
-            (None, None, None, None, "Worker Recognizer @ version 5"),
+            ("eva-01", None, "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
+            (None, None, "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
+            ("eva-01", None, "revision_url", None, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) using configuration 'My config'"),
+            (None, None, "revision_url", self.model_version_1, None, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]}"),
+            ("eva-01", None, "revision_url", None, None, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]})"),
+            (None, None, "revision_url", None, None, f"Worker Recognizer @ {str(test_version.id)[:6]}"),
+            ("eva-01", None, None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 (version 5) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
+            (None, None, None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"),
+            ("eva-01", None, None, None, self.configuration_1, "Worker Recognizer @ eva-01 (version 5) using configuration 'My config'"),
+            (None, None, None, self.model_version_1, None, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]}"),
+            ("eva-01", None, None, None, None, "Worker Recognizer @ eva-01 (version 5)"),
+            ("eva-01", "operation-yashima", None, None, None, "Worker Recognizer @ eva-01 (version 5)"),
+            (None, "operation-yashima", None, None, None, "Worker Recognizer @ operation-yashima (version 5)"),
+            (None, None, None, None, None, "Worker Recognizer @ version 5"),
         ]
 
-        for tag, revision_url, model_version, config, expected_summary in cases:
-            with self.subTest(tag=tag, model_version=model_version, config=config), transaction.atomic():
+        for tag, branch, revision_url, model_version, config, expected_summary in cases:
+            with self.subTest(tag=tag, branch=branch, model_version=model_version, config=config), transaction.atomic():
                 # Clear the process of worker runs
                 self.process_2.worker_runs.all().delete()
 
@@ -453,6 +457,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase):
 
                 test_version.version = None
                 test_version.tag = tag
+                test_version.branch = branch
                 test_version.revision_url = revision_url
                 if not revision_url:
                     test_version.version = 5
@@ -516,6 +521,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase):
                         "revision_url": None,
                         "version": worker_version.version,
                         "tag": None,
+                        "branch": None,
                         "created": worker_version.created.isoformat().replace("+00:00", "Z"),
                         "state": "available",
                         "worker": {
@@ -571,6 +577,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 2,
                 "tag": None,
+                "branch": None,
                 "created": self.version_gpu_required.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
diff --git a/arkindex/process/tests/worker_runs/test_list.py b/arkindex/process/tests/worker_runs/test_list.py
index 63123a908d33f5c725d11be5f6fd3994356b6b81..2e35e780f2a7dcd1e4ccbb5fbc921e4f438ddf82 100644
--- a/arkindex/process/tests/worker_runs/test_list.py
+++ b/arkindex/process/tests/worker_runs/test_list.py
@@ -63,6 +63,7 @@ class TestWorkerRunsList(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
diff --git a/arkindex/process/tests/worker_runs/test_partial_update.py b/arkindex/process/tests/worker_runs/test_partial_update.py
index 43b484a6a5634da378cbe41d20f369784875b316..57967c88fac95af2715ed07f055da8e2faf85adc 100644
--- a/arkindex/process/tests/worker_runs/test_partial_update.py
+++ b/arkindex/process/tests/worker_runs/test_partial_update.py
@@ -245,6 +245,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -306,6 +307,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -372,6 +374,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -721,6 +724,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                         "revision_url": None,
                         "version": version_with_model.version,
                         "tag": None,
+                        "branch": None,
                         "created": version_with_model.created.isoformat().replace("+00:00", "Z"),
                         "state": "created",
                         "worker": {
@@ -811,6 +815,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": version_with_model.version,
                 "tag": None,
+                "branch": None,
                 "created": version_with_model.created.isoformat().replace("+00:00", "Z"),
                 "state": "created",
                 "worker": {
@@ -879,6 +884,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -1022,6 +1028,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase):
                         "revision_url": None,
                         "version": worker_version.version,
                         "tag": None,
+                        "branch": None,
                         "created": worker_version.created.isoformat().replace("+00:00", "Z"),
                         "state": "available",
                         "worker": {
diff --git a/arkindex/process/tests/worker_runs/test_retrieve.py b/arkindex/process/tests/worker_runs/test_retrieve.py
index 7c2471ee10aa682c89da96dbb4e429af0d564047..ef0af8081a543bb0e31a4c34f5feb9274955d5b7 100644
--- a/arkindex/process/tests/worker_runs/test_retrieve.py
+++ b/arkindex/process/tests/worker_runs/test_retrieve.py
@@ -97,6 +97,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -157,6 +158,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -246,6 +248,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "created",
                 "worker": {
@@ -286,6 +289,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -357,6 +361,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
diff --git a/arkindex/process/tests/worker_runs/test_update.py b/arkindex/process/tests/worker_runs/test_update.py
index b4e38afa695846dd92b96d5dd732c26dbbbb9a04..2fc6d6812a95a8fafce5825858b288a093c02d9f 100644
--- a/arkindex/process/tests/worker_runs/test_update.py
+++ b/arkindex/process/tests/worker_runs/test_update.py
@@ -267,6 +267,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -328,6 +329,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -397,6 +399,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
@@ -759,6 +762,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase):
                         "revision_url": None,
                         "version": version_with_model.version,
                         "tag": None,
+                        "branch": None,
                         "created": version_with_model.created.isoformat().replace("+00:00", "Z"),
                         "state": "created",
                         "worker": {
@@ -852,6 +856,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": version_with_model.version,
                 "tag": None,
+                "branch": None,
                 "created": version_with_model.created.isoformat().replace("+00:00", "Z"),
                 "state": "created",
                 "worker": {
@@ -921,6 +926,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase):
                 "revision_url": None,
                 "version": 1,
                 "tag": None,
+                "branch": None,
                 "created": self.version_1.created.isoformat().replace("+00:00", "Z"),
                 "state": "available",
                 "worker": {
diff --git a/arkindex/sql_validation/indexer_prefetch.sql b/arkindex/sql_validation/indexer_prefetch.sql
index 2befb06882808636cd380dc4982931ca16d7d4ab..ce597800590c59c75215106ebf6e996cfbf9bf05 100644
--- a/arkindex/sql_validation/indexer_prefetch.sql
+++ b/arkindex/sql_validation/indexer_prefetch.sql
@@ -69,6 +69,7 @@ SELECT "process_workerversion"."id",
        "process_workerversion"."model_usage",
        "process_workerversion"."docker_image_iid",
        "process_workerversion"."revision_url",
+       "process_workerversion"."branch",
        "process_workerversion"."tag",
        "process_workerversion"."feature",
        "process_workerversion"."created",
@@ -160,6 +161,7 @@ SELECT "process_workerversion"."id",
        "process_workerversion"."model_usage",
        "process_workerversion"."docker_image_iid",
        "process_workerversion"."revision_url",
+       "process_workerversion"."branch",
        "process_workerversion"."tag",
        "process_workerversion"."feature",
        "process_workerversion"."created",