{"id":14109608,"url":"https://github.com/yoe/SReview","last_synced_at":"2025-08-01T09:31:04.575Z","repository":{"id":44028403,"uuid":"60708899","full_name":"yoe/SReview","owner":"yoe","description":"sreview review system","archived":false,"fork":false,"pushed_at":"2024-07-11T15:03:11.000Z","size":7397,"stargazers_count":56,"open_issues_count":15,"forks_count":5,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-08-14T10:15:21.893Z","etag":null,"topics":["grid-engine","perl","review","schedule","video","webinterface"],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yoe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-08T15:33:13.000Z","updated_at":"2024-07-11T15:03:15.000Z","dependencies_parsed_at":"2023-02-19T00:01:37.125Z","dependency_job_id":"89a25420-b957-41bd-8fee-f7f1825c4d04","html_url":"https://github.com/yoe/SReview","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoe%2FSReview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoe%2FSReview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoe%2FSReview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoe%2FSReview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yoe","download_url":"https://codeload.github.com/yoe/SReview/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228360128,"owners_count":17907860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grid-engine","perl","review","schedule","video","webinterface"],"created_at":"2024-08-14T10:02:24.369Z","updated_at":"2025-08-01T09:31:04.536Z","avatar_url":"https://github.com/yoe.png","language":"Perl","readme":"# SReview\n\nThis is SReview, a video review system. It takes input files, stores\ntheir lengths in a database, combines those lengths and their starttime\nwith a schedule it has of an event to see which talks are fully\nrecorded, and creates a preview. After that, magic happens, and\neventually a fully transcoded quality video rolls out of the system.\n\nNote that while SReview has been used [in\nproduction](https://yoe.github.io/SReview/production), there is still\nsome missing functionality in some areas. Patches welcome! :-)\n\n## States\n\nSReview is fairly minimalistic; it tries to assume as little as possible\nabout video workflow. There are, however, state machines that you should be\naware of. First, there is the main state:\n\n    waiting_for_files\n    cutting\n    generating_previews\n    notification\n    preview\n    transcoding\n    uploading\n    done\n    broken\n    needs_work\n    lost\n    ignored\n\nNext, there is the job state:\n\n    waiting\n    scheduled\n    running\n    done\n    failed\n\nEvery talk is in one of the main states as well as in one of the job. The\nfollowing list explains what each of the main states means:\n\n- `waiting_for_files`: no files (or not all of them) have been found as of yet.\n  Talks should initially be in this state.\n- `cutting`: the `cut_talk` script\n- `generating_previews`: the `previews` script\n- `notification`: a notification needs to be sent to the user responsible for\n  reviewing the talk. This may be the speaker, or someone else.\n- `preview`: the notification was sent. This talk is now ready for\n  review by a human being (the webinterface is necessary for this step).\n- `transcoding`: the `transcode` script is running, or scheduled to\n  start.\n- `uploading`: the files are being uploaded.\n- `done`: the talk has been fully completed, all files should be\n  published.\n- `broken`: SReview will not automatically switch a talk to this state,\n  but it can be used to mark talks that are lost forever and should not\n  be considered anymore.\n- `needs_work`: Refinement of `broken`. Can be used by an administrator\n  to mark recordings that need larger amounts of work, but that may be\n  fixed eventually.\n- `lost`: Refinement of `broken`. Can be used by an administrator to\n  confirm that a recording is broken and cannot be usefully released.\n- `ignored`: Can be used by an administrator to mark recordings for\n  talks that never happened, or that appeared on the schedule but don't\n  include interesting content, or that appeared on the schedule but for\n  which speakers requested that no recordings would be made available.\n\nThe job states, then, mean:\n\n- `waiting`: it's waiting for the dispatch script to do something.\n- `scheduled`: the script was picked up by the dispatch script, and has\n  been put into the job scheduler's queue. If a slot is available, it\n  will be started almost immediately; if not, it may need to wait until\n  that's done.\n- `running`: the script is now active and running.\n- `done`: the script finished successfully\n- `failed`: the script did *not* finish successfully (note: when that\n  hapens, it doesn't always go into this state, currently).\n\n## Components\n\nSReview consists of two major components: a webinterface (written in\nPerl with Mojolicious), and a backend which consists of another set of\nperl scripts.\n\nTo run the webinterface in a test environment, run:\n\n    export SREVIEW_WDIR=$(pwd)\n    sreview-config --action=update\n\nand review the `config.pm` file that this creates. Edit it, either by\nway of an editor, or by using\n\n    sreview-config --set=key=value --action=update\n\nthen run `sreview-web daemon`, and browse to the URL given. To run the\nwebinterface in production, see\n[Mojo::Server::Hypnotoad](http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad)\n(or some of the other guides over there), or use the Debian packages\nprovided (which should make `sreview-web` start at system boot time).\n\nTo run the backend, it is recommended that you install gridengine first.\nIn theory, the backend *should* work without gridengine, but that is not\ntested. Additionally, you will then need to run a dispatcher per CPU,\nrather than having just one dispatcher in the whole network (which is\nannoying).\n\nOnce gridengine has been installed, run `sreview-dispatch`.\n\nIf you have any issues with SReview, please file an issue (or better\nyet, a pull request) on the github issue tracker.\n\n# Development\n\nTo run SReview from git without installing, do the following:\n\n- Install Perl, PostgreSQL, ffmpeg, inkscape, and bs1770gain\n- Run `cpanm --quiet --installdeps --notest .` to install the Perl\n  dependencies. Alternatively, install the packaged versions of the perl\n  dependencies for your distribution.\n- Add a PostgreSQL database and user:\n\n        createuser -P sreview\n        createdb -O sreview sreview\n\n- Create an SReview config file:\n\n        SREVIEW_WDIR=$(pwd) perl -I lib scripts/sreview-config -a update\n\n  This creates a file \"config.pm\". Edit that file in your favourite\n  editor; it should be self-documenting. Make sure to certainly edit the\n  PostgreSQL connection string and the \"secrets\" variable.\n\n- To add files to the database, store them in the inputdir (see config\n  file), and run `SREVIEW_WDIR=$(pwd) perl -I lib\n  scripts/sreview-detect`\n- The webinterface expects to be run from the `web` directory, so:\n\n        cd web\n        SREVIEW_WDIR=$(pwd)/.. ./sreview-web daemon\n\nAlternatively, you can use docker-compose:\n\n- `docker compose up`\n\nTo edit the config file, either edit the line with `sreview-config` in `dockerfiles/web/local.Dockerfile`, or to edit from the host:\n\n- Copy the config file from the container\n`docker compose cp web:/etc/sreview/config.pm container-config.pm`\n\n- Add a volume to the docker-compose file:\n\n        services:\n          web:\n            volumes:\n              - ./container-config.pm:/etc/sreview/config.pm\n\n\n# Further reading\n\nSee the [documentation](docs/)\n","funding_links":[],"categories":["Perl"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoe%2FSReview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoe%2FSReview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoe%2FSReview/lists"}