# nuxeo/nuxeo-studio-community-cookbook architecture

> Architecture diagram of the GitHub repository nuxeo/nuxeo-studio-community-cookbook, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nuxeo/nuxeo-studio-community-cookbook
- Repository: https://github.com/nuxeo/nuxeo-studio-community-cookbook

## Overview

The Nuxeo Studio Community Cookbook is a collection of copy-and-paste customization examples, not a single application or runtime pipeline. The documented authoring workflow is for a community member to select an example and adapt it in Nuxeo Studio Modeler or Designer for an active Studio project. The graph highlights sampled automation examples and their documented or source-visible Nuxeo operations; the tree and excerpts are selective, so unsampled capabilities and uncertain wiring are not expanded.

Main entry points: [`modules/nuxeo/related-documents/modeler/getAllRelations.js`](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/related-documents/modeler/getAllRelations.js) (Related documents), [`modules/nuxeo/google-vision-ocr/modeler/ExtractDocumentText.js`](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/google-vision-ocr/modeler/ExtractDocumentText.js) (Document OCR), [`modules/nuxeo/eml-previewer/modeler/eml_to_pdf.js`](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/eml-previewer/modeler/eml_to_pdf.js) (EML preview), [`modules/nuxeo/send-email-from-webui/modeler/AS_SendMail_Internal.js`](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/send-email-from-webui/modeler/AS_SendMail_Internal.js) (Internal document mail)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Authoring workflow"]
  node_studio["Nuxeo Studio"]
  node_automation_scripts["Automation scripts"]
end

subgraph group_documents["Document features"]
  node_linked_docs["Related documents<br/>[getAllRelations.js]"]
  node_relation_directory[("Relation predicates")]
  node_document_links["Linked documents API"]
  node_custom_views["Custom thumbnails"]
  node_blob_conversion["Blob conversion"]
  node_video_thumb["Video thumbnail"]
  node_vision_ocr["Document OCR"]
  node_google_vision["Google Vision"]
  node_eml_preview["EML preview<br/>[eml_to_pdf.js]"]
  node_comment_index["Comment indexing"]
  node_repository[("Nuxeo repository")]
end

subgraph group_automation["Automation examples"]
  node_workflow_reassign["Bulk task reassignment"]
  node_workflow_tasks["Workflow task service"]
  node_mail_internal["Internal document mail"]
  node_mail_service["Nuxeo mail service"]
end

subgraph group_insights["Search and metrics"]
  node_project_metrics["Project metrics"]
  node_metrics_docs["Metrics documents"]
end

subgraph group_admin["Administration"]
  node_user_groups["User group management"]
  node_group_service[("Group directory")]
  node_facet_listing["Facet listing"]
end

node_community(("Community contributor"))

node_community -->|"authors in"| node_studio
node_studio -->|"customizes with"| node_automation_scripts
node_linked_docs -->|"reads predicates"| node_relation_directory
node_linked_docs -->|"queries links"| node_document_links
node_custom_views -->|"converts thumbnail"| node_blob_conversion
node_video_thumb -->|"updates document"| node_repository
node_vision_ocr -.->|"requests OCR"| node_google_vision
node_vision_ocr -->|"saves extracted text"| node_repository
node_eml_preview -->|"converts EML"| node_blob_conversion
node_eml_preview -->|"attaches PDF"| node_repository
node_comment_index -->|"updates comment data"| node_repository
node_workflow_reassign -->|"reassigns tasks"| node_workflow_tasks
node_mail_internal -->|"sends message"| node_mail_service
node_mail_internal -->|"records share"| node_repository
node_metrics_docs -->|"creates and updates"| node_repository
node_project_metrics -->|"generates metrics data"| node_repository
node_user_groups -->|"updates membership"| node_group_service
node_facet_listing -->|"reads facet metadata"| node_repository

