OrthancToolsJS : A new frontend for Orthanc

Dear Orthanc community,

We are pleased to announce our new project to build a new modern, web-based front end for Orthanc, called OrthancToolsJS.

OrthancToolsJS is the successor of Orthanc Tools, the previous JAVA front end, it will implement almost all it’s features in a much user friendly interface and additional features.
More than just of front end, this project add an authentication layer and automation of several task in Orthanc.

Today we are releasing a testing version to get community feedback and ideas.

So far we have implemented :

Import of DICOM
Listing Orthanc Content
Anonymization with batch management
Auto Retrieve : Retrieve of DICOM by batch from a PACS

Export with batch management
Delete with batch managemnt
OHIF viewer for vizualization
AET / Peer declaration
Identification Layer with roles and dedicated permissions

We still have in our roadmap :

  • DiscProducer robot management (Epson and Primera)
  • Pre fetching
  • DICOM metadata extraction in database (tag monitoring)
    at maybe more (autorouting …)

The full code is AGPL v3 licenced

The git is : https://github.com/salimkanoun/Orthanc-Tools-JS

A demo server is set here :

http://212.47.232.65/
login and password : admin

Pay Attention :

  • Do not upload non anonymized DICOM if I find remaining identifying DICOMs on the testing server I will simply close it and the community will not have anymore a testing environement.

  • The demo server is really weak, make only few testing, again I will close it if I see intensive usage of the server.

  • For now it is just an alfa release, the software probably suffers of significant bugs, however we wanted to share our work with the community. We expect (hope) to get a stable version in september.

We welcome contributions in the projet, bug report (please use GIT issue tracker), idea for future improvement.
If you need a specific feature we also welcome financial support to help developpement of OrthancToolsJS

Last, I would thank our two students who worked with me for saveral months on this project, Sylvain Berthier and Leo Courderc, and also Sebastien Jodogne and Osimis Team for their kind continuous support on my projects

Best regards,

Salim Kanoun
Nuclear Medicine Physician,
Toulouse, France

Interesting. Are you using React and Bootstrap ?

Have not looked at it that carefully yet, but the OHIF viewer links are not working for me.

e.g.

`

http://212.47.232.65/viewer/1.3.12.2.1107.5.8.15.130763.30000018071309430887000001215

Successfully compiled asm.js code (total compilation time 87ms) index.umd.js

Cornerstone Tools index.umd.js:49260:11

Some cookies are misusing the recommended “sameSite“ attribute 3

Successfully compiled asm.js code (total compilation time 142ms) index.umd.js

Successfully compiled asm.js code (total compilation time 85ms) index.umd.js

Cornerstone Tools index.umd.js:2:1502288

Successfully compiled asm.js code (total compilation time 148ms) index.umd.js

Successfully compiled asm.js code (total compilation time 85ms) index.umd.js

Cornerstone Tools index.umd.js:2:4368009

Successfully compiled asm.js code (total compilation time 151ms) index.umd.js

Successfully compiled asm.js code (total compilation time 95ms) index.umd.js

Cornerstone Tools index.umd.js:2:599500

Successfully compiled asm.js code (total compilation time 147ms) index.umd.js

Successfully compiled asm.js code (total compilation time 83ms) index.umd.js

The provided colorLUT only provides 0 labels, whereas segmentsPerLabelmap is set to 65535. Autogenerating the rest. index.umd.js:26480:12

New ‘CornerstoneTools@4’ source added. index.umd.js:209420:30

New measurement mapping added to source ‘CornerstoneTools@4’. index.umd.js:209476:30

Extension ID cornerstone has already been registered. Exiting before duplicating modules. index.umd.js:208141:65

OHIF Viewer rendered/updated 1.3.12.2.1107.5.8.15.130763.30000018071309430887000001215:40:19

retrieveTimepoints index.umd.js:114776:34

Timepoint data retrieval index.umd.js:117046:34

search series of study 1.3.12.2.1107.5.8.15.130763.30000018071309430887000001215 index.umd.js:76893:17

XHRGEThttp://212.47.232.65/api/dicom-web/studies/1.3.12.2.1107.5.8.15.130763.30000018071309430887000001215/series[HTTP/1.1 401 Unauthorized 212ms]

Source map error: Error: request failed with status 404
Resource URL: https://unpkg.com/@ohif/viewer/dist/index.umd.js
Source Map URL: index.js.map
request failed: XMLHttpRequest { onreadystatechange: onreadystatechange()

, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: “http://212.47.232.65/api/dicom-web/studies/1.3.12.2.1107.5.8.15.130763.30000018071309430887000001215/series”, status: 401, statusText: “Unauthorized”, responseType: “json”, response: null } index.umd.js:76439:23

Error: request failed
com ohif/viewer/dist/index.umd.js:76440
index.umd.js:76444:23

null index.umd.js:76445:23

Error: request failed
com ohif/viewer/dist/index.umd.js:76440
index.umd.js:120650:35

Error: request failed
com ohif/viewer/dist/index.umd.js:76440
index.umd.js:108297:44

`

