1.0.3 • Published 3 months ago

iiif-manifest-editor v1.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
3 months ago

Digirati IIIF Manifest Editor

  • An extensible visual tool for creating IIIF Manifests and more
  • Compatible with IIIF Presentation API 2 and 3
  • Preview your work as you go in your viewer of choice
  • Create IIIF Manifests to drive custom narratives and other viewing experiences
  • Integrate the Manifest Editor into your own tools and workflows

screenshot of Manifest Editor

Up the project localy

  • pnpm build
  • pnpm dev

Background

In 2017 we started working on IIIF Manifest-driven narratives for the V&A, and in 2018 for Delft University of Technology Library. These were based on the first iteration of our Canvas Panel component.

In 2018 we developed an experimental IIIF Workbench for assembling complex canvases in a visual environment (like PowerPoint).

These combined to make a IIIF Manifest Editor that in normal, default mode produces IIIF Presentation 3 Manifests, but can be extended with plugins to produce IIIF Manifests with particular structures and custom behavior properties, to drive custom viewing experiences - slideshows, guided viewing and the complex digital exhibition layouts seen in the Delft examples. Development of branches of the Manifest Editor for different clients went hand in hand with new viewers and static site generators.

The new version

The new Manifest Editor builds on our experiences building content creation tools and custom viewing experiences. Our aim is for the new editor to be more sustainable, which in this context also means cheaper for ourselves and others to customise and adapt. This means a separation of viewing/previewing from content creation for most scenarios. We have ended up with multiple versions of the Manifest Editor, with different IIIF capabilities, user interfaces, and persistence mechanisms. Some versions integrate with our DLCS platform, allowing drag-and-drop creation of IIIF Image Services in real time.

We don't want to needlessly throw away the capabilities we have, but we want to maintain one editor going forward, that is simple and reliable to use, with excellent user experience. The needs of different adopters and users should be met by configuration, and choice of plugins, rather than different versions of the core editor.

Audience

  • People who want to learn IIIF
  • IIIF novices using a visual, PowerPoint-like tool for creating Manifests intended for viewing in Universal Viewer, Mirador and other standard IIIF environments
  • Museum staff assembling manifests intended for custom storytelling or digital exhibition environments
  • People who need tools to enhance existing (perhaps machine-generated) IIIF with additional information and structure
  • Researchers and students assembling their own IIIF by remixing existing sources
  • (and many more in the issues and discussions)

Features

  • Create new Manifest
  • Add Canvases
  • Add single resources (media) to a Canvas
  • Add multiple resources - create image choices, collages and more
  • Browse IIIF (via IIIF Collections) to import Canvases
  • Load any compliant version 2 or version 3 Manifest
  • Edit all properties of Manifests and other IIIF resources
  • Allow developers to make use of the Manifest Editor's application services to quickly develop extensions

Join the discussion

We're using GitHub discussions to explore ideas, and the Wiki to think about implementation.

Acknowledgements

The development of the IIIF Manifest Editor has been supported by:

