Skip to content

Components and Media

Understanding Components in CoCore

Components in CoCore represent the physical parts that make up a print job. Unlike JDF where components might be nested within product intents, CoCore components are directly attached to jobs and represent the actual printed pieces that will be produced.

Component Hierarchy

Job
├── Component (Physical print specifications)
│   ├── ComponentMedia (Substrate properties)
│   ├── ComponentLayout (Imposition and dimensions)
│   ├── ComponentColorInfo (Color specifications)
│   └── ComponentFileUsage (Links to File resources)
└── JobProduct (Intermediate manufacturing products)
    - Printed sheets
    - Folded signatures
    - Gathered book blocks

Component Types

Component Kinds

graphql
enum PrintComponentKindEnum {
  CONTENT   # Main body/interior pages
  COVER     # Cover pages (front/back)
  INSERT    # Loose inserts or supplements
  MAIN      # The primary component when there's only one
  JACKET    # Dust jacket for hardcover books
  ENVELOPE  # Mailing envelope
  LABEL     # Labels or stickers
}

Creating Components

Basic Component Creation

graphql
mutation CreateBasicComponent {
  createComponent(input: {
    jobId: "job-123"
    kind: CONTENT
    name: "Brochure Interior"
    description: "8-page interior on silk stock"
  }) {
    result {
      id
      kind
      name
      job {
        id
        jobNumber
      }
    }
    errors {
      field
      message
    }
  }
}

Component with Media Specifications

graphql
mutation CreateComponentWithMedia {
  createComponent(input: {
    jobId: "job-456"
    kind: COVER
    name: "Premium Cover"
    description: "4-page cover with spot UV"

    # Media specifications
    media: {
      name: "Chorus Art Silk Cover"
      externalId: "STOCK-CAS-350"  # Your inventory code

      # Media type and delivery
      type: PAPER
      kind: SHEET  # or ROLL
      unit: SHEET

      # Dimensions
      width: { value: 450, unit: MILLIMETER }
      height: { value: 320, unit: MILLIMETER }
      thickness: { value: 0.35, unit: MILLIMETER }

      # Weight
      weight: { value: 350, unit: GSM }

      # Stock properties
      stockType: COATED
      stockBrand: "Chorus"
      grade: 1  # Premium grade (1-5 scale)

      # Surface properties
      texture: SILK
      opacity: OPAQUE
      opacityLevel: 95.0  # Percentage

      # Grain direction - critical for folding
      grainDirection: LONG_GRAIN  # or SHORT_GRAIN

      # Printing constraints
      imageableSide: BOTH  # FRONT, BACK, or BOTH
      printingTechnology: OFFSET  # DIGITAL, INKJET, SCREEN, etc.

      # Coating on each side
      front: {
        coating: SILK
        glossValue: 35
        brightness: 92
        isoPaperSubstrate: PS1  # ISO 12647-2 substrate categories
      }
      back: {
        coating: SILK
        glossValue: 35
        brightness: 92
        isoPaperSubstrate: PS1
      }

      # Environmental properties
      recycledPercentage: 30.0

      # Availability status
      status: AVAILABLE  # or ON_ORDER, DISCONTINUED
    }
  }) {
    result {
      id
      media {
        name
        type
        weight { value, unit }
        stockType
        grainDirection
      }
    }
  }
}

Component with Layout Specifications