Not sure why that is, but some of the .js files are really large. I get the OHIF initial black window, but nothing after that.

  1. Kind of curious about how you query for resources. I have a similar tool written in PHP. It seems that there are some limitations on doing queries using tools/find with Orthanc as opposed to using something like a MySQL database since I dont think you can “ORDER BY” or use something like LIMIT x,y. I did something similar to what it looks like you did by allowing the user to select the maximum number of results to return for a query (which the REST API allows), and you can process the returned results to sort them or filter them further somehow. Seems like you can’t use an “OR” with tools/find, but issue multiple queries in that case.

  2. Regarding modification and anonymization. I’ve looked at that a little, and it looks like when you anonymize (and maybe modify) and existing study using the REST API that it creates a copy of the original study and leaves the original there. That might actually be desired since it is often unwise to delete something in the medical environment. Just wondering how you handle that ? I do have an uploader that can anonymize on-the-fly using dcmtk before the study is sent to Orthanc. That using a web interface similar to yours where you can drag and drop a folder to upload. I found a client side script that can actually detect DCM files using the header from the file and not just the file extension, which is a little useful to filter out .exe files and others on the client side if you don’t want those.

  3. Regarding the viewer, do you have that running behind a proxy or otherwise have some sort of authentication / access controls set up for that ? For example, could I just go directly to a viewer line and bypass even logging into the app, or do you use SESSION’s for authentication with OHIF and the Tools app running on the same server. That is still problematic because there are really 3 apps, the Orthanc Tools, the OHIF viewer and Orthanc, although I guess that is mostly DICOM web issue.

Kind of like it though.

Thanks.

/sds

Hi stephen,

Yes we are using React and Bootstrap. The frontend is in React and the backend is in NodeJS, the backend deal with orthanc which should not be exposed to the public (but only to our backend).
Yes it act as a reverse proxy for many resquests comming for the front, for some fuction we add some specific features like authentication or automatition to make sequential (batch processing) request to Orthanc.

The OHIF viewer is broken because these last day we change the authentication mechanisme by replacing sessions to Json Web Token, so I have to pass the token to OHIF to be able to retrieve dicom ressources through our backend. Will fix this.

1.For the ressources query I fully use the tools/find API nothing more.
2. I’m just using the Anonymize and Modify API of Orthanc since DICOM are changed they need to be new dicoms with new UID, that’s already done in Orthanc.
3. everything goes through the NodeJS reverse proxy, Orthanc should be closed to all other access except the reverse proxy (in production I will use a DockerCompose the Orthanc server will be referecend only in the orthanc compose cluster and not mounted to the host machine). So Yes there is an authentication mechanisme that are using an internal database and/or a LDAP/AD registery (wip), there is an authentication API that deliver a crytped JsonWebToken (with an expiracy date) that must be resent by the frontend for all futher call in the backend, if you don’t have a valid token all HTTP call will be rejected (no mater if you calling data from Orthanc itself, DicomWeb or our custom API). This way the NodeJS backend act as a single backend, and basically the frontend don’t even know that the data are orignally comming from Orthanc, it just see our NodeJS server.

Best regards,

Salim

Thanks for the reply. I download the .zip from GitHub. I can’t run Docker on my iMac becaue it is too old, so I’m running on an UBUNTU VM using docker-compose up.

I get a pretty extensive log in the terminal after executing that:

