Ango Hub Docs
Open Ango HubContact iMerit
  • Ango Hub Documentation
  • Video Guides
  • Changelog
  • FAQs & Troubleshooting
  • All Keyboard and Mouse Shortcuts
  • Core Concepts
    • Assets
    • Attachments
    • Batches
    • Benchmarks
    • Category Schema (Ontologies)
    • Frame Interpolation
    • Geofencing
    • Idle Time Detection & Time Tracking
    • Instructions
    • Issues
      • Issue Error Codes
    • Label Validation
    • Labeler Performance
    • Labeling
    • Labeling Queue
    • Multiple Classification
    • Notifications
    • Organizations
    • Projects
    • Requeuing
    • Reviewing
    • Review Queue
    • Skipping
    • Stage History
    • Tasks
    • Usage
    • User Roles
    • Workflow
      • Complete
      • Consensus
      • Hold
      • Label
      • Logic
      • Plugin
      • Review
      • Start
      • Webhook
  • Labeling
    • Managing Users in Projects
      • Profile Page
    • Managing the Project Ontology
    • Labeling Editor Interface
      • Audio Labeling Editor
      • Image Labeling Editor
      • Video Labeling Editor
      • DICOM Labeling Editor
      • Medical Labeling Editor
        • 3D Bounding Box
        • Fill Between Slices
        • Island Tools
        • Line (Tape Measure)
        • Smoothing
      • PDF Labeling Editor
      • Text (NER) Labeling Editor
      • LLM Chat Labeling Editor
      • Markdown Labeling Editor
      • 3D Multi-Sensor Fusion Labeling Editor
    • Labeling Classes
      • Tools
        • Bounding Box
        • Brush
        • Entity
        • Message
        • Nested Classifications
        • PCT
        • PDF Tool
        • Point
        • Polygon
        • Polyline
        • Rotated Bounding Box
        • Segmentation
        • Spline
        • Voxel Brush
      • Classification
        • Checkbox
        • Multiple Dropdown
        • Radio
        • Rank
        • Single Dropdown
        • Text
        • Tree Dropdown Tools (Single and Multiple Selection)
      • Relation
        • Single Relation
        • Group Relation
    • Magnetic Lasso
    • Performance & Compatibility Considerations
  • Data
    • Data in Ango Hub
      • Embedding Private Bucket Files in MD Assets
    • Importing Assets
      • Asset Builder
      • Bundled Assets
        • Importing Multiple Images as One Multi-Page Asset
        • Importing Multiple Single-Frame DICOM Files as One Multi-Page Asset
        • Importing multiple DICOM files to be annotated and displayed at once
        • Importing Multiple Single-Frame DICOM Files as a DICOM Series
        • Importing Multiple Markdown Files as One Multi-Page Asset
      • File Explorer
      • Supported Asset File Types & Codecs
      • Importing Cloud (Remote) Assets
      • Importing From Local Machine
      • Creating and Importing LLM Chat Assets
      • Importing Data in the 3D Multi-Sensor Fusion Labeling Tool
      • Bulk Importing Markdown/HTML Assets
      • Importing Attachments during Asset Import
      • Importing Annotations during Asset Import
      • contextData: Adding Extra Data to Assets
      • Importing Reference Images as Overlay
      • Importing Reference Medical Data During Asset Import
    • Importing and Exporting Annotations
      • Importing Annotations
        • Ango Import Format
        • Importing Brush Traces
        • Importing NRRD Annotations
      • Exporting Annotations
        • Ango Export Format
          • Asset
            • Task
              • Tools
              • Classifications
              • Relations
          • Stage History
    • Adding and Managing LLMs
    • Storages
      • Set up a storage integration with Azure
      • Set up a storage integration with AWS S3
      • Set up a storage integration with MinIO and S3-compatible custom storage services
      • Set up a storage integration with GCP (Google Cloud Platform)
      • Set up CORS
      • Validating Storage Integrations
    • Purging Data from Ango Hub
  • Plugins
    • Overview of Plugins in Ango Hub
      • Installing Plugins
      • Plugin Setting Presets
      • Monitoring Plugin Progress
    • First-Party Plugins
      • Ango Export Converter Plugins
      • Asset Converter Plugins
      • Ango to Mask Converter
      • Batch Assignment
      • ChatGPT
      • Column-Agnostic Markdown Generator
      • CSV Export for Classification
      • DALL-E
      • DALL-E (Model Plugin)
      • File Explorer Plugin
      • Markdown Generator
      • One-Click Segmentation
      • Open World Object Detection
      • Optical Character Recognition
      • TPT Export
      • YOLO | Instance Segmentation
      • YOLO | Pose Estimation
      • YOLO | Object Detection
      • YOLO | Image Classification
    • Plugin Developer Documentation
      • Export Plugins
      • Batch Model Plugins
      • Model Plugins
      • File Explorer Plugins
      • Markdown Generator Plugins
      • Plugin Logger
      • [WIP] Deploying your Plugin
      • Plugin 'Host' Information
  • SDK
    • SDK Documentation
      • Project Level SDK Functions
        • add_members_to_project
        • assign_batches
        • assign_task
        • create_attachment
        • create_batch
        • create_issue
        • create_label_set
        • create_project
        • delete_issue
        • export
        • exportV3
        • get_assets
        • get_batches
        • get_issues
        • get_metrics
        • get_project
        • get_project_performance
        • get_task
        • get_tasks
        • get_task_history
        • import_labels
        • list_projects
        • requeue_tasks
        • rerun_webhook
        • update_workflow_stages
        • upload_files
        • upload_files_cloud
        • upload_files_with_asset_builder
        • upload_chat_assets
        • upload_instructions
      • Organization Level SDK Functions
        • create_storage
        • delete_organization_invites
        • delete_organization_members
        • delete_storage
        • get_organization_invites
        • get_organization_members
        • get_storages
        • invite_members_to_org
        • update_organization_members_role
    • SDK - Useful Snippets
    • SDK Changelog
  • API
    • API Documentation
  • How-To
    • Add Members
      • Add multiple users to a project
    • Annotate
      • Annotate 3D Point Cloud Files on Ango Hub
      • Perform targeted OCR on images
    • Export Data
      • Automatically send Ango Hub Webhook contents to Google Sheets, Email, Slack, and more with Zapier
      • Download a JSON of your project ontology
      • Download DICOM Segmentation Masks
      • Download your annotations in the COCO, KITTI, or YOLO format
      • Download your Segmentation Masks
      • Get your export as separate JSON files for each asset
    • Manage a Project
      • Get your API Key
      • Get your Organization ID
      • Mute your notifications
      • Open an asset provided the Asset ID
      • Pre-label assets
      • Share a filtered view of the Tasks table with others
      • Transfer project ontologies between projects
      • Transfer project workflows between projects
    • Perform Model Evaluation on Ango Hub
  • Troubleshooting
    • I get a "0 Tasks Labeled" alert when trying to pre-label tasks
    • I get a 'The data couldn't be loaded properly' error when opening certain assets
    • I get a "Unknown Classification" warning when opening a task
  • Other
    • Feature Availability Status for projects of the 3D Multi-Sensor Fusion type
    • Comparison between QuickServe and Ango Hub
    • Changes from Ango Hub Legacy
    • Video V2 Breaking Changes and Transition
    • Data Access, Storage, and Security
    • Two-Factor Authentication
    • Single Sign-On (SSO) Support
    • Customer Support
    • Ango Hub Status Page
    • Features Unavailable in Private Cloud and On-Premise Deployments of Ango Hub
