1.0.1 • Public • Published


    Simplified generation of OmniCourse descriptors

    Main screen

    Ulysses is a web application - packaged as a standalone command - dedicated to the simplified generation of OmniCourse descriptors.

    More precisely, the user can input lines using a compact format - one line per work - and the app will try to fetch the missing information from the supported official websites: in other words, Ulysses can be thought of as a sophisticated descendant of the OmniCourse-Agent browser plugin.

    Ulysses becomes essential as one completes more and more courses and books while keeping track of them with OmniCourse.


    To install Ulysses:

    npm install --global @giancosta86/ulysses

    Then, to start the app:

    ulysses [<port>]


    • port is optional and defaults to 2000

    To stop the app, press CTRL+C in the terminal.

    Input format

    Ulysses takes its input data from a minimalist log of didactic entries - usually online courses: each non-empty line must adhere to a specific format and will be converted to an OmniCourse descriptor; empty lines and spaces between line components are ignored, as well as lines starting with //.

    This is the expected line format:

    <completion date>: ["<title between double quotes>"] [<url not between double quotes>] #<learning time>


    • completion date is mandatory and can be written as:

      • <day>/<month>, assuming the year is the current one

      • <day>/<month>/<year>, which is the most complete format

    • title is optional but, if present, must be enclosed in double quotes

    • url is optional but recommended: if the URL belongs to a supported didactic provider, it is used to fetch missing information such as the title and the learning time. It must not be enclosed in quotes

    • learning time is optional but, if declared, must be prefixed by a # symbol. Its overall format is:


      where hours and minutes are mandatory, arbitrary numbers (even 0), separated by the letter h

    Overall, the line format is quite flexible... what matters is that - with or without the aid of the URL - the line enables Ulysses to gather enough information to create an OmniCourse descriptor - that is, the title and the learning time in minutes, with the additional constraint of the completion date.


    To see Ulysses in action, you could input the following text, then click Run:

    // Ulysses supports a variety of didactic portals: in this case, the title and the learning time of each course are automatically fetched from its page
    29/4: https://www.ted.com/talks/chris_anderson_ted_s_secret_to_great_public_speaking
    13/5: https://www.udemy.com/course/webpack-5-fundamentals
    18/5: https://www.pluralsight.com/courses/cryptography-big-picture
    23/6: https://www.packtpub.com/product/introduction-to-unity-video/9781789807653
    // If a work does not belong to a supported didactic portal, both its title and the learning time are mandatory elements; the URL, in this case, becomes optional
    24/8: "Introduction to Redux with TypeScript" https://speakerdeck.com/giancosta86/introduction-to-redux-with-typescript #3h30
    // Works not having a URL are supported as well
    17/9: "Philosophy - A very ancient book" #20h0
    // There are also hybrid cases: for example, the URL of a book published onto a didactic portal enables the app to fetch its title, but the learning time remains a mandatory element
    21/10: https://www.packtpub.com/product/c-9-and-net-5-modern-cross-platform-development-fifth-edition/9781800568105 #11h30

    Third-party images


    npm i @giancosta86/ulysses

    DownloadsWeekly Downloads






    Unpacked Size

    914 kB

    Total Files


    Last publish


    • giancosta86