`
Attaching to orthanctoolsjspacs, orthanctoolsjs, orthanctoolsjsmaster_watchtower_1, orthanc
orthanctoolsjs |
orthanctoolsjs | > @salim.kanoun/orthanctools@0.0.3 prestart /OrthancToolsJs
orthanctoolsjs | > cross-env NODE_ENV=production npm run migrate
orthanctoolsjs |
orthanctoolsjspacs | Startup command: Orthanc /tmp/orthanc.json
orthanctoolsjspacs | W0710 13:56:26.134423 main.cpp:1614] Orthanc version: 1.6.1
orthanctoolsjspacs | W0710 13:56:26.134792 OrthancConfiguration.cpp:61] Reading the configuration from: “/tmp/orthanc.json”
watchtower_1 | time=“2020-07-10T13:56:29Z” level=info msg=“Starting Watchtower and scheduling first run: 2020-07-10 14:01:29 +0000 UTC m=+300.865451521”
orthanctoolsjs |
orthanctoolsjs | > @salim.kanoun/orthanctools@0.0.3 migrate /OrthancToolsJs
orthanctoolsjspacs | W0710 13:56:26.159125 FromDcmtkBridge.cpp:302] Loading external DICOM dictionary: “/usr/share/libdcmtk14/dicom.dic”
orthanctoolsjs | > sequelize db:migrate
orthanctoolsjs |
orthanctoolsjspacs | W0710 13:56:26.171499 FromDcmtkBridge.cpp:302] Loading external DICOM dictionary: “/usr/share/libdcmtk14/private.dic”
orthanctoolsjspacs | W0710 13:56:26.189191 main.cpp:792] Loading plugin(s) from: /usr/share/orthanc/plugins/
orthanctoolsjs |
orthanctoolsjspacs | W0710 13:56:26.189606 OrthancInitialization.cpp:301] SQLite index directory: “/var/lib/orthanc/db”
orthanctoolsjspacs | W0710 13:56:26.190099 OrthancInitialization.cpp:376] Storage directory: “/var/lib/orthanc/db”
orthanctoolsjs | Sequelize CLI [Node: 12.16.2, CLI: 5.5.1, ORM: 5.22.3]
orthanctoolsjs |
orthanctoolsjspacs | W0710 13:56:26.209630 HttpClient.cpp:1066] HTTPS will use the CA certificates from this file: /etc/ssl/certs/ca-certificates.crt
orthanctoolsjs | Loaded configuration file “database/config/config.json”.
orthanctoolsjs | Using environment “production”.
orthanctoolsjspacs | W0710 13:56:26.210365 LuaContext.cpp:104] Lua says: Lua toolbox installed
orthanctoolsjspacs | W0710 13:56:26.210720 LuaContext.cpp:104] Lua says: Lua toolbox installed
orthanctoolsjspacs | W0710 13:56:26.210857 ServerContext.cpp:327] Disk compression is disabled
orthanctoolsjspacs | W0710 13:56:26.210890 ServerIndex.cpp:1636] No limit on the number of stored patients
orthanctoolsjspacs | W0710 13:56:26.210921 ServerIndex.cpp:1653] No limit on the size of the storage area
orthanctoolsjspacs | W0710 13:56:26.211327 JobsEngine.cpp:283] The jobs engine has started with 2 threads
orthanctoolsjs | == 20200201140939-create-option: migrating =======
orthanctoolsjspacs | W0710 13:56:26.211941 main.cpp:1098] DICOM server listening with AET ORTHANC on port: 4242
orthanctoolsjs | == 20200201140939-create-option: migrated (0.074s)
orthanctoolsjs |
orthanctoolsjs | == 20200617094153-create-Role: migrating =======
orthanctoolsjspacs | W0710 13:56:26.212001 HttpServer.cpp:1309] HTTP compression is enabled
orthanctoolsjspacs | W0710 13:56:26.212037 main.cpp:1001] Remote LUA script execution is disabled
orthanctoolsjs | == 20200617094153-create-Role: migrated (0.040s)
orthanctoolsjs |
orthanctoolsjspacs | W0710 13:56:26.216173 HttpServer.cpp:1216] HTTP server listening on port: 8042 (HTTPS encryption is disabled, remote access is allowed)
orthanctoolsjspacs | W0710 13:56:26.216250 main.cpp:804] Orthanc has started
orthanctoolsjs | == 20200617094233-create-user: migrating =======
orthanctoolsjs | == 20200617094233-create-user: migrated (0.048s)
orthanctoolsjs |
orthanctoolsjs | == 20200617094307-addUniqueUser: migrating =======
orthanctoolsjs | == 20200617094307-addUniqueUser: migrated (0.124s)
orthanctoolsjs |
orthanctoolsjs | == 20200617094436-addDefaultRoles: migrating =======
orthanctoolsjs | == 20200617094436-addDefaultRoles: migrated (0.040s)
orthanctoolsjs |
orthanctoolsjs | == 20200617095049-addDefaultUser: migrating =======
orthanctoolsjs | == 20200617095049-addDefaultUser: migrated (0.197s)
orthanctoolsjs |
orthanctoolsjs |
orthanctoolsjs | > @salim.kanoun/orthanctools@0.0.3 start /OrthancToolsJs
orthanctoolsjs | > cross-env NODE_ENV=production node OrthancToolsJS.js
orthanctoolsjs |
orthanc | Startup command: Orthanc /tmp/orthanc.json
orthanc | W0710 13:56:29.393573 main.cpp:1614] Orthanc version: 1.6.1
orthanc | W0710 13:56:29.393843 OrthancConfiguration.cpp:61] Reading the configuration from: “/tmp/orthanc.json”
orthanc | W0710 13:56:29.420984 FromDcmtkBridge.cpp:302] Loading external DICOM dictionary: “/usr/share/libdcmtk14/dicom.dic”
orthanc | W0710 13:56:29.434330 FromDcmtkBridge.cpp:302] Loading external DICOM dictionary: “/usr/share/libdcmtk14/private.dic”
orthanc | W0710 13:56:29.454186 main.cpp:792] Loading plugin(s) from: /usr/share/orthanc/plugins/
orthanc | W0710 13:56:29.454966 PluginsManager.cpp:269] Registering plugin ‘worklists’ (version 1.6.1)
orthanc | W0710 13:56:29.455024 PluginsManager.cpp:168] Sample worklist plugin is initializing
orthanc | W0710 13:56:29.455148 PluginsManager.cpp:168] The database of worklists will be read from folder: /var/lib/orthanc/worklists
orthanc | W0710 13:56:29.469030 PluginsManager.cpp:269] Registering plugin ‘dicom-web’ (version 1.1)
orthanc | W0710 13:56:29.469260 PluginsManager.cpp:168] URI to the DICOMweb REST API: /dicom-web/
orthanc | W0710 13:56:29.469716 PluginsManager.cpp:168] URI to the WADO-URI API: /wado
orthanc | W0710 13:56:29.486040 PluginsManager.cpp:269] Registering plugin ‘osimis-web-viewer’ (version 1.3.1.0-ea114768)
orthanc | W0710 13:56:29.486141 PluginsManager.cpp:168] Initializing the Web viewer
orthanc | W0710 13:56:29.486573 PluginsManager.cpp:168] Using GDCM instead of the DICOM decoder that is built in Orthanc
orthanc | W0710 13:56:29.487447 PluginsManager.cpp:269] Registering plugin ‘transfers’ (version 1.0)
orthanc | W0710 13:56:29.490436 PluginsManager.cpp:269] Registering plugin ‘python’ (version 1.0)
orthanc | W0710 13:56:29.490593 PluginsManager.cpp:168] Python plugin is initializing
orthanc | W0710 13:56:29.490730 PluginsManager.cpp:168] The option “PythonScript” is not provided: Python scripting is disabled
orthanc | W0710 13:56:29.490826 OrthancInitialization.cpp:301] SQLite index directory: “/var/lib/orthanc/db”
orthanc | W0710 13:56:29.491337 OrthancInitialization.cpp:376] Storage directory: “/var/lib/orthanc/db”
orthanc | W0710 13:56:29.510774 HttpClient.cpp:1066] HTTPS will use the CA certificates from this file: /etc/ssl/certs/ca-certificates.crt
orthanc | W0710 13:56:29.511493 LuaContext.cpp:104] Lua says: Lua toolbox installed
orthanc | W0710 13:56:29.511802 LuaContext.cpp:104] Lua says: Lua toolbox installed
orthanc | W0710 13:56:29.511993 ServerContext.cpp:327] Disk compression is disabled
orthanc | W0710 13:56:29.512034 ServerIndex.cpp:1636] No limit on the number of stored patients
orthanc | W0710 13:56:29.512057 ServerIndex.cpp:1653] No limit on the size of the storage area
orthanc | W0710 13:56:29.512468 JobsEngine.cpp:283] The jobs engine has started with 2 threads
orthanc | W0710 13:56:29.513027 main.cpp:1098] DICOM server listening with AET ORTHANC on port: 4242
orthanc | W0710 13:56:29.513082 HttpServer.cpp:1309] HTTP compression is enabled
orthanc | W0710 13:56:29.513113 main.cpp:1001] Remote LUA script execution is disabled
orthanc | W0710 13:56:29.517158 HttpServer.cpp:1216] HTTP server listening on port: 8042 (HTTPS encryption is disabled, remote access is allowed)
orthanc | W0710 13:56:29.517229 main.cpp:804] Orthanc has started
orthanctoolsjs | Warning: connect.session() MemoryStore is not
orthanctoolsjs | designed for a production environment, as it will leak
orthanctoolsjs | memory, and will not scale past a single process.
orthanctoolsjs | Listening on port: 4000

`