JSONStreamabbrevadd-streamagent-baseaggregate-erroransi-colorsansi-escapesansi-regexansi-stylesany-promiseanymatchaprobaargargparsearray-differarray-ifyarray-unionarrifyasyncasynckitaxiosbalanced-matchbase64-jsbefore-after-hookbin-linksbinary-extensionsblbrace-expansionbracesbufferbuffer-frombyte-sizecacachecallsitescamelcasecamelcase-csscamelcase-keyschalkchalk-templatechardetchokidarchownrci-infoclean-stackcli-cursorcli-spinnerscli-widthcliuicloneclone-deepcmd-shimcolor-convertcolor-namecolor-supportcolumnifycombined-streamcommandercommon-ancestor-pathcompare-funcconcat-mapconcat-streamconsole-control-stringsconventional-changelog-angularconventional-changelog-coreconventional-changelog-preset-loaderconventional-changelog-writerconventional-commits-filterconventional-commits-parserconventional-recommended-bumpcopy-anythingcore-util-iscosmiconfigcross-spawncssescdargsdateformatdebugdecamelizedecamelize-keysdedentdefaultsdefine-lazy-propdelayed-streamdeprecationdetect-indentdidyoumeandiff-sequencesdir-globdlvdot-propdotenvdotenv-expandduplexereastasianwidtheffectejsemoji-regexencodingend-of-streamenquirerenv-pathsenvinfoerr-codeerrnoerror-exescaladeescape-string-regexpeslinteslint-config-prettiereslint-config-turboeslint-import-resolver-aliaseslint-import-resolver-nodeeslint-import-resolver-typescripteslint-module-utilseslint-plugin-eslint-commentseslint-plugin-importeslint-plugin-jesteslint-plugin-jsx-a11yeslint-plugin-only-warneslint-plugin-playwrighteslint-plugin-reacteslint-plugin-react-hookseslint-plugin-testing-libraryeslint-plugin-tsdoceslint-plugin-turboeslint-plugin-unicorneslint-plugin-vitesteslint-scopeeslint-visitor-keysesprimaeventemitter3execaexponential-backoffexternal-editorfast-checkfast-globfastqfiguresfilelistfill-rangefind-upflatfollow-redirectsforeground-childform-datafront-matterfs-constantsfs-extrafs-minipassfs.realpathfunction-bindget-caller-fileget-east-asian-widthget-pkg-repoget-portget-streamgit-raw-commitsgit-remote-origin-urlgit-semver-tagsgit-upgit-url-parsegitconfiglocalglobglob-parentglobbygraceful-fshandlebarshard-rejectionhas-flaghas-unicodehasownhosted-git-infohttp-cache-semanticshttp-proxy-agenthttps-proxy-agenthuman-signalsiconv-liteicss-utilsieee754ignoreignore-walkimage-sizeimmutableimport-freshimport-localimurmurhashindent-stringinflightinheritsiniinit-package-jsoninquirerip-addressis-arrayishis-binary-pathis-ciis-core-moduleis-dockeris-extglobis-fullwidth-code-pointis-globis-interactiveis-lambdais-numberis-objis-plain-objis-plain-objectis-sshis-streamis-text-pathis-unicode-supportedis-whatis-wslisarrayisexeisobjectjackspeakjakejest-diffjest-get-typejitijs-tokensjs-yamljsbnjson-parse-better-errorsjson-parse-even-better-errorsjson-stringify-nicejson-stringify-safejson5jsonc-parserjsonfilejsonparsejust-diffjust-diff-applykind-ofkleurlesslibnpmaccesslibnpmpublishlilconfiglines-and-columnsload-json-filelocate-pathlodashlodash.camelcaselodash.ismatchlog-symbolslru-cachemake-dirmake-fetch-happenmap-objmeowmerge-streammerge2micromatchmimemime-dbmime-typesmimic-fnmin-indentminimatchminimistminimist-optionsminipassminipass-collectminipass-fetchminipass-flushminipass-pipelineminipass-sizedminizlibmkdirpmodify-valuesmrimsmultimatchmute-streammznanoidneedlenegotiatorneo-asyncnode-fetchnode-gypnode-machine-idnoptnormalize-package-datanormalize-pathnpm-bundlednpm-install-checksnpm-normalize-package-binnpm-package-argnpm-packlistnpm-pick-manifestnpm-registry-fetchnpm-run-pathnxobject-assignobject-hashonceonetimeopenoraos-tmpdirp-finallyp-limitp-locatep-mapp-map-seriesp-pipep-queuep-reducep-timeoutp-tryp-waterfallpackage-json-from-distpacoteparent-moduleparse-conflict-jsonparse-jsonparse-node-versionparse-pathparse-urlpath-existspath-is-absolutepath-keypath-parsepath-scurrypath-typepicocolorspicomatchpifypiratespkg-dirpostcsspostcss-importpostcss-jspostcss-load-configpostcss-modules-extract-importspostcss-modules-local-by-defaultpostcss-modules-scopepostcss-nestedpostcss-selector-parserpostcss-value-parserprettier-plugin-packagejsonpretty-formatproc-logprocess-nextick-argsproggypromise-all-reject-latepromise-call-limitpromise-inflightpromise-retrypromptspromzardprotocolsproxy-from-envprrpure-randqueue-microtaskquick-lrureact-isreadread-cacheread-cmd-shimread-package-json-fastread-pkgread-pkg-upread-yaml-filereadable-streamreaddirpredentrequire-directoryreserved-wordsresolveresolve-cwdresolve-fromrestore-cursorretryreusifyrimrafrun-asyncrun-parallelrxjssadesafe-buffersafer-buffersasssaxsemverset-blockingshallow-cloneshebang-commandshebang-regexsignal-exitsigstoresisteransislashsmart-buffersockssocks-proxy-agentsort-keyssource-mapsource-map-jsspdx-correctspdx-exceptionsspdx-expression-parsespdx-license-idssplitsplit2sprintf-jsssristdin-discarderstring-widthstring-width-cjsstring_decoderstrip-ansistrip-ansi-cjsstrip-bomstrip-final-newlinestrip-indentstrong-log-transformerstylussucrasesupports-colorsupports-preserve-symlinks-flagtartar-streamtemp-dirtext-extensionsthenifythenify-allthroughthrough2tightropetmpto-regex-rangetr46treeversetrim-newlinests-interface-checkerts-toolbelttsconfig-pathstuf-jsturbo-linux-64type-festtypedarrayuglify-jsunicorn-magicunique-filenameunique-sluguniversal-user-agentuniversalifyupathutil-deprecateuuidvalidate-npm-package-licensevalidate-npm-package-namewalk-up-pathwcwidthwebidl-conversionswhatwg-urlwhichwide-alignwordwrapwrap-ansiwrap-ansi-cjswrappywrite-file-atomicwrite-json-filewrite-pkgxtendy18nyallistyamlyargsyargs-parser
1.0.3

3 months ago

1.0.2

3 months ago

1.0.1

3 months ago

1.0.0

3 months ago