graphql
mutation CreateComponentWithLayout {
  createComponent(input: {
    jobId: "job-789"
    kind: CONTENT
    name: "Book Interior"
    description: "240-page perfect bound book block"

    # Layout specifications
    layout: {
      # Page count
      pages: 240

      # Printing sides
      sides: TWO_SIDED_HEAD_TO_HEAD
      # Options: ONE_SIDED, ONE_SIDED_BACK,
      # TWO_SIDED_HEAD_TO_HEAD, TWO_SIDED_HEAD_TO_FOOT,
      # TWO_SIDED_FOOT_TO_HEAD, TWO_SIDED_FOOT_TO_FOOT

      # Orientation
      orientation: PORTRAIT  # or LANDSCAPE

      # Finished (closed) dimensions after trimming
      closedDimensions: {
        width: { value: 6, unit: INCH }
        height: { value: 9, unit: INCH }
      }

      # Open/spread dimensions
      openDimensions: {
        width: { value: 12, unit: INCH }
        height: { value: 9, unit: INCH }
      }

      # Bleed specifications (beyond trim)
      bleed: {
        top: { value: 0.125, unit: INCH }
        bottom: { value: 0.125, unit: INCH }
        left: { value: 0.125, unit: INCH }
        right: { value: 0.125, unit: INCH }
      }

      # Number up (imposition grid)
      numberUps: {
        rows: 2
        columns: 2
      }

      # Folding schemes
      preferredFoldingScheme: "F16-4"  # 16-page signature, 4 folds
      possibleFoldingSchemes: ["F16-4", "F8-3", "F4-2"]

      # Spread type
      spreadType: READER  # or PRINTER
    }
  }) {
    result {
      id
      layout {
        pages
        sides
        closedDimensions {
          width { value, unit }
          height { value, unit }
        }
        numberUps {
          rows
          columns
        }
      }
    }
  }
}

Component with Color Specifications

graphql
mutation CreateComponentWithColors {
  createComponent(input: {
    jobId: "job-123"
    kind: COVER
    name: "Premium Brochure Cover"

    # Color specifications
    colors: {
      front: {
        # Coatings applied (can be multiple)
        coatings: [SPOT_UV, SOFT_TOUCH]

        # Print standard
        printStandard: FOGRA39  # or GRACOL, SWOP, etc.

        # Colors in print order (first = closest to substrate)
        colors: ["CYAN", "MAGENTA", "YELLOW", "BLACK", "PANTONE_286_C"]
      }
      back: {
        coatings: [MATTE_VARNISH]
        printStandard: FOGRA39
        colors: ["BLACK"]
      }
    }
  }) {
    result {
      id
      colors {
        front {
          colors
          coatings
          printStandard
        }
        back {
          colors
          coatings
        }
      }
    }
  }
}

Media Specifications

Media Enums

graphql
enum MediaTypeEnum {
  BLANKER
  CORRUGATED_BOARD
  DISC
  EMBOSSING_FOIL
  END_BOARD
  FILM
  FOIL
  GRAVURE_CYLINDER
  IMAGE_SETTER_FILM
  LAMINATING_FOIL
  MAGNETIC_TAPE
  MOUNTING_TAPE
  OTHER
  PAPER
  PLATE
  PROOF
  RIBBON
  SCREEN
  SELF_ADHESIVE_PAPER
  SHRINK_FOIL
  SLEEVE
  STEEL_BAND
  STITCHING_WIRE
  STRAPPING
  TRANSPARENCY
  VINYL
}

enum MediaStockTypeEnum {
  BOND           # Bond paper
  BOOK           # Book paper
  BRISTOL        # Bristol board
  CARBONLESS     # NCR paper
  CAST_COATED    # Cast coated stock
  COATED         # Standard coated
  COVER          # Cover stock
  ENVELOPE       # Envelope stock
  GLOSS          # High gloss
  INDEX          # Index stock
  KRAFT          # Kraft paper
  LABEL          # Label stock
  LAID           # Laid finish
  LEDGER         # Ledger paper
  LINEN          # Linen finish
  MATTE          # Matte finish
  NEWSPRINT      # Newspaper stock
  OFFSET         # Offset paper
  OPAQUE         # Opaque stock
  PARCHMENT      # Parchment
  RECYCLED       # Recycled paper
  SILK           # Silk/satin finish
  SYNTHETIC      # Synthetic material
  TAG            # Tag stock
  TEXT           # Text weight
  TRANSLUCENT    # Translucent
  UNCOATED       # Uncoated paper
  VELLUM         # Vellum finish
  WOVE           # Wove finish
}