and then I can connect to explorer using http://localhost:8042. However, I do not see how to connect to the orthanctoolsJS ?

There is nothing on port 4000 as far as I can tell.

Is there a way to runthe orthanctoolsJS with that configuration ?

The envrionment in the .yml is

environment:
OrthancAddress: “http://orthanc
OrthancPort: “8042”
OrthancUsername: “salim”
OrthancPassword: “salim”

Thanks.

Sorry I didn’t updated to release package for a while

download this fresh one : https://github.com/salimkanoun/Orthanc-Tools-JS/releases/tag/0.3.2
Uzip it in a directory you have a write permission
Install NodeJS in your computer
Then at the root of the unziped folder :
npm install
npm start

In this version the browser should be automatically opened, the 4000 port should respond

Best regards,

Salim

Thanks. I tried that on my iMac. It almost runs, but I get an error when trying to start. I’m not that familiar with Node.js. Is there something else to configured to fthat, or is it some sort of syntax error problem ?

?? const {robot} = require(‘…/model/robot/Robot’)
?? const { getRobotDetails, getAllRobotDetails, addRobotJob, validateRobotJob, deleteRobotJob, removeQueryFromJob, addAnonJob, getAnonJob, getDeleteJob, addDeleteJob } = require(‘…/controllers/Robot2’)

