Managing digital assets in the webkit software suite

Hey guys, in extending some features of the chat as well as a bot I’m working on, I’ve run into an issue of how to deal with media assets (images/video/audio)… Do you guys have any thoughts on this?

These components (the chat and bot) will allow users to upload media, and I think it’s a good idea to stay aligned with one solution that fits with our needs and with the Discourse platform. Some options I have considered:

  • Amazon S3 or, better Digital Ocean object storage which includes a CDN and is very reasonably priced at $5/month
  • Cloudinary provides a media (photos/videos/raw data) upload API, but I find the pricing not so great
  • Something that directly plugs into Discourse - is there some type of object storage available through the API? If so, does it scale well with video and audio?

Interested to hear your input. @hugi @matthias

I think, let’s keep the chat simple and not support user-uploaded media there. It’s a text chat that can be used alongside a video call, and on webkit sites. In our toolkit, we should not have tools with the same use cases, as that just doubles the maintenance and development for having the same functionality, twice.

I mentioned it somewhere else already: for a rich chat experience, Discourse is getting there slowly. Discourse and Slack / Rocket Chat / Matrix etc. are somehow converging in features. The only thing missing in Discourse is proper mobile notifications. So where we need a rich (media enabled) chat experience, I’d rather invest in enabling Discourse to fill that role.

(Also, there is a media upload and storage API in Discourse, as used in posts. It works with video uploads as well. But it’s not a good idea to post large videos into a chat, anywhere. People have to learn that this stuff belongs on YouTube / Vimeo and is then to be linked from a chat. If somebody is able to create a video, they are also able to upload it there. When it comes to Discourse, or an external application using its media storage, everything else is an abomination … .)

Yes, noted - however I think there are cases, such as for a bot that collects images and short voice recordings, where we might need a simple asset storage solution. The other thing being @MariaEuler mentioned she likes to send images through the chat (a simple drag and drop interface, nothing complicated) during calls… so in this use case, it would be a good feature to support, even if ephemeral.

To do that, people can for example use a DM topic or public topic here in Discourse. The new post will appear for everyone looking at the topic without people having to reload the page, so it’s quite a chat-like experience already. Not every tool has to be able to do everything – we’ll never get to the end of developing stuff if we’d aim for that … .

In the case of the webkit-related software, I’d propose to keep it within the limits of its current architecture: it’s a statically served single page application website with an interface to Discourse. Any interfaces to more APIs and stuff make installation and configuration more difficult – I keep thinking about future uses beyond Edgeryders.

So if there is ever a usecase that needs user uploaded media assets, that’s an argument for using the Discourse asset storage. Posting the voice recordings etc. to Discourse after the end of the chat is then easy as well. If users participate in the chat using their Discourse accounts, then media upload to is possible if we use the same mechanism as for the post-to-Discourse forms, namely storing the user’s API key on the site in a custom field.