Git Product home page Git Product logo

concerto's Introduction

Concerto 2 Digital Signage System

Build Status

Full Installation Instructions: https://github.com/concerto/concerto/wiki/Installing-Concerto-2

What is Concerto?

Concerto is an open source digital signage system. Users submit graphic, textual, and other content, and moderators approve that content for use in a variety of content feeds which are displayed on screens connected to computers displaying the Concerto frontend.

Each screen has a template that has fields designated for content. The template can also have a background graphic and a CSS stylesheet. You can easily define your own templates.

A screen can subscribe its fields to feeds (or channels). Screens can be public or private (requiring a token).

Users can create content (an image, an iframe, video, rss content, etc.) and submit it to various feeds. The content can be scheduled for a specific date range. Content submitted to a feed can be ordered on that feed if desired. The default ordering is by content start date.

Feeds can be hidden or locked. Feeds belong to groups. If the user that submitted the content is an administrator or is authorized to moderate content on the feed based on their group membership permissions then the submission is automatically approved. Otherwise the content submission to the feed is pending a moderator’s approval.

A screen can define the content display rules for each field. This includes whether content should be displayed in order or randomly or based on priority. It can also designate the animation for transitions when content is swapped out and in.

There are various plugins that extend functionality which can be added as desired. You can even write your own.

Dependencies

  • Ruby 2.6
  • Rubygems
  • Imagemagick, GhostScript, Poppler-Utils
  • LibreOffice
  • Webserver (Apache/Unicorn/Thin/Nginx)
  • Rack interface to the webserver (Passenger, FastCGI)
  • ActiveRecord-compatible database (Mysql, SQLite, Postgres)
  • Nodejs as the javascript engine (as of version 2.4.0)

Docker Image

To build and run the docker image locally, (make sure you don't already have port 80 in use):

1. git clone http://github.com/concerto/concerto
2. cd concerto
3. docker build -t concerto .
4. docker-compose up

To get into the concerto container: docker exec -t -i concerto_concerto_1 bash -l and then you can also "login" as the app user via setuser app bash --login.

** Note - we are still working on a viable docker image capable of handling persistence and upgrades. **

Debian Package Installation

Note: For those upgrading Concerto from earlier Debian/Ubuntu versions, make sure that your APT source line looks like this: http://dl.concerto-signage.org/packages/ stretch main

  • Add Concerto repository using curl -k https://get.concerto-signage.org/add_repo.sh | sh
  • Install Concerto via APT sudo apt-get install concerto-full

Virtual Server Image (VirtualBox, VMWare, et. al.)

The virtual server image contains a full-stack installation of the Concerto webserver with all components pre-configured.

Concerto 2 is licensed under the Apache License, Version 2.0.

concerto's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

concerto's Issues

De-Moderate Content on Edit

When content is edited it should be set to the pending state on any feed it has already been approved / denied on.

As an example:
Upload Slide 1 to feed 1
Content requires moderation on feed 1
Content gets approved on feed 1
Edit piece of content changing name
Content requires moderation on feed 1 again

Feed Admin UI

Right now, the creation of feeds is only seem to be available via guessing the right URL. These probably deserve a place in the UI somewhere.

Create quick filter widget that can be used for filtering lists

We want to have the ability to quick-filter lists of feeds and other types of lists based on a filter string. Take a look at the "assignee" dropdown on Github Issues for inspiration - it allows the user to start typing to quick-filter the list of people associated with the project. We'll want to be able to use this type of filter control in multiple places and with multiple types of lists, including lists of users, groups, feeds, and screens. We should figure out a good way to abstract this functionality (jQuery plugin, perhaps?) so that we can leverage it pretty easily across the application.

Fix Date / Time Pickers

Concent#new date and time pickers aren't working for me in Chrome.

JS Console is throwing some errors:
application.js:9831Uncaught TypeError: Cannot read property 'selectDate' of undefined
jquery-ui-timepicker-addon.js:572Uncaught TypeError: Cannot read property 'selectDate' of undefined
jquery-ui-timepicker-addon.js:64Uncaught TypeError: Cannot read property 'defaults' of undefined

Create or reuse plugin for dropdown panels

To be used inside the submissions#index view when a user is browsing a particular feed - the user should be able to click the "Jump to Feed..." button and receive a filterable feed hierarchy inside a dropdown panel.

Use bootstrap's dropdown plugin or roll your own.

Create Jump to Feed widget

Create a component that can be called by the user inside a dropdown panel on any feed browsing page to quickly jump to any other feed in the system. When the user clicks on the trigger, the panel should present a hierarchical feed tree with the current feed highlighted and the ability to quick-filter the list by feed name. All of the feed links should be URLs to the submissions#index view centered on the selected feed.

Add visual icon indicator to gridlists to denote content type (graphic, video, etc.)

Currently gridlists (the matrix-esque layouts for browsing content and other visual objects like screens and templates) all look the same no matter which type of content is being rendered within. We should add a visual indicator of some sort (an icon, perhaps) to denote different content types from one another in the same gridlist. This indicator could be incorporated inside the thumbnail preview of the content, or it could be placed in the corner of each gridlist item.

Support PDF Uploads

PDF files should be uploaded and converted to images. We should handle multipage PDF uploads if possible, but the first page would be feature-on-par with Concerto V1.

Refactor top bar

Reduce the vertical height of the topbar and give it overflow (multiple lines of menu items) and auto-hide capabilities.

Feed and subscription ordering options

To support shuffling as described in the Concerto Frontend wiki page, excluding multi-page content, a few things must happen to the tables and actions relating to the involved models.

  1. Add ordered/shuffled option to feed model
  2. Add an auto-incrementing order field to the submission model
  3. Add segmented/interleaved option to field model
  4. Add an auto-incrementing order field to the subscription model

AJAX popstate causes raw JS to be returned in specific cases

When a user navigates through a remote-loading JS view and then over to a plain old HTML view, using the browser back button results in plain JS being shown without being properly rendered. For example, navigate to /feeds/1/submissions with JavaScript turned on, then go over to /screens - when you click the browser back button you should see plain, unrendered JavaScript.

The problem might be caused by the popstate binding inside application.js:

      $.getScript(location.href);
    });