SyntaxError: Unexpected token =
at new Script (vm.js:79:7)
at createScript (vm.js:251:10)
at Object.runInThisContext (vm.js:303:10)
at Module._compile (internal/modules/cjs/loader.js:657:28)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (/Users/sscotti/Desktop/OrthancToolsJS_0.3.2/controllers/Robot2.js:1:79)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (/Users/sscotti/Desktop/OrthancToolsJS_0.3.2/routes/index.js:7:168)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @salim.kanoun/orthanctools@0.0.3 start: cross-env NODE_ENV=production node OrthancToolsJS.js
npm ERR! Exit status 1

??

Dear Stephen,

These error do not mention my code except the “require” function to import js file in another file which is more than common.
Could you check your nodeJS version ? We need a recent version of nodeJS (v12).
The nodejs ecosystem is still a bit immature, there are compatibilty issue across version (event recents ones).

also could you try with the new version : https://github.com/salimkanoun/Orthanc-Tools-JS/releases/tag/0.3.3
I revert back http2 to http1 again http2 support for node js seems immature as well.

I didn’t tried with mac but it works on Linux and Windows so I expect to be working as well in mac.

Salim

Thanks. I had to reconfigure and update my system a bit, but got it working now using the 3.2 version. I think it is because I had an old version of Node. Thanks a lot. I have it running locally on my Mac, so I can play around with it a little. I use mostly PHP, MySQL, CSS, HTML,JS and jQuery, Bootstrap & and a PHP framework, but I’d like to learn Vue.js, Angular or React, as well as Node. Not sure which one to look at. Vue.js is apparently easier to learn, and I really don’t know much about Node, but I have pretty decent Javascript skills and experience with MVC frameworks.

Now running Node: v14.5.0, nvm 0.32.x

Dear All,

We released the pre-release version 0.4.1 of Orthanc Tools JS.

From the inital post we notably add :

Active Directory connexion support for user identification
CD/DVD Burner with Primera/Epson (beta)
A lot of improvement and debugs (auto retrieve, user roles, export, anon …)

Salim

Hi Salim, is a windows installer? if not, i hope you can develope one.
Thanks!

No,
In the Release of GitHub you will have the distribution, you will juste need to install NodeJS in windows, unzip the distribution and type 2 command in the terminal : “npm install” and “npm start”

I don’t have any plan to make a windows installer (I have docker container by the way), but anyone who will want to produce such installer is more than welcome,

Salim

Hi Salim,

Just copied and pasted the previous private conversion via email before and want to discuss publicly here

I asked
Hi Salim, is it possible that your app is able to manage several orthanc’s’ ?

And your response
Hi it depend what you calling multiples orthanc server.

I Can make a storage of known orthanc server ans being to Switch the frontend to one orthanc to another one. That is possible.