enum MediaGrainDirectionEnum {
  LONG_GRAIN     # Grain parallel to long dimension
  SHORT_GRAIN    # Grain parallel to short dimension
  NO_GRAIN       # No grain direction (synthetic)
}

enum MediaImageableSideEnum {
  FRONT          # Only front side printable
  BACK           # Only back side printable
  BOTH           # Both sides printable
  NEITHER        # Not printable (e.g., separator sheets)
}

File Management

Creating Files and Linking to Components

First, create a File resource:

graphql
mutation CreateFile {
  createFile(input: {
    filename: "annual_report_cover.pdf"
    externalId: "FILE-2024-001"
    path: "/storage/jobs/job-123/annual_report_cover.pdf"
    mimeType: "application/pdf"
    sizeBytes: 25165824
    metadata: {
      colorSpace: "CMYK"
      resolution: 300
      pages: 4
      trimBox: "0 0 612 792"
      bleedBox: "-9 -9 621 801"
    }
    status: READY  # UPLOADING, PROCESSING, READY, ERROR
    kind: ARTWORK  # TEMPLATE, VARIABLE_DATA, PROOF, etc.
  }) {
    result {
      id
      filename
      status
    }
  }
}

Then link the file to a component:

graphql
mutation LinkFileToComponent {
  createComponentFileUsage(input: {
    componentId: "component-456"
    fileId: "file-789"

    # How this file is used
    role: PRINT_READY  # CONTENT, PROOF, IMPOSITION_PROOF, etc.

    # Page selection
    pageRange: "1-4"  # or "1,3,5-8" for specific pages

    # Processing notes
    processingInstructions: "Apply spot UV to areas marked in separation"
    remarks: "Customer approved version 3"
  }) {
    result {
      id
      component {
        name
      }
      file {
        filename
        sizeBytes
      }
      role
      pageRange
    }
  }
}

Querying Components

Get Component with Full Details

graphql
query GetComponentDetails {
  getComponent(id: "component-789") {
    id
    kind
    name
    description

    # Parent job
    job {
      id
      jobNumber
      name
      status
    }

    # Media specifications
    media {
      name
      externalId
      type
      kind
      unit
      width { value, unit }
      height { value, unit }
      weight { value, unit }
      thickness { value, unit }
      stockType
      stockBrand
      grade
      grainDirection
      imageableSide
      opacity
      opacityLevel
      texture
      printingTechnology
      recycledPercentage
      status
      front {
        coating
        glossValue
        brightness
        isoPaperSubstrate
      }
      back {
        coating
        glossValue
        brightness
        isoPaperSubstrate
      }
    }

    # Layout specifications
    layout {
      pages
      sides
      orientation
      closedDimensions {
        width { value, unit }
        height { value, unit }
      }
      openDimensions {
        width { value, unit }
        height { value, unit }
      }
      bleed {
        top { value, unit }
        bottom { value, unit }
        left { value, unit }
        right { value, unit }
      }
      numberUps {
        rows
        columns
      }
      spreadType
      preferredFoldingScheme
      possibleFoldingSchemes
    }

    # Color specifications
    colors {
      front {
        colors
        coatings
        printStandard
      }
      back {
        colors
        coatings
        printStandard
      }
    }

    # File usage
    componentFileUsages {
      id
      role
      pageRange
      remarks
      processingInstructions
      file {
        id
        filename
        mimeType
        sizeBytes
        status
        path
      }
    }

    # Related operations
    operations {
      id
      name
      state
      sequence
    }

    # Milestones
    milestones {
      id
      name
      status
      completedAt
    }

    # Notes
    notes {
      id
      content
      createdAt
      author {
        name
      }
    }
  }
}

List Components with Filters

graphql
query FilterComponents {
  listComponents(
    filter: {
      # By job
      jobId: { eq: "job-123" }

      # By type
      kind: { in: [COVER, JACKET] }

      # By name
      name: { ilike: "%cover%" }
    }
    sort: [
      { field: CREATED_AT, order: DESC }
    ]
    first: 20
  ) {
    count
    results {
      id
      kind
      name
      job {
        jobNumber
        name
      }
      media {
        name
        stockType
        weight { value, unit }
      }
      layout {
        pages
        sides
      }
    }
    endKeyset
  }
}