Render processed Graphic if one exists

Instead of always rendering the 'original' Graphic, we should render the 'processed' one if it exists.

Processed Graphics could be the result of conversions from formats that can't be displayed in browsers (see #4) or other tweaks / filters to optimize the original upload (perhaps dropping quality to 90%).

Make top menu auto-hide for select pages (submissions#show, etc.)

The top bar is large and should be hidden on views where it makes sense to focus the user into the main content area of the page (for example, when zooming into a piece of content and viewing the submissions#show view for that content inside a particular feed). When the user goes to these pages, the top bar should slide up and only appear when the user either backs out of that view or moves the mouse up to the top area of the screen where the top bar usually resides.

Hide Feed Parent

When there are no feeds available to serve as a parent feed the parent feed drop down shouldn't so up at all on the feeds#new form.

As an example, wipe you database and go to create a feed. The parent feed selector just takes up space.

Support Multi Media Content

We need to support 1 Content with multiple pieces of media behind it. This should probably be a new Content Type, like MultiGraphic or something like that.

Create partial for adding feed subscriptions to a screen and weighting them

Build a form partial that can be used for each screen field within screens#show. This partial should include the mechanism for finding a certain feed in the database (using the filter plugin from Brian M), adding it as a new subscription, and assigning it a weight (weight column inside the subscriptions table schemata, which is an integer). Basic controls should be provided to edit and delete subscriptions for a given screen field.

Seed Database with Required Stuff

A fresh install requires the following to get up and running, we should provide seed data for folks:

  1. Group
  2. Feed (requires a group to own it)
  3. Fields
  4. [If feasible] Template + Positions (requires field for each postion)

Allow Users to Join Groups

Users should be able to join groups with the Pending membership level if they do not have an existing membership in the group.

Add ujs views for Browse Content

Create the applicable plugins and ujs js.erb views for the contents controller and submissions controller to enable AJAX content browsing.

Group admins can change membership levels

A group admin should be able to change the level of a member, including the ability to place them in the Reject (-1) state. The reject state doesn't exist right now, so it should be added.

is_admin not accessible for User

is_admin is not an accessible field in the user model.

Rails gets angry and throws an error when trying to make a user an admin.

Add Screen Frontend

This should be the view / controller / whatever that screens talk to. We can add functionality after we get a URL and some code in place.

Display thumbnail images of content within Browse pages

Currently I'm using a placeholder thumbnail image for all graphical content in the Browse Content grid (view code found in submissions controller, #index method for .html.erb and .js.erb files). We need to display similarly sized thumbnail images of graphical content in the grid.

Template Admin UI

Right now, the creation of templates is only available via guessing the right URL. These probably deserve a place in the UI somewhere.

Bump to Rails 3.1.3

There was a security vulnerability, we should get the fix for it.

Bump when the build isn't hot / no one is working.

Display templates on a page for selection within screen edit

Find all available templates and display them inside a listing to allow the user to select one for the screen. The current categories (based on screen dimensions compared to the template dimensions) seem to work pretty well - by default, hide the templates that will not work well for the current screen.

Benchmark WebGL Transitions

I wonder if WebGL transitions would render better in the Frontend since the browser might pass the work directly to an OpenGL-friendly GPU. We should benchmark some image and text fading and weight the implementation cost.

Content Browsing Mechanism

Create the mechanism for browsing content: a tabular view by default that shows thumbnails and basic details, and a zoomed-in view that fills most of the screen with the content and also includes controls relevant to the current view (for example, moderation of content).

We will plan to use this system for browsing content, moderation, and possibly screen lists/viewing.

Investigate CSS3 transitions for use with Browse Content actions

We may want to use some spiffy CSS3 transitions to navigate the Browse Content views (for example, some kind of swipe or slide for navigating from one feed grid view to another or a zoom-in animation for when the user goes to look at a particular piece of content).

Investigate the incorporation of such animations for feasibility and consider implementing them (this is a nice-to-have).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.