But if your thinking about managind multiple orthanc in the same Time, for exemple to make a dicom quuery make it in multiple orthanc server, no it will be nightmare

My initial intention is just to manage the Orthanc Configuration, such as, Orthanc.json , plugins and scripting (lua and python). So manually editing, restarting individually Orthanc service in a pool of Orthans is not convenient for teams like devops. If they can have GUI that makes it visually, it would be great. The purpose of dicom query it is not much of my concern. But even in case of querying dicom in a pool Orthanc, I have no idea that it is a nightmare ? I imagine that the GUI will be have a list of Orthanc, user clicks on a particular Orthanc and starts doing query. Is that possible ?

Thanks,
Chris

Vào lúc 19:00:21 UTC+7 ngày Thứ Năm, 24 tháng 9, 2020, salim....@gmail.com đã viết:

A GUI to edit Orthanc.Json is doable, I don’t exclude to make one but not now.
However it wont be able to reparameter dynamically your orthanc servers, most parameter need edition of the orthanc.json file in server and orthanc reboot (the latest can be done by API).
So unless orthanc would become flully parametrable through API (and so settings stored in database) you will need to copy the file in the server and so it is impossible to manage N orthanc settings only from a web GUI.

For quering multiple orthanc no it’s too messy, specially the AET query, each Orthanc having N aet you will have N Orthanc each one knowing N AET it will be a nightmare to manage.

Salim

I’m newbie, was using your orthanc tool old version and its a life saver. I want to try this version too but how do Install/configure do you have simple step by step guide? thank you.

Hi,

The documentation is in “Work In progress”

However you have at least the installation documentation in the current version :

https://github.com/salimkanoun/Orthanc-Tools-JS/blob/master/Documentation/Orthanc_Tools_JS_Documentation.docx

Best regards,

Salim

Thank you very much.

Dear All,

Here an updated documentation of Orthanc Tools JS

https://github.com/salimkanoun/Orthanc-Tools-JS/blob/master/Documentation/Orthanc-Tools-JS-Documentation.pdf

Best regards,

Salim

Dear All,

Just wanted to give some update on Orthanc Tools JS project,

I recieve regularly emails of begginers trying to install OrthancToolsJS, and it’s likely to become more difficult to install OrthancToolsJS in the future, so i’m afraid that it will become difficult for begginers to use it, I explain why.

A the origin OrthancToolsJS was designed to be a simple software build on the top of Orthanc to automatize various time consuming DICOMs tasks, more or less what the original JAVA version orthancTools did.
Then we had more and more request from our french working group and this applications included a lot of new services, especially the authentication layer that is using a database and eventually a Active directory connection.

As we wanted this app able to scale (manage huge list of task) we had to include a task manager that itself is using a redis backend for queue management.

After many hesitations, I dedicided to switch paradigm of OrthancToolsJS, and continue to work in the benefit of scalability at the price of portability.

So from a Orthanc “Addon”, OrthancToolsJS will shift to an Orthanc “distribution”, that will require Orthanc but also a relational database (mysql or postgres) and a redis backend (and who knows maybe other third party apps in the future)

For linux users all of this will be simple to install through docker compose which will be the official way to go.
For Windows users things are more complicated, it is still possible as there is a windows community version of Redis but not an official version. So, i’m relying on the bet that in some months windows will have a full docker support to get this cross plateform deployement mode (Windows 10 seems to bring a much better docker support so there’s hope).

If one of you want to maintain a portable version of OrthancToolsJS it’s better to fork now.
Also the second way to go is to grab only OrthancToolsJS frontend to connect it directly to Orthanc without intermediate backend. Except for routes brought by OrthancToolsJS automation, all http request from the frontend are following the same API than Orthanc server (in these cases my backend only act as a pure reverse proxy with an authentication JWT middelware), it will need to adapt the authentication system (or remove it) and remove our automations interface components.

So the next version of OrthancToolsJS will be a new full version, with a new deployment process, will try to maintain the documentation update to give you insight or how to deploy it.

Best regards,

Salim

Dear all,

We are preparing the next major release of OrthancToolsJS (will be 0.6.0).

I closed the initial testing server for a new one :
https://0e44be91-4285-440b-a132-c6580851eed7.pub.instances.scw.cloud/
login / password : admin / admin

The server is now showing the pre-version of 0.6.0, for which we are making the bug hunting,

Best regards,

Salim

Wow, this looks great! Thanks for your hard work :slight_smile: :slight_smile:

Sébastien-