JobProducts - Manufacturing Intermediates

JobProducts represent physical items created during manufacturing that flow between operations.

Creating JobProducts

graphql
# After printing operation
mutation CreatePrintedSheets {
  createJobProduct(input: {
    jobId: "job-123"
    componentId: "component-456"  # Links to source component
    name: "Printed Cover Sheets - Press Run 1"
    metadata: {
      quantity: 550
      goodSheets: 500
      wasteSheets: 50
      pressId: "press-001"
      operatorId: "operator-123"
      timestamp: "2024-02-15T10:30:00Z"
    }
  }) {
    result {
      id
      name
      component {
        kind
        name
      }
    }
  }
}

# After folding operation
mutation CreateFoldedSignatures {
  createJobProduct(input: {
    jobId: "job-123"
    componentId: "component-789"
    name: "16-page Folded Signatures"
    metadata: {
      quantity: 125
      signatureScheme: "F16-4"
      folderId: "folder-001"
    }
  }) {
    result {
      id
      name
    }
  }
}

Common Media Specifications

Business Card Stock

graphql
media: {
  name: "16pt Coated Card Stock"
  type: PAPER
  kind: SHEET
  weight: { value: 350, unit: GSM }
  thickness: { value: 0.4, unit: MILLIMETER }
  stockType: COATED
  texture: SMOOTH
  opacity: OPAQUE
  grainDirection: LONG_GRAIN
}

Book Text Paper

graphql
media: {
  name: "60# Opaque Book"
  type: PAPER
  kind: ROLL  # For web press
  weight: { value: 90, unit: GSM }
  stockType: UNCOATED
  opacity: OPAQUE
  opacityLevel: 94.0
  grainDirection: LONG_GRAIN  # Parallel to spine
  printingTechnology: OFFSET
}

Envelope Stock

graphql
media: {
  name: "#10 White Wove Envelope"
  type: PAPER
  kind: SHEET
  weight: { value: 90, unit: GSM }
  stockType: WOVE
  imageableSide: FRONT  # Inside not printed
  texture: SMOOTH
}

Imposition Patterns

Standard Folding Schemes

  • F4-2: 4-page, 2 folds (simple fold)
  • F8-3: 8-page, 3 folds (letter fold)
  • F16-4: 16-page, 4 folds (standard book signature)
  • F32-5: 32-page, 5 folds (large signature)

Number-Up Configurations

graphql
# 2-up Business Cards (common for digital)
numberUps: {
  rows: 2
  columns: 1
}

# 8-up for efficiency
numberUps: {
  rows: 4
  columns: 2
}

# 16-up for large runs
numberUps: {
  rows: 4
  columns: 4
}

Best Practices

1. Always Specify Grain Direction

Critical for folding and binding:

graphql
grainDirection: LONG_GRAIN  # Parallel to fold/spine

2. Include External IDs

Link to inventory and MIS systems:

graphql
externalId: "STOCK-INV-12345"

3. Accurate Bleed Specifications

Different for different binding methods:

  • Perfect binding: 3mm minimum
  • Saddle stitch: 3-5mm standard
  • Case binding: 15-20mm wrap

4. File Role Clarity

Use appropriate roles for files:

  • PRINT_READY: Final production files
  • CONTENT: Source content
  • PROOF: Customer approval versions
  • IMPOSITION_PROOF: Layout verification

5. Complete Color Information

Specify print standards and color order:

graphql
colors: {
  front: {
    printStandard: FOGRA39
    colors: ["CYAN", "MAGENTA", "YELLOW", "BLACK", "PANTONE_286_C"]
  }
}

Connect. Combine. Collaborate.
The pioneering open integration platform, dedicated to transforming connectivity in the printing industry.