The Grid API
User information ¶
User details ¶
Retrieving user informationGET/user
Example URI
200
Headers
Content-Type: application/json
Body
{
"id": "0d1fbca0-ee3c-4157-9881-b03db3e462b9",
"email": "[email protected]",
"name": "Example User",
"avatar": "http://example.net/user.png"
}
Schema
{
"id": "user.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "User",
"description": "User profile",
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"email": {
"type": "string",
"example": "[email protected]"
},
"name": {
"type": "string",
"example": "Example User"
},
"avatar": {
"$ref\"": "base.json#/definitions/url"
},
"founder": {
"example": 6,
"description": "Founding member number",
"oneOf": [
{
"type": "null"
},
{
"type": "integer"
}
]
},
"scope": {
"description": "Usage scopes granted to the user",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"example": "content_management"
}
},
"app": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"plan": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"quotaSites": {
"example": 1,
"description": "How many sites the user is allowed to create",
"type": "integer"
},
"canUse": {
"description": "Feature flagging based on user plan",
"type": "object",
"properties": {
"siteMediaCta": {
"description": "If user can create CTA in the site header",
"type": "boolean"
},
"edCta": {
"description": "If user can create CTA in Ed",
"type": "boolean"
},
"edEmbed": {
"description": "If user can create embedded block in Ed",
"type": "boolean"
}
}
},
"activatedAt": {
"description": "When the user plan was activated",
"type": "string",
"format": "date-time"
}
},
"required": [
"id",
"name"
]
}
Long-running jobs ¶
Several actions in the API takes a significant time. Current examples include POST /share, /publish and /unpublish. Performing such an action returns a Location header with a Job URL.
Job details ¶
Retriving job detailsGET/job/{id}
Example URI
- id
string
(required)Job UUID
200
Headers
Content-Type: application/json
Body
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"type": "share",
"completed": true,
"failed": false,
"tasks": {
"measure": {
"foo": "bar"
}
}
}
Schema
{
"id": "job.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Job",
"description": "Long-running job",
"type": "object",
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"type": "string",
"description": "The specific type of job",
"example": "share",
"enum": [
"share",
"publish"
]
},
"source": {
"type": "string",
"description": "The endpoint that created this job",
"example": "/share"
},
"completed": {
"type": "boolean",
"description": "Whether the job is completed or not"
},
"failed": {
"type": "boolean",
"description": "Whether the job failed or not"
},
"started_at": {
"type": "string",
"description": "Time the job was started",
"format": "date-time"
},
"finished_at": {
"description": "Time the job was finished (failed or completed).",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"tasks": {
"type": "object",
"description": "Details about the tasks in this job. Job type specific."
}
},
"required": [
"type",
"tasks"
]
}
Newsfeed ¶
User's newsfeed ¶
Fetch user's latest newsfeedGET/updates{?offset,limit,measurements}
Example URI
- offset
number
(required)Offset to use for pagination
- limit
number
(required)Limit to use for pagination
- measurements
string
(required)Selectively get only certain measurements
200
Headers
Content-Type: application/json
Body
[
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"sites": [
"the-domains/the-grid"
],
"score": 8,
"metadata": {
"inLanguage": "en",
"dateCreated": "2014-05-08T13:22:59.000Z"
},
"starred": [
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"item": "b04d3a7f-689f-4bc5-a7c6-304b39f271f3",
"metadata": {
"starred": true
},
"type": "image",
"src": "https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png",
"html": "<img src=\"https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png\" title=\"Dan Tocchini\" alt=\"Creator of GSS (Grid Style Sheets) and Partner of D4 Interactive Agency. Producing interactive works for Audi, Microsoft and more.\">"
}
],
"created_at": "2014-05-08T13:22:59.000Z",
"updated_at": null
}
]
Site Management ¶
Site information ¶
List user websitesGET/site
Example URI
200
Headers
Content-Type: application/json
Body
[
{
"id": "059c8aa5-5fac-4bb7-b160-48689bc12a7c",
"name": "The Grid",
"repo": "the-domains/the-grid",
"domain": "thegrid.io",
"path": null,
"url": "http://thegrid.io",
"config": {
"name": "GSS site",
"color": {
"brandColors": [
"#FFFC4F",
"#3AFFD6"
],
"brandStrength": 0.9
}
},
"owner": "0d1fbca0-ee3c-4157-9881-b03db3e462b9",
"collaborators": [],
"created_at": "2014-05-08T13:22:59.000Z",
"updated_at": null
}
]
Create a websitePOST/site
Example URI
Note: the repository must be in the-domains
organization. The repository name can later be used for sharing content to the newly-created site.
Headers
Content-Type: application/json
Body
{
"name": "The Grid",
"repo": "the-domains/the-grid",
"domain": "thegrid.io"
}
Schema
{
"id": "site.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site",
"description": "Grid site",
"type": "object",
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"name": {
"type": "string",
"description": "User-readable name of the website"
},
"repo": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"domain": {
"example": "blog.thegrid.io",
"description": "Custom domain for the website, if any",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "hostname"
}
]
},
"path": {
"type": [
"string",
"null"
],
"example": "/news",
"description": "Subdirectory path for the website, if any"
},
"config": {
"id": "siteconfig.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site config",
"description": "Configuration of a single site",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Website name"
},
"title": {
"type": [
"string",
"null"
],
"description": "Website title"
},
"description": {
"type": [
"string",
"null"
],
"description": "Website tagline"
},
"style": {
"type": "string",
"description": "Layout filter selected for the site",
"example": "taylor",
"default": "the-composer"
},
"favicon": {
"description": "Favicon URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"logo": {
"description": "SVG logo URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"cta": {
"type": "object",
"properties": {
"domain": {
"name": "domain",
"description": "CDN to serve the CtA from",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"bucket": {
"name": "bucket",
"description": "S3 bucket to serve the CtA from",
"type": [
"string",
"null"
]
},
"version": {
"name": "version",
"description": "CtA version to use on site",
"example": "1.0.0",
"type": [
"string",
"null"
]
}
}
},
"analytics": {
"type": "object",
"properties": {
"google": {
"name": "google",
"description": "Google Analytics ID for the site",
"type": [
"string",
"null"
]
},
"facebook": {
"name": "facebook",
"description": "Facebook tracking ID for the site",
"type": [
"string",
"null"
]
},
"twitter": {
"name": "twitter",
"description": "Twitter tracking ID for the site",
"type": [
"string",
"null"
]
}
}
},
"image_filters": {
"type": "object",
"properties": {
"server": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"key": {
"type": "string",
"description": "imgflo API key"
},
"secret": {
"type": "string",
"description": "imgflo API secret"
}
},
"required": [
"server",
"key",
"secret"
]
},
"opengraph": {
"type": "object",
"properties": {
"image": {
"name": "image",
"description": "Default image to use when sharing the website",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"type": {
"type": [
"string",
"null"
],
"description": "Type of the website"
},
"appId": {
"type": [
"string",
"null"
],
"description": "Facebook App ID associated with the site"
}
}
},
"content_rating": {
"type": "object",
"properties": {
"adult": {
"name": "adult",
"description": "Whether the site contains adult content",
"type": "boolean"
}
}
},
"collections": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"id": "collection.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content collection configuration",
"description": "",
"definitions": {
"filtertag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"filternottag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"type": "object",
"properties": {
"filter": {
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"notTag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"anyOf": [
{
"required": [
"tag"
]
},
{
"required": [
"notTag"
]
}
]
},
"index": {
"type": "object"
}
}
}
},
"color": {
"type": "object",
"properties": {
"brandColors": {
"type": "array",
"default": [],
"items": {
"description": "#RGB color",
"format": "rgbhexcolor",
"pattern": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",
"example": "#aa33cc",
"type": "string"
},
"minItems": 1,
"maxItems": 5,
"description": "The user-selected brand colors for the site"
},
"brandStrength": {
"type": "number",
"default": 0,
"minimum": 0,
"maximum": 1,
"description": "How strongly to tend towards brandColors, as opposed to content colors (adaptive)"
},
"lightness": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"saturation": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"rhythmicContrast": {
"description": "The amount of color variation",
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
}
}
},
"layout_spectrum": {
"type": "number",
"description": "Site layout spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"typography_spectrum": {
"type": "number",
"description": "Site typography spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"site_lang": {
"type": [
"string",
"null"
],
"description": "Primary site content langauge; ISO 693-1 format",
"example": "ar",
"default": "en"
},
"author": {
"type": "object",
"properties": {
"name": {
"oneOf": [
{
"type": "null"
},
{
"type": "string"
}
]
},
"email": {
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"url": {
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
}
},
"navigation": {
"type": "array",
"description": "External links to include in site navigation",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"profiles": {
"type": "array",
"description": "Social media profile links associated with the site",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"auto_approve": {
"description": "Whether to publish site changes without design review",
"type": "boolean"
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the site. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"purpose": {
"description": "Site purposes",
"type": "array",
"minItems": 0,
"maxItems": 2,
"uniqueItems": true,
"items": {
"id": "sitepurpose.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site Purpose",
"description": "Definition of a purpose for a website, with potential attached action",
"type": [
"object"
],
"properties": {
"type": {
"description": "Type of the site purpose",
"example": "purchase",
"type": "string"
},
"label": {
"description": "Textual label for the site purpose",
"example": "Become a Founding Member",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
}
},
"required": [
"type",
"label"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"item"
]
},
{
"required": [
"cta",
"price"
]
}
]
}
},
"content": {
"description": "Site media content blocks",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"github": {
"description": "Whether to synchronize site to GitHub",
"type": "boolean",
"default": false
}
}
},
"owner": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"favlogo": {
"description": "URL of the website favlogo",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"required": [
"name",
"repo"
],
"anyOf": [
{
"required": [
"domain"
]
},
{
"required": [
"path"
]
}
]
}
201
Site was successfully created
Headers
Location: /site/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
422
Missing site information
User website ¶
Get website detailsGET/site/{id}
Example URI
- id
string
(required)Site UUID
200
Headers
Content-Type: application/json
Schema
{
"id": "site.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site",
"description": "Grid site",
"type": "object",
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"name": {
"type": "string",
"description": "User-readable name of the website"
},
"repo": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"domain": {
"example": "blog.thegrid.io",
"description": "Custom domain for the website, if any",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "hostname"
}
]
},
"path": {
"type": [
"string",
"null"
],
"example": "/news",
"description": "Subdirectory path for the website, if any"
},
"config": {
"id": "siteconfig.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site config",
"description": "Configuration of a single site",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Website name"
},
"title": {
"type": [
"string",
"null"
],
"description": "Website title"
},
"description": {
"type": [
"string",
"null"
],
"description": "Website tagline"
},
"style": {
"type": "string",
"description": "Layout filter selected for the site",
"example": "taylor",
"default": "the-composer"
},
"favicon": {
"description": "Favicon URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"logo": {
"description": "SVG logo URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"cta": {
"type": "object",
"properties": {
"domain": {
"name": "domain",
"description": "CDN to serve the CtA from",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"bucket": {
"name": "bucket",
"description": "S3 bucket to serve the CtA from",
"type": [
"string",
"null"
]
},
"version": {
"name": "version",
"description": "CtA version to use on site",
"example": "1.0.0",
"type": [
"string",
"null"
]
}
}
},
"analytics": {
"type": "object",
"properties": {
"google": {
"name": "google",
"description": "Google Analytics ID for the site",
"type": [
"string",
"null"
]
},
"facebook": {
"name": "facebook",
"description": "Facebook tracking ID for the site",
"type": [
"string",
"null"
]
},
"twitter": {
"name": "twitter",
"description": "Twitter tracking ID for the site",
"type": [
"string",
"null"
]
}
}
},
"image_filters": {
"type": "object",
"properties": {
"server": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"key": {
"type": "string",
"description": "imgflo API key"
},
"secret": {
"type": "string",
"description": "imgflo API secret"
}
},
"required": [
"server",
"key",
"secret"
]
},
"opengraph": {
"type": "object",
"properties": {
"image": {
"name": "image",
"description": "Default image to use when sharing the website",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"type": {
"type": [
"string",
"null"
],
"description": "Type of the website"
},
"appId": {
"type": [
"string",
"null"
],
"description": "Facebook App ID associated with the site"
}
}
},
"content_rating": {
"type": "object",
"properties": {
"adult": {
"name": "adult",
"description": "Whether the site contains adult content",
"type": "boolean"
}
}
},
"collections": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"id": "collection.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content collection configuration",
"description": "",
"definitions": {
"filtertag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"filternottag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"type": "object",
"properties": {
"filter": {
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"notTag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"anyOf": [
{
"required": [
"tag"
]
},
{
"required": [
"notTag"
]
}
]
},
"index": {
"type": "object"
}
}
}
},
"color": {
"type": "object",
"properties": {
"brandColors": {
"type": "array",
"default": [],
"items": {
"description": "#RGB color",
"format": "rgbhexcolor",
"pattern": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",
"example": "#aa33cc",
"type": "string"
},
"minItems": 1,
"maxItems": 5,
"description": "The user-selected brand colors for the site"
},
"brandStrength": {
"type": "number",
"default": 0,
"minimum": 0,
"maximum": 1,
"description": "How strongly to tend towards brandColors, as opposed to content colors (adaptive)"
},
"lightness": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"saturation": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"rhythmicContrast": {
"description": "The amount of color variation",
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
}
}
},
"layout_spectrum": {
"type": "number",
"description": "Site layout spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"typography_spectrum": {
"type": "number",
"description": "Site typography spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"site_lang": {
"type": [
"string",
"null"
],
"description": "Primary site content langauge; ISO 693-1 format",
"example": "ar",
"default": "en"
},
"author": {
"type": "object",
"properties": {
"name": {
"oneOf": [
{
"type": "null"
},
{
"type": "string"
}
]
},
"email": {
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"url": {
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
}
},
"navigation": {
"type": "array",
"description": "External links to include in site navigation",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"profiles": {
"type": "array",
"description": "Social media profile links associated with the site",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"auto_approve": {
"description": "Whether to publish site changes without design review",
"type": "boolean"
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the site. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"purpose": {
"description": "Site purposes",
"type": "array",
"minItems": 0,
"maxItems": 2,
"uniqueItems": true,
"items": {
"id": "sitepurpose.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site Purpose",
"description": "Definition of a purpose for a website, with potential attached action",
"type": [
"object"
],
"properties": {
"type": {
"description": "Type of the site purpose",
"example": "purchase",
"type": "string"
},
"label": {
"description": "Textual label for the site purpose",
"example": "Become a Founding Member",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
}
},
"required": [
"type",
"label"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"item"
]
},
{
"required": [
"cta",
"price"
]
}
]
}
},
"content": {
"description": "Site media content blocks",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"github": {
"description": "Whether to synchronize site to GitHub",
"type": "boolean",
"default": false
}
}
},
"owner": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"favlogo": {
"description": "URL of the website favlogo",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"required": [
"name",
"repo"
],
"anyOf": [
{
"required": [
"domain"
]
},
{
"required": [
"path"
]
}
]
}
Update website detailsPUT/site/{id}
Example URI
- id
string
(required)Site UUID
Headers
Content-Type: application/json
Body
{
"name": "The Grid",
"repo": "the-domains/the-grid",
"domain": "thegrid.io",
"path": null,
"config": {
"name": "GSS site",
"color": {
"brandColors": [
"#FFFC4F",
"#3AFFD6"
],
"brandStrength": 0.9
}
}
}
Schema
{
"id": "site.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site",
"description": "Grid site",
"type": "object",
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"name": {
"type": "string",
"description": "User-readable name of the website"
},
"repo": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"domain": {
"example": "blog.thegrid.io",
"description": "Custom domain for the website, if any",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "hostname"
}
]
},
"path": {
"type": [
"string",
"null"
],
"example": "/news",
"description": "Subdirectory path for the website, if any"
},
"config": {
"id": "siteconfig.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site config",
"description": "Configuration of a single site",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Website name"
},
"title": {
"type": [
"string",
"null"
],
"description": "Website title"
},
"description": {
"type": [
"string",
"null"
],
"description": "Website tagline"
},
"style": {
"type": "string",
"description": "Layout filter selected for the site",
"example": "taylor",
"default": "the-composer"
},
"favicon": {
"description": "Favicon URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"logo": {
"description": "SVG logo URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"cta": {
"type": "object",
"properties": {
"domain": {
"name": "domain",
"description": "CDN to serve the CtA from",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"bucket": {
"name": "bucket",
"description": "S3 bucket to serve the CtA from",
"type": [
"string",
"null"
]
},
"version": {
"name": "version",
"description": "CtA version to use on site",
"example": "1.0.0",
"type": [
"string",
"null"
]
}
}
},
"analytics": {
"type": "object",
"properties": {
"google": {
"name": "google",
"description": "Google Analytics ID for the site",
"type": [
"string",
"null"
]
},
"facebook": {
"name": "facebook",
"description": "Facebook tracking ID for the site",
"type": [
"string",
"null"
]
},
"twitter": {
"name": "twitter",
"description": "Twitter tracking ID for the site",
"type": [
"string",
"null"
]
}
}
},
"image_filters": {
"type": "object",
"properties": {
"server": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"key": {
"type": "string",
"description": "imgflo API key"
},
"secret": {
"type": "string",
"description": "imgflo API secret"
}
},
"required": [
"server",
"key",
"secret"
]
},
"opengraph": {
"type": "object",
"properties": {
"image": {
"name": "image",
"description": "Default image to use when sharing the website",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"type": {
"type": [
"string",
"null"
],
"description": "Type of the website"
},
"appId": {
"type": [
"string",
"null"
],
"description": "Facebook App ID associated with the site"
}
}
},
"content_rating": {
"type": "object",
"properties": {
"adult": {
"name": "adult",
"description": "Whether the site contains adult content",
"type": "boolean"
}
}
},
"collections": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"id": "collection.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content collection configuration",
"description": "",
"definitions": {
"filtertag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"filternottag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"type": "object",
"properties": {
"filter": {
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"notTag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"anyOf": [
{
"required": [
"tag"
]
},
{
"required": [
"notTag"
]
}
]
},
"index": {
"type": "object"
}
}
}
},
"color": {
"type": "object",
"properties": {
"brandColors": {
"type": "array",
"default": [],
"items": {
"description": "#RGB color",
"format": "rgbhexcolor",
"pattern": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",
"example": "#aa33cc",
"type": "string"
},
"minItems": 1,
"maxItems": 5,
"description": "The user-selected brand colors for the site"
},
"brandStrength": {
"type": "number",
"default": 0,
"minimum": 0,
"maximum": 1,
"description": "How strongly to tend towards brandColors, as opposed to content colors (adaptive)"
},
"lightness": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"saturation": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"rhythmicContrast": {
"description": "The amount of color variation",
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
}
}
},
"layout_spectrum": {
"type": "number",
"description": "Site layout spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"typography_spectrum": {
"type": "number",
"description": "Site typography spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"site_lang": {
"type": [
"string",
"null"
],
"description": "Primary site content langauge; ISO 693-1 format",
"example": "ar",
"default": "en"
},
"author": {
"type": "object",
"properties": {
"name": {
"oneOf": [
{
"type": "null"
},
{
"type": "string"
}
]
},
"email": {
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"url": {
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
}
},
"navigation": {
"type": "array",
"description": "External links to include in site navigation",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"profiles": {
"type": "array",
"description": "Social media profile links associated with the site",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"auto_approve": {
"description": "Whether to publish site changes without design review",
"type": "boolean"
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the site. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"purpose": {
"description": "Site purposes",
"type": "array",
"minItems": 0,
"maxItems": 2,
"uniqueItems": true,
"items": {
"id": "sitepurpose.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site Purpose",
"description": "Definition of a purpose for a website, with potential attached action",
"type": [
"object"
],
"properties": {
"type": {
"description": "Type of the site purpose",
"example": "purchase",
"type": "string"
},
"label": {
"description": "Textual label for the site purpose",
"example": "Become a Founding Member",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
}
},
"required": [
"type",
"label"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"item"
]
},
{
"required": [
"cta",
"price"
]
}
]
}
},
"content": {
"description": "Site media content blocks",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"github": {
"description": "Whether to synchronize site to GitHub",
"type": "boolean",
"default": false
}
}
},
"owner": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"favlogo": {
"description": "URL of the website favlogo",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"required": [
"name",
"repo"
],
"anyOf": [
{
"required": [
"domain"
]
},
{
"required": [
"path"
]
}
]
}
200
Delete websiteDELETE/site/{id}
Example URI
- id
string
(required)Site UUID
200
Site DNS status ¶
Check website DNS statusPOST/site/{id}/dns
Example URI
- id
string
(required)Site UUID
200
Headers
Content-Type: application/json
Body
{
"valid": true
}
Website discovery ¶
Match URL to a websiteGET/site/discover{?url}
Example URI
- url
string
(required)URL of the website
302
Headers
Location: /site/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
409
Grid site belonging to another user was found at the URL
404
No Grid site was found for the URL
Redesigns ¶
Listing redesignsGET/site/{id}/redesign{?inflight}
Users can request a listing of the current redesigns for a website.
Whenever the site configuration is changed or new content is published, the redesigns list resets to only contain the current live design.
Example URI
- id
string
(required)Site UUID
- inflight
boolean
(optional)Whether to include in-flight redesigns in the listing
200
Headers
Content-Type: application/json
Requesting a redesignPOST/site/{id}/redesign
New redesigns can be requested by submitting a rating on an existing design.
Example URI
- id
string
(required)Site UUID
Headers
Content-Type: application/json
Body
{
"rating": {
"layoutRating": 3,
"typographyRating": 5,
"colorRating": 1
}
}
Schema
{
"id": "redesignrequest.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Redesign request",
"description": "",
"type": "object",
"properties": {
"id": {
"oneOf": [
{
"type": "null"
},
{
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
}
]
},
"parent": {
"oneOf": [
{
"type": "null"
},
{
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
}
]
},
"config": {
"id": "siteconfig.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site config",
"description": "Configuration of a single site",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Website name"
},
"title": {
"type": [
"string",
"null"
],
"description": "Website title"
},
"description": {
"type": [
"string",
"null"
],
"description": "Website tagline"
},
"style": {
"type": "string",
"description": "Layout filter selected for the site",
"example": "taylor",
"default": "the-composer"
},
"favicon": {
"description": "Favicon URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"logo": {
"description": "SVG logo URL",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"cta": {
"type": "object",
"properties": {
"domain": {
"name": "domain",
"description": "CDN to serve the CtA from",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"bucket": {
"name": "bucket",
"description": "S3 bucket to serve the CtA from",
"type": [
"string",
"null"
]
},
"version": {
"name": "version",
"description": "CtA version to use on site",
"example": "1.0.0",
"type": [
"string",
"null"
]
}
}
},
"analytics": {
"type": "object",
"properties": {
"google": {
"name": "google",
"description": "Google Analytics ID for the site",
"type": [
"string",
"null"
]
},
"facebook": {
"name": "facebook",
"description": "Facebook tracking ID for the site",
"type": [
"string",
"null"
]
},
"twitter": {
"name": "twitter",
"description": "Twitter tracking ID for the site",
"type": [
"string",
"null"
]
}
}
},
"image_filters": {
"type": "object",
"properties": {
"server": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"key": {
"type": "string",
"description": "imgflo API key"
},
"secret": {
"type": "string",
"description": "imgflo API secret"
}
},
"required": [
"server",
"key",
"secret"
]
},
"opengraph": {
"type": "object",
"properties": {
"image": {
"name": "image",
"description": "Default image to use when sharing the website",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"type": {
"type": [
"string",
"null"
],
"description": "Type of the website"
},
"appId": {
"type": [
"string",
"null"
],
"description": "Facebook App ID associated with the site"
}
}
},
"content_rating": {
"type": "object",
"properties": {
"adult": {
"name": "adult",
"description": "Whether the site contains adult content",
"type": "boolean"
}
}
},
"collections": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"id": "collection.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content collection configuration",
"description": "",
"definitions": {
"filtertag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"filternottag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"type": "object",
"properties": {
"filter": {
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
},
"notTag": {
"name": "notTag",
"type": "object",
"properties": {
"tag": {
"name": "tag",
"type": "string"
}
},
"required": [
"tag"
]
}
},
"anyOf": [
{
"required": [
"tag"
]
},
{
"required": [
"notTag"
]
}
]
},
"index": {
"type": "object"
}
}
}
},
"color": {
"type": "object",
"properties": {
"brandColors": {
"type": "array",
"default": [],
"items": {
"description": "#RGB color",
"format": "rgbhexcolor",
"pattern": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",
"example": "#aa33cc",
"type": "string"
},
"minItems": 1,
"maxItems": 5,
"description": "The user-selected brand colors for the site"
},
"brandStrength": {
"type": "number",
"default": 0,
"minimum": 0,
"maximum": 1,
"description": "How strongly to tend towards brandColors, as opposed to content colors (adaptive)"
},
"lightness": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"saturation": {
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"rhythmicContrast": {
"description": "The amount of color variation",
"type": "number",
"default": 0.5,
"minimum": 0,
"maximum": 1
}
}
},
"layout_spectrum": {
"type": "number",
"description": "Site layout spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"typography_spectrum": {
"type": "number",
"description": "Site typography spectrum",
"default": 0.5,
"minimum": 0,
"maximum": 1
},
"site_lang": {
"type": [
"string",
"null"
],
"description": "Primary site content langauge; ISO 693-1 format",
"example": "ar",
"default": "en"
},
"author": {
"type": "object",
"properties": {
"name": {
"oneOf": [
{
"type": "null"
},
{
"type": "string"
}
]
},
"email": {
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"url": {
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
}
},
"navigation": {
"type": "array",
"description": "External links to include in site navigation",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"profiles": {
"type": "array",
"description": "Social media profile links associated with the site",
"default": [],
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "navigationentry.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Navigation Entry",
"description": "Definition of a navigation entry on a website",
"type": [
"object"
],
"properties": {
"name": {
"description": "Name to show",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"rel": {
"description": "HTML link relation",
"type": "string"
}
},
"required": [
"name"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"id"
]
}
]
}
},
"auto_approve": {
"description": "Whether to publish site changes without design review",
"type": "boolean"
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the site. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"purpose": {
"description": "Site purposes",
"type": "array",
"minItems": 0,
"maxItems": 2,
"uniqueItems": true,
"items": {
"id": "sitepurpose.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site Purpose",
"description": "Definition of a purpose for a website, with potential attached action",
"type": [
"object"
],
"properties": {
"type": {
"description": "Type of the site purpose",
"example": "purchase",
"type": "string"
},
"label": {
"description": "Textual label for the site purpose",
"example": "Become a Founding Member",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
}
},
"required": [
"type",
"label"
],
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"item"
]
},
{
"required": [
"cta",
"price"
]
}
]
}
},
"content": {
"description": "Site media content blocks",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"github": {
"description": "Whether to synchronize site to GitHub",
"type": "boolean",
"default": false
}
}
},
"rating": {
"id": "redesignrating.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Redesign rating",
"description": "",
"type": "object",
"properties": {
"layoutRating": {
"type": "integer",
"description": "Layout rating",
"minimum": 1,
"maximum": 5
},
"typographyRating": {
"type": "integer",
"description": "Typography rating",
"minimum": 1,
"maximum": 5
},
"colorRating": {
"type": "integer",
"description": "Color rating",
"minimum": 1,
"maximum": 5
},
"brandColors": {
"type": "array",
"description": "New user-selected brand colors for the site",
"items": {
"description": "#RGB color",
"format": "rgbhexcolor",
"pattern": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$",
"example": "#aa33cc",
"type": "string"
},
"minItems": 1,
"maxItems": 5
},
"filterRating": {
"type": "integer",
"description": "Image filters rating",
"minimum": 1,
"maximum": 5
}
},
"additionalProperties": false
}
},
"required": [
"rating"
]
}
202
Headers
Location: /job/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
Redesign ¶
Individual redesignGET/site/{id}/redesign/{redesign}{?inflight}
Example URI
- id
string
(required)Site UUID
- redesign
string
(required)Redesign UUID
- inflight
boolean
(optional)Whether to include in-flight redesigns in the listing
200
Headers
Content-Type: application/json
Publish a redesignPOST/site/{id}/redesign/{redesign}
A site can be updated to use any of the redesigns by publishing it. This will trigger a re-solve of the website.
Example URI
- id
string
(required)Site UUID
- redesign
string
(required)Redesign UUID
202
Headers
Location: /job/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
Delete a redesignDELETE/site/{id}/redesign/{redesign}
Example URI
- id
string
(required)Site UUID
- redesign
string
(required)Redesign UUID
200
Redesign Previews ¶
Showing redesign previewGET/site/{id}/redesign/{redesign}/preview
Example URI
- id
string
(required)Site UUID
- redesign
string
(required)Redesign UUID
200
Headers
Content-Type: text/html
Collaboration ¶
Listing collaboratorsGET/site/{id}/collaborator
Site owner can list the site’s collaborators.
Example URI
- id
string
(required)Site UUID
200
Headers
Content-Type: application/json
Body
[
{
"id": 5,
"collaborator": "http://bergie.today/",
"accepted": true,
"rejected": false
}
]
Inviting a new collaboratorPOST/site/{id}/collaborator
Site owner can invite new collaborators to a site. Collaborators can be invited either by email or by URL of a Grid site.
Example URI
- id
string
(required)Site UUID
Headers
Content-Type: application/json
Body
{
"email": "[email protected]",
"name": "Test User",
"subject": "Join my cool site",
"sender": "A Grid User"
}
Schema
{
"id": "collaboratorinvite.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Site collaborator invitation",
"description": "",
"type": [
"object"
],
"properties": {
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"email": {
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
},
"name": {
"description": "Name of the person to invite",
"type": "string"
},
"subject": {
"description": "Subject of the invitation",
"type": "string"
},
"sender": {
"description": "Invitation sender name",
"type": "string"
}
},
"additionalProperties": false,
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"email",
"name"
]
}
]
}
201
Collaborator was successfully invited.
Content Management ¶
Upload signing ¶
Signing intent to uploadGET/share/sign{?objectName,contentType}
In situations where users want to share content from their local filesystem (images, Markdown files, etc), this is done by uploading them to Amazon S3. The share intent signing API provides a temporary upload URL, as well as the permanent URL where the file will reside after upload has completed.
After the file has been uploaded to S3, it can be shared to a Grid site using the normal share flow.
Example URI
- objectName
string
(required)Name of the file being uploaded
- contentType
string
(required)File MIME type
422
Missing required parameters
200
A temporary upload signature has been generated. Use the provided signedUrl
to upload via HTTP PUT
. The publicUrl
is the URL that the file will have after upload has completed.
Headers
Content-Type: application/json
Body
{
"signedUrl": "https://example.net/some/upload/target",
"publicUrl": "https://example.net/file/after/upload"
}
Items list ¶
Retrieve user's content itemsGET/item{?published,minimal,offset,limit,site,measurements,blocktype}
Example URI
- published
boolean
(required)Whether to get published or unpublished items only
- minimal
boolean
(required)Whether to receive items without measurements applied (deprecated, use measurements instead)
- offset
number
(required)Offset to use for pagination
- limit
number
(required)Limit to use for pagination
- site
string
(required)Receive only items associated with given site. Example: the-domains/mywebsite
- blocktype
string
(required)Only items containing at least one block of given type
- measurements
string
(required)Selectively get only certain measurements
200
Headers
Content-Type: application/json
Body
[
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"sites": [
"the-domains/the-grid"
],
"score": 8,
"metadata": {
"inLanguage": "en",
"dateCreated": "2014-05-08T13:22:59.000Z"
},
"starred": [
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"item": "b04d3a7f-689f-4bc5-a7c6-304b39f271f3",
"metadata": {
"starred": true
},
"type": "image",
"src": "https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png",
"html": "<img src=\"https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png\" title=\"Dan Tocchini\" alt=\"Creator of GSS (Grid Style Sheets) and Partner of D4 Interactive Agency. Producing interactive works for Audi, Microsoft and more.\">"
}
],
"created_at": "2014-05-08T13:22:59.000Z",
"updated_at": null
}
]
Create an itemPOST/item
Example URI
Headers
Content-Type: application/json
Body
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"sites": [
"the-domains/the-grid"
],
"score": 8,
"metadata": {
"inLanguage": "en",
"dateCreated": "2014-05-08T13:22:59.000Z"
},
"content": [
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"item": "b04d3a7f-689f-4bc5-a7c6-304b39f271f3",
"type": "image",
"src": "https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png",
"html": "<img src=\"https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png\" title=\"Dan Tocchini\" alt=\"Creator of GSS (Grid Style Sheets) and Partner of D4 Interactive Agency. Producing interactive works for Audi, Microsoft and more.\">"
}
],
"created_at": "2014-05-08T13:22:59.000Z",
"updated_at": null
}
Schema
{
"id": "item.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content item",
"description": "",
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"sites": {
"type": "array",
"description": "Collection of websites associated with the resource",
"items": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"uniqueItems": true,
"example": [
"the-domains/the-grid"
]
},
"score": {
"type": "number",
"default": 0,
"example": 0
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"starred": {
"description": "Starred content blocks of the item in items listing",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"content": {
"description": "Content blocks of the item",
"type": "array",
"minItems": 0,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"oneOf": [
{
"required": [
"content"
]
},
{
"required": [
"starred"
]
}
]
}
201
Headers
Location: /item/b8838e11-1d97-4799-85d8-1aafec52e927
422
Missing item information
Item ¶
Retrieve an itemGET/item/{id}{?measurements}
Example URI
- id
string
(required)Item UUID
- measurements
string
(required)Selectively get only certain measurements
200
Headers
Content-Type: application/json
Body
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"sites": [
"the-domains/the-grid"
],
"score": 8,
"metadata": {
"inLanguage": "en",
"dateCreated": "2014-05-08T13:22:59.000Z"
},
"content": [
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"item": "b04d3a7f-689f-4bc5-a7c6-304b39f271f3",
"type": "image",
"src": "https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png",
"html": "<img src=\"https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png\" title=\"Dan Tocchini\" alt=\"Creator of GSS (Grid Style Sheets) and Partner of D4 Interactive Agency. Producing interactive works for Audi, Microsoft and more.\">"
}
],
"created_at": "2014-05-08T13:22:59.000Z",
"updated_at": null
}
Schema
{
"id": "item.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content item",
"description": "",
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"sites": {
"type": "array",
"description": "Collection of websites associated with the resource",
"items": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"uniqueItems": true,
"example": [
"the-domains/the-grid"
]
},
"score": {
"type": "number",
"default": 0,
"example": 0
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"starred": {
"description": "Starred content blocks of the item in items listing",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"content": {
"description": "Content blocks of the item",
"type": "array",
"minItems": 0,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"oneOf": [
{
"required": [
"content"
]
},
{
"required": [
"starred"
]
}
]
}
404
Item not found
Update itemPUT/item/{id}{?measurements}
Example URI
- id
string
(required)Item UUID
- measurements
string
(required)Selectively get only certain measurements
Headers
Content-Type: application/json
Body
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"sites": [
"the-domains/the-grid"
],
"score": 8,
"metadata": {
"inLanguage": "en",
"dateCreated": "2014-05-08T13:22:59.000Z"
},
"content": [
{
"id": "bdcc6765-114a-4184-977d-b01d3132ef69",
"item": "b04d3a7f-689f-4bc5-a7c6-304b39f271f3",
"type": "image",
"src": "https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png",
"html": "<img src=\"https://s3-us-west-2.amazonaws.com/cdn.thegrid.io/team/Dan.png\" title=\"Dan Tocchini\" alt=\"Creator of GSS (Grid Style Sheets) and Partner of D4 Interactive Agency. Producing interactive works for Audi, Microsoft and more.\">"
}
],
"created_at": "2014-05-08T13:22:59.000Z",
"updated_at": null
}
Schema
{
"id": "item.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content item",
"description": "",
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"sites": {
"type": "array",
"description": "Collection of websites associated with the resource",
"items": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"uniqueItems": true,
"example": [
"the-domains/the-grid"
]
},
"score": {
"type": "number",
"default": 0,
"example": 0
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"starred": {
"description": "Starred content blocks of the item in items listing",
"type": "array",
"minItems": 0,
"uniqueItems": true,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"content": {
"description": "Content blocks of the item",
"type": "array",
"minItems": 0,
"items": {
"id": "contentblock.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Content block",
"description": "Any valid block of content like text, image or video",
"definitions": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
}
},
"type": [
"object"
],
"properties": {
"id": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"text",
"list",
"ul",
"ol",
"code",
"image",
"video",
"audio",
"article",
"quote",
"location",
"cta",
"interactive",
"hr",
"placeholder",
"unknown"
]
},
"src": {
"description": "Source URL",
"example": "http://techcrunch.com/2015/04/15/mozilla-restructure/",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"allOf": [
{
"required": [
"type"
]
},
{
"oneOf": [
{
"id": "audio.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Audio",
"description": "An audio source",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "audio",
"type": "string",
"enum": [
"audio"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fw.soundcloud.com%2Fplayer%2F%3Fvisual%3Dtrue%26url%3Dhttp%253A%252F%252Fapi.soundcloud.com%252Ftracks%252F153760638%26show_artwork%3Dtrue&url=http%3A%2F%2Fsoundcloud.com%2Fsupersquaremusic%2Fanywhere-everywhere-super-square-original&image=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000082002645-fhibur-t500x500.jpg%3Fe76cf77&key=internal&type=text%2Fhtml&schema=soundcloud\" width=\"500\" height=\"500\" scrolling=\"no\" frameborder=\"0\" allowfullscreen></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "article.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Article",
"description": "An article from some source which can have a cover image with measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "article",
"type": "string",
"enum": [
"article"
]
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"html": {
"description": "HTML content of the block",
"example": "<article><h1>Hello, world!</h1></article>",
"type": "string",
"minLength": 7
}
},
"required": [
"type",
"html"
]
},
{
"id": "code.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Code",
"description": "A source code snippet",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "video",
"type": "string",
"enum": [
"code"
]
},
"html": {
"description": "HTML content of the block",
"example": "<pre><code>one\ntwo</code></pre>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "var foo = 42;",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 13,
"type": "integer"
},
"programming_language": {
"description": "Detected programming language",
"example": "javascript",
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "cta.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Call to action",
"description": "An HTML representing a call to action with the verb which defines the action, a tagged price and some measurement data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"cta"
]
},
"html": {
"description": "HTML content of the block",
"example": "<a href=\"https://link.com/\" data-role=\"cta\">Call to action!</a>",
"type": "string",
"minLength": 7
},
"verb": {
"description": "A verb that defines the action",
"example": "purchase",
"type": "string"
},
"url": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cta": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"price": {
"description": "A tagged price, in USD cents",
"example": "9600",
"type": "string"
},
"label": {
"description": "Extracted text from the HTML",
"example": "Buy now",
"type": "string"
},
"length": {
"description": "Lenght of the extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "headline.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML Headline",
"description": "An HTML headline with measurement data like extracted text and its length in characters",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "h1",
"type": "string",
"enum": [
"headline",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
]
},
"html": {
"description": "HTML content of the block",
"example": "<h1>Hello, world!</h1>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "This is a headline",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 18,
"type": "integer"
}
},
"required": [
"html"
]
},
{
"id": "hr.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HR block",
"description": "Horizontal divider in content",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"hr"
]
},
"html": {
"description": "HTML content of the block",
"example": "<hr>",
"type": "string",
"minLength": 4
}
},
"required": [
"type",
"html"
]
},
{
"id": "image.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Image",
"description": "An HTML image element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"image",
"interactive"
]
},
"html": {
"description": "HTML content of the block",
"example": "<img src=\"http://blog.interfacevision.com/assets/img/posts/example_visual_language_minecraft_01.png\">",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
},
"title": {
"type": "string"
},
"caption": {
"type": "string"
}
},
"required": [
"type",
"html"
]
},
{
"id": "list.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML list",
"description": "An ordered or unordered list of elements. It can be annotated with measurements data like the number of items",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"list",
"ul",
"ol"
]
},
"html": {
"description": "HTML content of the block",
"example": "<ul><li>Hello world<ul><li>Foo</li></ul></li><li>Foo bar</li></ul>",
"type": "string",
"minLength": 7
},
"items": {
"description": "The measured number of items on the list",
"type": "integer",
"example": 3
}
},
"required": [
"type",
"html"
]
},
{
"id": "location.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Location",
"description": "A geographical location",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "location",
"type": "string",
"enum": [
"location"
]
},
"html": {
"description": "HTML content of the block",
"example": "<iframe src=\\\"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fview%3Fmaptype%3Dsatellite%26center%3D35.0349449%252C-83.9676685%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D15&url=https%3A%2F%2Fwww.google.com%2Fmaps%2F%4035.0349449%2C-83.9676685%2C585m%2Fdata%3D%213m1%211e3%3Fdg%3Ddbrw%26newdg%3D1&image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D35.0349449%2C-83.9676685%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&key=b7d04c9b404c499eba89ee7072e1c4f7&type=text%2Fhtml&schema=google\\\" width=\\\"600\\\" height=\\\"450\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"allowfullscreen\\\"></iframe>",
"type": "string",
"minLength": 7
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
},
{
"id": "quote.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Quote",
"description": "A textual quote or citation",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "quote",
"type": "string",
"enum": [
"quote"
]
},
"html": {
"description": "HTML content of the block",
"example": "<blockquote><p>block quote</p></blockquote>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "placeholder.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HTML placeholder",
"description": "Placeholder for content being shared",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "placeholder",
"type": "string",
"enum": [
"placeholder"
]
}
},
"required": [
"type"
]
},
{
"id": "text.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Text",
"description": "A chunk of text which can be annotated with measurement data like the extracted text and it's length",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "text",
"type": "string",
"enum": [
"text",
"unknown"
]
},
"html": {
"description": "HTML content of the block",
"example": "<p>Foo bar</p>",
"type": "string",
"minLength": 7
},
"text": {
"description": "Extracted text",
"example": "Foo bar",
"type": "string"
},
"length": {
"description": "Length of extracted text",
"example": 7,
"type": "integer"
}
},
"required": [
"type",
"html"
]
},
{
"id": "video.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Video",
"description": "An HTML video element which can have a cover image with annotated measurements data",
"type": [
"object"
],
"properties": {
"type": {
"description": "Block type",
"example": "image",
"type": "string",
"enum": [
"video"
]
},
"video": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"cover": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"required": [
"type",
"html"
]
}
]
}
]
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"oneOf": [
{
"required": [
"content"
]
},
{
"required": [
"starred"
]
}
]
}
200
Item was successfully updated.
Headers
Content-Type: application/json
422
Missing item information
Update item metadataPATCH/item/{id}{?measurements}
Example URI
- id
string
(required)Item UUID
- measurements
string
(required)Selectively get only certain measurements
204
Item was successfully updated
422
Missing item information
Remove itemDELETE/item/{id}{?measurements}
Example URI
- id
string
(required)Item UUID
- measurements
string
(required)Selectively get only certain measurements
200
Publishing ¶
Publish a items to a sitePOST/publish
Example URI
Headers
Content-Type: application/json
Body
{
"items": [
"4c72b88a-052d-4fcf-b6dc-1a66a25ed982"
],
"sites": [
"the-domains/example.net"
]
}
Schema
{
"id": "publish.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Publishing or unpublishing request",
"description": "",
"type": [
"object"
],
"properties": {
"items": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
}
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"sites": {
"type": "array",
"description": "Collection of websites associated with the resource",
"items": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"uniqueItems": true,
"example": [
"the-domains/the-grid"
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
}
},
"oneOf": [
{
"required": [
"items"
]
},
{
"required": [
"item"
]
}
]
}
202
Headers
Location: /job/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
Unpublishing ¶
Unpublish items from a sitePOST/unpublish
Example URI
Headers
Content-Type: application/json
Body
{
"items": [
"4c72b88a-052d-4fcf-b6dc-1a66a25ed982"
],
"sites": [
"the-domains/example.net"
]
}
Schema
{
"id": "publish.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Publishing or unpublishing request",
"description": "",
"type": [
"object"
],
"properties": {
"items": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
}
},
"item": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
},
"sites": {
"type": "array",
"description": "Collection of websites associated with the resource",
"items": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"uniqueItems": true,
"example": [
"the-domains/the-grid"
]
},
"metadata": {
"id": "metadata.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "The Grid metadata definition",
"description": "",
"type": [
"object"
],
"properties": {
"@type": {
"name": "@type",
"type": "string",
"description": "Schema.org type the item or block represents",
"example": "Article"
},
"isBasedOnUrl": {
"name": "isBasedOnUrl",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "uri"
}
],
"description": "Source URL for the item or block",
"example": "http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop"
},
"title": {
"name": "title",
"type": "string",
"description": "Textual title for the entry"
},
"description": {
"name": "description",
"type": "string",
"description": "Textual title for the entry"
},
"permalinkUrl": {
"name": "permalinkUrl",
"type": "string",
"description": "Custom permalink path for the item",
"example": "blog/my-cool-article.html"
},
"inLanguage": {
"name": "inLanguage",
"description": "Content language",
"example": "en",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"minLength": 2
}
]
},
"starred": {
"type": "boolean",
"description": "Indicates if an item should be shown on feed or not",
"example": false
},
"emphasis": {
"type": "number",
"description": "How much emphasis an item has in some context. For example, we can say if an image has low emphasis (thumbnail, icon) or high emphasis level (a.k.a. \"Please, show this image bigger\"). Helps to reproduce a client - designer feedback cycle: show the client a layout and he can say if designer should increase emphasis or decrease it. That is why emphasis can be a negative value, in a range from -1.0 to 1.0.",
"example": -1,
"minimum": -1,
"maximum": 1
},
"keywords": {
"name": "keywords",
"description": "Tags describing the content",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string"
},
"example": [
"design",
"blogs"
]
},
"publisher": {
"name": "publisher",
"description": "Original publisher of the item or block",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Fast Company"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "www.fastcompany.com",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "URL of the publisher's main page",
"example": "http://www.fastcompany.com/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "http://www.fastcompany.com/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"via": {
"name": "via",
"description": "Publisher the item was discovered via",
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"description": "Human-readable publisher name",
"example": "Bergie Today"
},
"domain": {
"name": "domain",
"description": "The publisher's domain name",
"example": "bergie.today",
"oneOf": [
{
"type": "null"
},
{
"description": "Hostname",
"format": "hostname",
"example": "blog.thegrid.io",
"type": "string"
}
]
},
"url": {
"name": "url",
"description": "Permalink URL the item was on or URL of the publisher's main page",
"example": "https://bergie.today/",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"favicon": {
"name": "favicon",
"description": "URL of the publisher's favicon",
"example": "https://bergie.today/favicon.ico",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
}
},
"additionalProperties": false
},
"author": {
"name": "author",
"type": "array",
"description": "Authors of the item or block",
"items": {
"type": "object",
"properties": {
"name": {
"name": "name",
"type": "string",
"example": "Henri Bergius"
},
"url": {
"description": "Author URL",
"example": "http://bergie.iki.fi",
"oneOf": [
{
"type": "null"
},
{
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
}
]
},
"email": {
"description": "Author email address",
"example": "[email protected]",
"oneOf": [
{
"type": "null"
},
{
"description": "Email address",
"format": "email",
"example": "[email protected]",
"type": "string"
}
]
},
"avatar": {
"description": "A cover image that has many details about the media, useful for previews",
"type": [
"object"
],
"properties": {
"src": {
"description": "ImgFlo URL for the cover image. Caching is generally done by ImgFlo and this URL redirects the consumer to the cached URL. This URL preserves all the queries requested for the ImgFlo image processing graph",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"original": {
"description": "Original URL, no matter if it's a salvaged media or not, this property stores the URL shared/uploaded to TheGrid at the first time",
"type": "string",
"example": "http://automata.cc/thumb-chuck-wiimote.png"
},
"altsrc": {
"description": "Alternative URL, if the image has a fullscale URL, the original URL will be stored here",
"type": "string",
"example": "https://farm8.staticflickr.com/7614/17055279932_6e242fddd5.jpg"
},
"imgflosrc": {
"description": "ImgFlo'ed URL",
"type": "string",
"example": "https://imgflo.herokuapp.com/graph/vahj1ThiexotieMo/6fe8db68da2dbcc38ba759348a5ba400/noop.png?input=http%3A%2F%2Fweb.archive.org%2Fweb%2F20130725203730%2Fhttp%3A%2F%2Fautomata.cc%2Fthumb-chuck-wiimote.png"
},
"resized": {
"description": "URL to image resized by Caliper and used by its preprocess and feature extract workers. In other words, that is the image Caliper really process and extract features from",
"type": "string",
"example": "http://caliper-tests.s3-us-west-2.amazonaws.com/caliper-resized/87abee46986c09f0b721f73dd309ed99.png"
},
"ratio": {
"description": "Cover image ratio",
"type": "string",
"example": "128:101"
},
"aspect": {
"description": "Calculated image ratio",
"type": "number",
"example": 1.2673267326732673
},
"orientation": {
"description": "Cover image orientation based on image ratio. If image ration equals 1:1 then its orientation is square. If image's width is larger than its height then its orientation is landscape. If image's height is larger than its width then its orientation is portrait",
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"example": "landscape"
},
"width": {
"description": "Cover image width",
"type": "integer",
"example": 1024
},
"height": {
"description": "Cover image height",
"type": "integer",
"example": 808
},
"rotation": {
"description": "Rotation performed by AI using auto-rotate based on EXIF or user preference",
"type": "integer",
"example": 90
},
"animated": {
"description": "Is GIF animated?",
"type": "boolean"
},
"unsalvageable": {
"description": "Is media unsalvageable a.k.a cannot be rescued on Archive or other mirror?",
"type": "boolean"
},
"faces": {
"description": "Extracted faces from the image",
"type": "array",
"items": {
"description": "Bounding box of a detected face",
"allOf": [
{
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
}
],
"properties": {
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
}
}
}
},
"colors": {
"description": "Extracted colors from the image, represented as an array of at least 5 RGB colors",
"type": "array",
"items": {
"type": "array",
"description": "Tuple of RGB values representing a color",
"items": [
{
"type": "number",
"description": "Red channel",
"example": 255
},
{
"type": "number",
"description": "Green channel",
"example": 200
},
{
"type": "number",
"description": "Blue channel",
"example": 190
}
]
},
"minItens": 5
},
"saliency": {
"description": "Extracted salient region from an image",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"confidence": {
"description": "How much an extracted feature should be considered as a true positive",
"type": "number",
"example": 5.08
},
"regions": {
"description": "Extracted salient regions",
"type": "array",
"items": {
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
},
"radius": {
"type": "number"
},
"polygon": {
"description": "Coordinates of a polygon shape",
"type": "array",
"items": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
}
}
},
"polygon": {
"description": "Coordinates of a 2D polygon shape (warning: to be deprecated by `polygon`)",
"type": "array",
"items": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
},
"center": {
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
"radius": {
"description": "Radius of the circle around the salient region (warning: to be deprecated by `regions` radius)",
"type": "number",
"example": 108.079
},
"bounding_rect": {
"description": "Coordinates of a 2D rectangle shape (warning: to be deprecated by `bbox`)",
"type": "array",
"items": [
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
},
{
"description": "Coordinate in a 2D plane (warning: to be deprecated by `point`)",
"type": "array",
"items": [
{
"type": "number",
"description": "Value on x-axis"
},
{
"type": "number",
"description": "Value on y-axis"
}
]
}
]
}
}
},
"histogram": {
"description": "Histogram of color levels",
"type": "object",
"properties": {
"r": {
"name": "r",
"type": "array",
"description": "Red channel histogram",
"items": {
"type": "number"
}
},
"g": {
"name": "g",
"type": "array",
"description": "Green channel histogram",
"items": {
"type": "number"
}
},
"b": {
"name": "b",
"type": "array",
"description": "Blue channel histogram",
"items": {
"type": "number"
}
},
"a": {
"name": "a",
"type": "array",
"description": "Alpha channel histogram",
"items": {
"type": "number"
}
},
"y": {
"name": "y",
"type": "array",
"description": "Y histogram (CIE Y Rec. 601)",
"items": {
"type": "number"
}
},
"h": {
"name": "h",
"type": "array",
"description": "Hue histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"s": {
"name": "s",
"type": "array",
"description": "Saturation histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"l": {
"name": "l",
"type": "array",
"description": "Lightness histogram (CIE LCH or HSL)",
"items": {
"type": "number"
}
},
"c": {
"name": "c",
"type": "array",
"description": "Chroma histogram (CIE LCH or HSL)"
}
}
},
"exif": {
"description": "EXIF metadata. A more comprehensive list of available EXIF attributes can be found at http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html",
"type": "object",
"properties": {
"exif": {
"name": "exif",
"type": "object",
"properties": {
"image": {
"name": "image",
"type": "object",
"description": "Image information data (IFD0)",
"example": {
"Make": "FUJIFILM",
"Model": "FinePix40i",
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"Software": "Digital Camera FinePix40i Ver1.39",
"ModifyDate": "2000:08:04 18:22:57",
"YCbCrPositioning": 2,
"ExifOffset": 250
}
},
"thumbnail": {
"name": "thumbnail",
"type": "object",
"description": "Information regarding a possibly embedded thumbnail (IFD1)",
"example": {
"Compression": 6,
"Orientation": 1,
"XResolution": 72,
"YResolution": 72,
"ResolutionUnit": 2,
"ThumbnailOffset": 1074,
"ThumbnailLength": 8691,
"YCbCrPositioning": 2
}
},
"exif": {
"name": "exif",
"type": "object",
"description": "Exif-specific attribute information (Exif IFD)",
"example": {
"FNumber": 2.8,
"ExposureProgram": 2,
"ISO": 200,
"DateTimeOriginal": "2000:08:04 18:22:57",
"CreateDate": "2000:08:04 18:22:57",
"CompressedBitsPerPixel": 1.5,
"ShutterSpeedValue": 5.5,
"ApertureValue": 3,
"BrightnessValue": 0.26,
"ExposureCompensation": 0,
"MaxApertureValue": 3,
"MeteringMode": 5,
"Flash": 1,
"FocalLength": 8.7,
"ColorSpace": 1,
"ExifImageWidth": 2400,
"ExifImageHeight": 1800,
"InteropOffset": 926,
"FocalPlaneXResolution": 2381,
"FocalPlaneYResolution": 2381,
"FocalPlaneResolutionUnit": 3,
"SensingMethod": 2
}
},
"gps": {
"name": "gps",
"type": "object",
"description": "GPS information (GPS IFD)"
},
"interoperability": {
"name": "interoperability",
"type": "object",
"description": "Interoperability information (Interoperability IFD)",
"example": {
"InteropIndex": "R98"
}
},
"makernote": {
"name": "makernote",
"type": "object",
"description": "Vendor specific Exif information (Makernotes)",
"example": {
"Quality": "NORMAL",
"Sharpness": 3,
"WhiteBalance": 0,
"FujiFlashMode": 1,
"FlashExposureComp": 0,
"Macro": 0,
"FocusMode": 0,
"SlowSync": 0,
"AutoBracketing": 0,
"BlurWarning": 0,
"FocusWarning": 0,
"ExposureWarning": 0
}
}
}
}
}
},
"anyOf": {
"id": "helpermeasurements.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "HelperMeasurements",
"description": "Measurements calculated by TheGrid's data-helper",
"definitions": {
"scene": {
"description": "Defines the most important region of an image. It is calculated based on other information like salient or text regions, faces and image dimensions.",
"type": "object",
"properties": {
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"lines": {
"description": "This measurement/feature/heuristics takes inspiration from the Rule of Thirds, a well known \"rule of thumb\" in visual composing. Lines are bounding boxes that represent negative spaces as columns or rows around cover's scene. We can overlay content (e.g. text) in space columns or rows around the scene. We also associate a direction to a line, defining the direction we should place content ('horizontal' or 'vertical'). We calculate lines for each image that has scene",
"type": "object",
"properties": {
"lines": {
"name": "lines",
"type": "object",
"properties": {
"direction": {
"description": "Direction we should place content",
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"stripes": {
"description": "Rows or columns representing 3, 2 or 1-stripes around the scene and the scene itself",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"name": "type",
"description": "A negative space or the scene",
"type": "string",
"enum": [
"space",
"scene"
]
},
"bbox": {
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Cartesian coordinate along x-axis",
"example": 608.1907
},
"y": {
"name": "y",
"type": "number",
"description": "Cartesian coordinate along y-axis",
"example": 189.909
},
"width": {
"name": "width",
"type": "number",
"description": "Width",
"example": 229.2087
},
"height": {
"name": "height",
"type": "number",
"description": "Height",
"example": 229.2087
}
}
},
"center": {
"description": "Cartesian coordinate",
"type": "object",
"properties": {
"x": {
"name": "x",
"type": "number",
"description": "Value on x-axis",
"example": 4.2
},
"y": {
"name": "y",
"type": "number",
"description": "Value on y-axis",
"example": 2.4
}
}
}
}
},
"minItens": 1,
"maxItens": 3
}
}
}
}
},
"lightness": {
"description": "For blocks that have Lightness histogram we provide a lightness level as a [0-1] float number. Greater the value, more light is the whole image",
"type": "number",
"example": 0.8
},
"saturation": {
"description": "For blocks that have Saturation histogram we provide a saturation level as a [0-1] float number. Greater the value, more saturated is the whole image",
"type": "number",
"example": 0.2
},
"closest_aspect": {
"description": "For blocks that have dimensions, we try to find the closest aspect ratio, considering well known \"good\" aspects like 2:1, 1:2, 2:3 and so on",
"type": "number",
"example": 1
},
"transparent": {
"description": "For blocks that have Alpha histogram we provide a transparecy level as a [0-1] float number. Greater the value, more transparent is the whole image. Another way to put it is: if `transparent` is greater than zero, it has at least one transparent pixel",
"type": "number",
"example": 1
}
}
}
}
}
},
"additionalProperties": false
}
},
"coverPrefs": {
"name": "coverPrefs",
"description": "Image processing to allow on the cover. All default true.",
"type": "object",
"properties": {
"filter": {
"name": "filter",
"type": "boolean",
"description": "Allow image filtering",
"example": true
},
"crop": {
"name": "crop",
"type": "boolean",
"description": "Allow image cropping",
"example": true
},
"overlay": {
"name": "overlay",
"type": "boolean",
"description": "Allow image overlaying",
"example": true
}
}
},
"geo": {
"type": "object",
"description": "Geographical data",
"properties": {
"latitude": {
"name": "latitude",
"type": "number",
"description": "Latitude coordinate",
"example": 45.5
},
"longitude": {
"name": "longitude",
"type": "number",
"description": "Longitude coordinate",
"example": -122.7
},
"zoom": {
"name": "zoom",
"type": "number",
"description": "Zoom level of map",
"example": 4
}
}
},
"address": {
"name": "address",
"type": "string",
"description": "Location address",
"example": "4242 Blue Street, San Francisco, CA"
},
"hasMap": {
"description": "Unique Resource Locator",
"format": "uri",
"example": "http://thegrid.io",
"type": "string"
},
"dateCreated": {
"description": "When the entity was created",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"dateModified": {
"description": "When the entity was last modified",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublished": {
"description": "When the entity was last published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
},
"datePublishedOriginal": {
"description": "When the entity was originally published",
"oneOf": [
{
"type": "null"
},
{
"type": "string",
"format": "date-time"
}
]
}
},
"additionalProperties": true
}
},
"oneOf": [
{
"required": [
"items"
]
},
{
"required": [
"item"
]
}
]
}
202
Headers
Location: /job/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
Copying ¶
Copy an itemPOST/copy/{id}
Example URI
- id
string
(required)Item UUID
Schema
{
"id": "copymove.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Copy or move request",
"description": "",
"type": [
"object"
],
"properties": {
"site": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"publish": {
"description": "Whether to publish immediately",
"type": "boolean"
}
}
}
200
Item was successfully copied. New item location can be found from the location header.
Headers
Location: /item/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
422
Missing item information
Moving ¶
Move an item to another sitePOST/move/{id}
Example URI
- id
string
(required)Item UUID
Schema
{
"id": "copymove.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Copy or move request",
"description": "",
"type": [
"object"
],
"properties": {
"site": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"publish": {
"description": "Whether to publish immediately",
"type": "boolean"
}
}
}
200
Item was successfully moved.
Headers
Location: /item/61a23f6a-d438-49c3-a0b9-7cd5bb0fe177
422
Missing item information
Reordering items ¶
Reorder an items listPOST/reorder/item
Example URI
Body
{
"items": [
"bdcc6765-114a-4184-977d-b01d3132ef69",
"b04d3a7f-689f-4bc5-a7c6-304b39f271f3"
],
"site": "the-domains/example.net",
"published": true
}
Schema
{
"id": "reorderitems.json",
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Item reordering request",
"description": "",
"type": [
"object"
],
"properties": {
"items": {
"description": "Items to reorder, in order desired",
"type": "array",
"minItems": 2,
"uniqueItems": true,
"items": {
"description": "Unique identifier",
"format": "uuid",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"example": "01234567-89ab-cdef-0123-456789abcdef",
"type": "string"
}
},
"site": {
"type": "string",
"example": "the-domains/the-grid",
"pattern": "^[a-z0-9-_\\.]+/[a-z0-9-_\\.]+$"
},
"published": {
"description": "Filter reordered items by published status",
"type": "boolean"
},
"publish": {
"description": "Publish items after reordering",
"type": "boolean"
}
},
"required": [
"items"
],
"dependencies": {
"publish": [
"site",
"published"
]
}
}
200
Items were successfully reordered.
Body
[
"bdcc6765-114a-4184-977d-b01d3132ef69",
"b04d3a7f-689f-4bc5-a7c6-304b39f271f3"
]
422
Missing item information