Collection Creation
Creating collections with outcomes and AI models in the MediaViz API.
Overview
Outcomes and Models
Collections are created via POST /api/v1/project_outcome/. You must specify at least one outcome or model as query parameters.
Outcomes are high-level analysis goals that automatically enable the required set of AI models. These enable complex processing, including running prerequisite models followed by summary analysis.
Models are individual AI capabilities — some can be requested directly, while others have prerequisites and must be requested through an outcome.
- Outcomes —
curation,similar_moments,high_similarity,near_duplicates,portraits,persons,normalize - Direct models —
blur,colors,face_recognition,image_classification,image_comparison,image_describe,ocr
Continuous upload collections (type 2) currently support only blur, colors, face_recognition (basic face detection), image_classification, ocr, and image_describe models, plus the normalize outcome. Other outcomes require a standard collection (type 1).
Curation
Curation
The curation outcome runs the full curation pipeline. It flags blurry photos, extracts colors, detects faces, classifies image content, and groups similar photos, then gives each photo an evidence_score used to rank photos by overall quality.
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Curation Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'curation'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My Curation Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'curation'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Curation Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'curation'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My Curation Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'curation'
}
);
result = mediaviz.projects.create_project_and_run(
'My Curation Collection',
1, # type — 1 = standard collection only
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
outcomes='curation'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My Curation Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'curation'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?outcomes=curation' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My Curation Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON
Similar Photos & Duplicate Detection
Outcomes — similar_moments / high_similarity / near_duplicates / portraits
The similarity outcomes group images by visual likeness. Each variant applies a different sensitivity level that controls how closely images must match to be grouped.
similar_moments— low sensitivity; broadly groups related sceneshigh_similarity— medium sensitivity; groups clearly similar imagesnear_duplicates— high sensitivity; groups near-identical shotsportraits— portrait-optimized sensitivity; designed for grouping headshots
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Similarity Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'similar_moments'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My Similarity Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'similar_moments'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Similarity Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'similar_moments'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My Similarity Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'similar_moments'
}
);
result = mediaviz.projects.create_project_and_run(
'My Similarity Collection',
1, # type — 1 = standard collection only
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
outcomes='similar_moments'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My Similarity Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'similar_moments'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?outcomes=similar_moments' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My Similarity Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON
Persons
Outcome — persons
The persons outcome detects and identifies human subjects across your collection.
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Persons Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'persons'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My Persons Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'persons'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Persons Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'persons'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My Persons Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'persons'
}
);
result = mediaviz.projects.create_project_and_run(
'My Persons Collection',
1, # type — 1 = standard collection only
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
outcomes='persons'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My Persons Collection',
1, // type — 1 = standard collection only
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'persons'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?outcomes=persons' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My Persons Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON
Normalize
Outcome — normalize
The normalize outcome standardizes photo data in a collection for consistent downstream processing.
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Normalize Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'normalize'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My Normalize Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'normalize'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Normalize Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'normalize'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My Normalize Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
outcomes: 'normalize'
}
);
result = mediaviz.projects.create_project_and_run(
'My Normalize Collection',
1, # type — 1 = standard collection, 2 = continuous upload
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type (1 or 2)
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
outcomes='normalize'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My Normalize Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'normalize'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?outcomes=normalize' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My Normalize Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON
Standalone Models
Direct Models
Direct models can be requested on their own via the models query parameter, without an outcome. Some are also included in outcomes such as curation. See examples below.
Image Classification
Applies labels with confidence values to all photos in the collection. Enables custom album generation, natural-language search, and other metadata-driven processing.
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Labeled Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_classification'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My Labeled Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_classification'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Labeled Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_classification'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My Labeled Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_classification'
}
);
result = mediaviz.projects.create_project_and_run(
'My Labeled Collection',
1, # type — 1 = standard collection, 2 = continuous upload
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type (1 or 2)
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
models='image_classification'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My Labeled Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'image_classification'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?models=image_classification' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My Labeled Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON
Captions
Generates a natural-language caption describing the content of each photo. Aliases: caption, describe, description.
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Captions Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_describe'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My Captions Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_describe'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My Captions Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_describe'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My Captions Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'image_describe'
}
);
result = mediaviz.projects.create_project_and_run(
'My Captions Collection',
1, # type — 1 = standard collection, 2 = continuous upload
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type (1 or 2)
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
models='image_describe'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My Captions Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'image_describe'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?models=image_describe' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My Captions Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON
OCR (Optical Character Recognition)
Extracts text content from images using optical character recognition. Alias: optical_content_recognition.
Request Sample
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My OCR Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'ocr'
}
);
import type { ProjectRunDisplay } from '@mediaviz/sdk';
const { project_table_name }: ProjectRunDisplay = await mediaviz.projects.createProjectAndRun(
'My OCR Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'ocr'
}
);
const { project_table_name } = await mediaviz.projects.createProjectAndRun(
'My OCR Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'ocr'
}
);
const { client } = useMediaViz();
const { project_table_name } = await client.projects.createProjectAndRun(
'My OCR Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
{
models: 'ocr'
}
);
result = mediaviz.projects.create_project_and_run(
'My OCR Collection',
1, # type — 1 = standard collection, 2 = continuous upload
None, # private — optional; defaults to false
None, # description — optional
None, # directory — optional folder path
1, # photoUploadVector — should match type (1 or 2)
None, # thumbnail — optional cover image URL
None, # runName — optional label for this run
models='ocr'
)
# result['project_table_name']
$result = $mediaviz->projects->createProjectAndRun(
'My OCR Collection',
1, // type — 1 = standard collection, 2 = continuous upload
null, // private — optional; defaults to false
null, // description — optional
null, // directory — optional folder path
1, // photoUploadVector — should match type (1 or 2)
null, // thumbnail — optional cover image URL
null, // runName — optional label for this run
'ocr'
);
// $result['project_table_name']
curl -X POST 'https://api.mediaviz.ai/api/v1/project_outcome/?models=ocr' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoidXNyXzAxYWJjMTIzIiwiZXhwIjoxNzQzNjMwMzI5fQ.RwJF-KLLr8K5JgEtIeFiKWELcv-FDLNzMPHJ2St_wAo' \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"name": "My OCR Collection",
"private": null,
"type": 1,
"description": null,
"directory": null,
"photo_upload_vector": 1,
"thumbnail": null,
"run_name": null
}
JSON