Powered by GitBook
On this page
  • Creating a Markdown Generator Plugin
  • Creating a Markdown Asset with the Plugin
  1. Plugins
  2. Plugin Developer Documentation

Markdown Generator Plugins

PreviousFile Explorer PluginsNextPlugin Logger

Last updated 1 year ago

The Markdown Generator custom plugin allows you to create a form for your project managers, to which they will upload a Markdown and a CSV file. You will get access to both in your Python script, and you'll be able to manipulate both to then upload assets to a project.

Usually, the Markdown file will be be populated with data from the CSV file and will be imported to your project of choice as an asset, as shown in the example below.

Creating a Markdown Generator Plugin

Following the steps outlined , create a new plugin from the UI, choosing "Markdown Generator" as the plugin type.

Then, create and run a Python script using the MarkdownPlugin class you can find in our imerit-ango Python package under imerit_ango.plugins.

You will need to add the imerit-ango package to your Python environment by running

pip install imerit-ango

Here is the class's documentation, and an example:

MarkdownPlugin

Parameters:

  • id: string

    • The plugin's ID. You may obtain this ID from the plugin's information box in the Development section of the Plugin page.

  • secret: string

    • The plugin's secret. You can think of this as a private key you'll need to be able to connect your script to the plugin. You may obtain this secret from the plugin's information box in the Development section of the Plugin page.

  • callback: Callable[[str, dict], Tuple[str, BytesIO]]

    • The callback function. This function will be run whenever a user runs this plugin. More on the callback function below.

Callback Function