click node_automation_scripts "https://github.com/nuxeo/nuxeo-studio-community-cookbook/tree/master/modules/nuxeo"
click node_linked_docs "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/related-documents/modeler/getAllRelations.js"
click node_custom_views "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/custom-views/modeler/AS_AddCustomView.js"
click node_video_thumb "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/video-thumbnail/modeler/SetThumbnailByTimecode.js"
click node_vision_ocr "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/google-vision-ocr/modeler/ExtractDocumentText.js"
click node_eml_preview "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/eml-previewer/modeler/eml_to_pdf.js"
click node_comment_index "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/comment-indexing/modeler/Comment_AddedOrRemoved.js"
click node_workflow_reassign "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/bulk-workflow-reassignment/modeler/AS_BulkWorkflowReassignment.js"
click node_mail_internal "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/send-email-from-webui/modeler/AS_SendMail_Internal.js"
click node_project_metrics "https://github.com/nuxeo/nuxeo-studio-community-cookbook/tree/master/modules/nuxeo/project-metrics/modeler"
click node_metrics_docs "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/project-metrics/modeler/trk_GenerateData_Docs.js"
click node_user_groups "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/user-group-management/modeler/updateUsersToGroup.js"
click node_facet_listing "https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/edit-facets/modeler/api_Util_GetAllFacets.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_studio,node_automation_scripts toneBlue
class node_linked_docs,node_relation_directory,node_document_links,node_custom_views,node_blob_conversion,node_video_thumb,node_vision_ocr,node_google_vision,node_eml_preview,node_comment_index,node_repository toneAmber
class node_workflow_reassign,node_workflow_tasks,node_mail_internal,node_mail_service toneMint
class node_project_metrics,node_metrics_docs toneRose
class node_user_groups,node_group_service,node_facet_listing,node_community toneIndigo
```

## Components

### Authoring workflow

- **Nuxeo Studio**
- [Automation scripts](https://github.com/nuxeo/nuxeo-studio-community-cookbook/tree/master/modules/nuxeo): `modules/nuxeo`

### Document features

- [Related documents](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/related-documents/modeler/getAllRelations.js): `modules/nuxeo/related-documents/modeler/getAllRelations.js`
- **Relation predicates**
- **Linked documents API**
- [Custom thumbnails](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/custom-views/modeler/AS_AddCustomView.js): `modules/nuxeo/custom-views/modeler/AS_AddCustomView.js`
- **Blob conversion**
- [Video thumbnail](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/video-thumbnail/modeler/SetThumbnailByTimecode.js): `modules/nuxeo/video-thumbnail/modeler/SetThumbnailByTimecode.js`
- [Document OCR](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/google-vision-ocr/modeler/ExtractDocumentText.js): `modules/nuxeo/google-vision-ocr/modeler/ExtractDocumentText.js`
- **Google Vision**
- [EML preview](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/eml-previewer/modeler/eml_to_pdf.js): `modules/nuxeo/eml-previewer/modeler/eml_to_pdf.js`
- [Comment indexing](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/comment-indexing/modeler/Comment_AddedOrRemoved.js): `modules/nuxeo/comment-indexing/modeler/Comment_AddedOrRemoved.js`
- **Nuxeo repository**

### Automation examples

- [Bulk task reassignment](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/bulk-workflow-reassignment/modeler/AS_BulkWorkflowReassignment.js): `modules/nuxeo/bulk-workflow-reassignment/modeler/AS_BulkWorkflowReassignment.js`
- **Workflow task service**
- [Internal document mail](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/send-email-from-webui/modeler/AS_SendMail_Internal.js): `modules/nuxeo/send-email-from-webui/modeler/AS_SendMail_Internal.js`
- **Nuxeo mail service**

### Search and metrics

- [Project metrics](https://github.com/nuxeo/nuxeo-studio-community-cookbook/tree/master/modules/nuxeo/project-metrics/modeler): `modules/nuxeo/project-metrics/modeler`
- [Metrics documents](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/project-metrics/modeler/trk_GenerateData_Docs.js): `modules/nuxeo/project-metrics/modeler/trk_GenerateData_Docs.js`

### Administration

- [User group management](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/user-group-management/modeler/updateUsersToGroup.js): `modules/nuxeo/user-group-management/modeler/updateUsersToGroup.js`
- **Group directory**
- [Facet listing](https://github.com/nuxeo/nuxeo-studio-community-cookbook/blob/master/modules/nuxeo/edit-facets/modeler/api_Util_GetAllFacets.js): `modules/nuxeo/edit-facets/modeler/api_Util_GetAllFacets.js`

### Other components

- **Community contributor**

## Connections

- Community contributor → Nuxeo Studio: authors in
- Nuxeo Studio → Automation scripts: customizes with
- Related documents → Relation predicates: reads predicates
- Related documents → Linked documents API: queries links
- Custom thumbnails → Blob conversion: converts thumbnail
- Video thumbnail → Nuxeo repository: updates document
- Document OCR → Google Vision: requests OCR
- Document OCR → Nuxeo repository: saves extracted text
- EML preview → Blob conversion: converts EML
- EML preview → Nuxeo repository: attaches PDF
- Comment indexing → Nuxeo repository: updates comment data
- Bulk task reassignment → Workflow task service: reassigns tasks
- Internal document mail → Nuxeo mail service: sends message
- Internal document mail → Nuxeo repository: records share
- Metrics documents → Nuxeo repository: creates and updates
- Project metrics → Nuxeo repository: generates metrics data
- User group management → Group directory: updates membership
- Facet listing → Nuxeo repository: reads facet metadata
