Kompakkt / Kompakkt/Viewer

Feature: IIIF Support for Kompakkt 3D Viewer

Open
#64 1 comment 0 reactions 1 assignee View on GitHub

@jacky-lai is already working on this.

Since Nov 25, 2025.

enhancement work in progress
Dominant language
TypeScript
Stars
17
Forks
4
PR merge metrics
No merged PRs in 30d

Description

Description

We need to extend the 3D viewer of Kompakkt to support the International Image Interoperability Framework (IIIF). The goal is to enable import, display and export of IIIF-compliant 3D objects and provide a compatible data structure and API.

The scope includes:

  1. Replace the existing parts of the viewer logic that reflects IIIF Presentation API 4.0 model
  2. Implement background color from manifest.
  3. Implement parsing and application of IIIF transforms (translation, rotation, position).
  4. Implement import for loading IIIF manifests (via URL, file or JSON text).
  5. Implement coordinate system conversion (IIIF right-handed → Babylon.js left-handed on import / vice versa on export, also see [/Kompakkt/Viewer/pull/65])
  6. Implement cameras and lights as defined in IIIF manifests.
  7. Implement export of the current Kompakkt scene as JSON
  8. Performing tests using sample IIIF resources
  9. Creating technical documentation for the implementation

Functionalities

1. Basic Model in Scene

Manifest:
https://raw.githubusercontent.com/IIIF/3d/main/manifests/1_basic_model_in_scene/model_origin.json

Functionality:

  • Import a basic IIIF 3D scene with at least one model.
  • Correctly position the model at its defined origin.

2. Background Color

Manifest:
https://raw.githubusercontent.com/IIIF/3d/main/manifests/1_basic_model_in_scene/model_origin_bgcolor.json

Functionality:

  • Parse background color from the manifest.
  • Apply the background color in the Babylon.js scene.

3. Transforms (Rotation, Translation, Position)

Manifest:
https://raw.githubusercontent.com/IIIF/3d/main/manifests/4_transform_and_position/model_transform_rotate_translate_position.json

Functionality:

  • Parse transforms defined in IIIF:
    • rotation
    • translation
    • position
  • Apply transforms to the loaded models.
  • Ensure coordinate system conversion (right-handed → left-handed) occurs on import.

4. Perspective Camera

Manifest:
https://raw.githubusercontent.com/IIIF/3d/main/manifests/2_cameras/perspective_camera.json

Functionality:

  • Parse and construct a perspective camera from the manifest.
  • Support camera properties such as:
    • field of view
    • position
    • orientation / lookAt

5. Directional Light (LookAt + Positioned)

Manifest:
https://raw.githubusercontent.com/IIIF/3d/main/manifests/3_lights/direction_light_lookat_positioned.json

Functionality:

  • Parse directional light definitions.
  • Implement lights with:
    • position
    • direction
    • lookAt target
    • intensity

6. Scene Export as JSON (Kompakkt → IIIF-Compatible)

Functionality:

  • Export the current Kompakkt scene as JSON (IIIF-compatible structure).
  • Include models, transforms, background color, camera(s) and light(s) where applicable.

Acceptance Criteria

  • The viewer can load and display IIIF 3D manifests (as listed above).
  • The viewer architecture is updated to support IIIF-native scenes (models, lights, cameras, transforms, background).
  • Transforms from IIIF manifests are correctly interpreted and applied with proper coordinate conversion.
  • Background color is applied from the manifest.
  • Camera and light configurations behave as defined in the manifests.
  • The current Kompakkt scene can be exported as JSON
  • Documentation is updated accordingly.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.