Parameters:

  • **data: dict

    • projectId: str

      • The ID of the project to which the populated Markdown file needs to be uploaded.

    • fileList: List[dict]

    • inputFile: str

    • apiKey: str

      • The API key of the user running the plugin.

    • orgId: str

      • The ID of the organization where the plugin is being run.

    • runBy: str

      • The ID of the user running the plugin.

    • session: str

      • The ID of the session created when running the plugin.

    • batches: List[str]

      • Batches to which the final text assets will be assigned.

    • markdownText: string

      • The Markdown text the contents of which will be populated with the CSV.

    • logger: PluginLogger

      • [TODO]

    • configJSON: str

      • The config JSON your users will pass to you through the Config JSON text field when running the plugin. Warning: the JSON will be passed as a string so you will have to destringify it. Example code to obtain the original JSON as a Python object:

def sample_callback(**data):
    config_str = data.get('configJSON')
    config = json.loads(config_str)

Returns:

  • message: string

    • Message to show users once the plugin has finished running.

Sample Python Script

Find sample code here:

For this example, we use the following default Config JSON:

{
  "batch_name_column": "AUTO_DETECT",
  "external_id_columns": [],
  "upload_batch_size": 100
}

Creating a Markdown Asset with the Plugin

Your Python script needs to be running for users to be able to run your plugin.

If you are the creator of the plugin, from the Plugins page, enter the Development section and click on Open on the relevant plugin. A dialog will pop up.

This is the dialog that will appear when clicking on Run on the Markdown plugin:

Project: The project where you'd like the final assembled asset to be uploaded. If you are running this plugin from a project, the project you're in will be pre-selected.

File Upload: Upload the CSV file you'd like to use as base to populate the Markdown file.

Create Markdown: Upload or write a Markdown file to use as skeleton. Clicking on Open Editor will open a simple Markdown text editor with built-in preview of what it will look like on Hub.

For example, if you were to use the Python code provided above, you might use the following CSV file:

id,name,surname,phone,birthday,birthplace,url1,url2,url3,url4,url5
1001,Harry,Potter,1234,31.07.1980,London,https://en.wikipedia.org/wiki/Harry_Potter_(character),https://en.wikipedia.org/wiki/Daniel_Radcliffe,https://www.imdb.com/name/nm0705356/,https://www.rottentomatoes.com/celebrity/daniel_radcliffe,https://www.instagram.com/daniel9340/?hl=en
1002,Hermione,Granger,4567,19.09.1979,London,https://en.wikipedia.org/wiki/Hermione_Granger,https://en.wikipedia.org/wiki/Emma_Watson,https://www.imdb.com/name/nm0914612/,https://www.rottentomatoes.com/celebrity/emma_watson,https://www.instagram.com/emmawatson/?hl=en
1003,Ron,Weasley,1357,01.03.1980,London,https://en.wikipedia.org/wiki/Ron_Weasley,https://en.wikipedia.org/wiki/Rupert_Grint,https://www.imdb.com/name/nm0342488/,https://www.rottentomatoes.com/celebrity/rupert_grint,https://www.instagram.com/rupertgrint/?hl=en

And the following Markdown file:

<div style="margin:10px;display:flex;">
	<div style="width:50%">
		<div style="font-size:13px;font-weight:500;display:flex;">
			<div style="width:100px;color:gray">Name</div>: |name|
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">Surname</div>: |surname|		
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
			<div style="width:100px;color:gray">Phone</div>: |phone|
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">Birthday</div>: |birthday|	
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">Birthplace</div>: |birthplace|
		</div>
	</div>
	<div style="width:50%">
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">url1</div>: <a href="|url1|" target="_blank">|url1|</a>
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">url2</div>: <a href="|url2|" target="_blank">|url2|</a>
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">url3</div>: <a href="|url3|" target="_blank">|url3|</a>
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">url4</div>: <a href="|url4|" target="_blank">|url4|</a>
		</div>
		<div style="font-size:13px;font-weight:500;display:flex;">
        	<div style="width:100px;color:gray">url5</div>: <a href="|url5|" target="_blank">|url5|</a>
		</div>
	</div>
</div>

You would obtain three assets, one from each of the CSV lines, looking like the Markdown but populated in the |name|, |surname|, etc. areas with the data in the CSV.

If you have added the plugin from the , go to the project where you'd like to use the plugin, and from the Settings tab (1) click on Plugins (2). Then, click on Open (3) on the relevant plugin. A dialog will pop up.

Directory
plugin-samples/markdown_plugin.py at main · angoai/plugin-samplesGitHub
plugin-samples/files at main · angoai/plugin-samplesGitHub
Logo
Logo
in this section