Giter Site home page Giter Site logo

mediacms-io / mediacms Goto Github PK

View Code? Open in Web Editor NEW
2.3K 40.0 420.0 17.7 MB

MediaCMS is a modern, fully featured open source video and media CMS, written in Python/Django and React, featuring a REST API.

Home Page: https://mediacms.io

License: GNU Affero General Public License v3.0

Python 4.51% Io 0.04% Shell 0.30% JavaScript 87.34% CSS 1.45% HTML 1.12% Dockerfile 0.03% EJS 0.18% TypeScript 0.66% SCSS 4.35% Handlebars 0.03%
cms django react video media audio sharing rest-api mediacms open-source

mediacms's Introduction

MediaCMS

GitHub license Releases DockerHub

MediaCMS is a modern, fully featured open source video and media CMS. It is developed to meet the needs of modern web platforms for viewing and sharing media. It can be used to build a small to medium video and media portal within minutes.

It is built mostly using the modern stack Django + React and includes a REST API.

A demo is available at https://demo.mediacms.io

Screenshots

Features

  • Complete control over your data: host it yourself!
  • Support for multiple publishing workflows: public, private, unlisted and custom
  • Modern technologies: Django/Python/Celery, React.
  • Multiple media types support: video, audio, image, pdf
  • Multiple media classification options: categories, tags and custom
  • Multiple media sharing options: social media share, videos embed code generation
  • Easy media searching: enriched with live search functionality
  • Playlists for audio and video content: create playlists, add and reorder content
  • Responsive design: including light and dark themes
  • Advanced users management: allow self registration, invite only, closed.
  • Configurable actions: allow download, add comments, add likes, dislikes, report media
  • Configuration options: change logos, fonts, styling, add more pages
  • Enhanced video player: customized video.js player with multiple resolution and playback speed options
  • Multiple transcoding profiles: sane defaults for multiple dimensions (240p, 360p, 480p, 720p, 1080p) and multiple profiles (h264, h265, vp9)
  • Adaptive video streaming: possible through HLS protocol
  • Subtitles/CC: support for multilingual subtitle files
  • Scalable transcoding: transcoding through priorities. Experimental support for remote workers
  • Chunked file uploads: for pausable/resumable upload of content
  • REST API: Documented through Swagger

Example cases

  • Schools, education. Administrators and editors keep what content will be published, students are not distracted with advertisements and irrelevant content, plus they have the ability to select either to stream or download content.

  • Organization sensitive content. In cases where content is sensitive and cannot be uploaded to external sites.

  • Build a great community. MediaCMS can be customized (URLs, logos, fonts, aesthetics) so that you create a highly customized video portal for your community!

  • Personal portal. Organize, categorize and host your content the way you prefer.

Philosophy

We believe there's a need for quality open source web applications that can be used to build community portals and support collaboration.

We have three goals for MediaCMS: a) deliver all functionality one would expect from a modern system, b) allow for easy installation and maintenance, c) allow easy customization and addition of features.

License

MediaCMS is released under GNU Affero General Public License v3.0 license. Copyright Markos Gogoulos.

Support and paid services

We provide custom installations, development of extra functionality, migration from existing systems, integrations with legacy systems, training and support. Contact us at [email protected] for more information.

Hardware considerations

For a small to medium installation, with a few hours of video uploaded daily, and a few hundreds of active daily users viewing content, 4GB Ram / 2-4 CPUs as minimum is ok. For a larger installation with many hours of video uploaded daily, consider adding more CPUs and more Ram.

In terms of disk space, think of what the needs will be. A general rule is to multiply by three the size of the expected uploaded videos (since the system keeps original versions, encoded versions plus HLS), so if you receive 1G of videos daily and maintain all of them, you should consider a 1T disk across a year (1G * 3 * 365).

Releases

Visit Releases Page for detailed Changelog

Installation / Maintanance

There are two ways to run MediaCMS, through Docker Compose and through installing it on a server via an automation script that installs and configures all needed services. Find the related pages:

Configuration

Visit Configuration page.

Information for developers

Check out the new section on the Developer Experience page

Documentation

Technology

This software uses the following list of awesome technologies: Python, Django, Django Rest Framework, Celery, PostgreSQL, Redis, Nginx, uWSGI, React, Fine Uploader, video.js, FFMPEG, Bento4

Who is using it

How to contribute

If you like the project, here's a few things you can do

  • Hire us, for custom installations, training, support, maintenance work
  • Suggest us to others that are interested to hire us
  • Write a blog post/article about MediaCMS
  • Share on social media about the project
  • Open issues, participate on discussions, report bugs, suggest ideas
  • Show and tell how you are using the project
  • Star the project
  • Add functionality, work on a PR, fix an issue!

Contact

[email protected]

mediacms's People

Contributors

adito5393 avatar alberto98fx avatar behnam-marandi avatar dan1ell avatar decatec avatar dependabot[bot] avatar dieprogrammide avatar kylemaas avatar lavirez avatar masavini avatar megidd avatar mgogoulos avatar mo3tafa avatar mrpercheul avatar multiflexi avatar nmlsdev avatar shubhank-saxena avatar slhck avatar sthierolf avatar styiannis avatar swiftugandan avatar thatstella7922 avatar

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

mediacms's Issues

[Improvement] Disable User Automatic Login

After a user is successfully registered, without even having the email verified, it is automatically allowed to login into the system.
Sometimes this is not a desired action.

Can you please implement a way so administrators can disable the automatic login of newly registered users?

Trouble Clearing State

I used the docker-compose.yml script to stand up my environment. I have tried running docker-compose rm and manually deleting all images and exited containers I could find related to MediaCMS. I even blew out the cloned MediaCMS directory. No matter what I do, there is still some lingering state whenever I redeploy.

What am I missing? Thank you!

[Feature] Provide more deployment options

Deployment through the installation script is possible since the project has been released.
However a list of other options should be facilitated.

  • Docker Compose
  • Deploying to Heroku
  • Deploying to Digital Ocean/AWS/Azure/GCP
  • Deploying to Cloudron

[Improvement] Email verification not working

How does the application sends emails? Where do you enter your SMTP details to be able to send emails?
Just registered with a test user and cannot receive confirmation email. I can verify the user automatically in django, but no email was received in the mailbox.

[Feature] Hardware Acceleration Encoding

Can you please let me know if Nvidia hardware acceleration encoding is supported?
If so, how can it be implemented to available in the native setup, and/or future releases through docker

[Issue] Reverse Proxy Server time out

I found out is that the application doesn’t work well with reverse proxy, eventually the app is no longer accessible after 30 minutes if you use reverse proxy. So far, what I could find out, is that the issue at hand might be with the reverse proxy, if you use access lists. Currently testing without having the restriction and looks ok for now.

Will revert back with an update soon

[Feature] Add channels

It would be cool to create channels e.g. for specific topics. Maybe with an article page which gives introduction.

[Feature] Docker setup improvements

For the Docker setup these need be done:

  • make sure admin password is generated and not the default one is in place
  • SECRET_KEY is auto-generated too
  • Improve documentation, specifically how to use it
  • improve how environment variables are retrieved

[Bug] potential issue with ffmpeg and Webex Videos

Some of our videos in .mp4 format with mono sound downloaded from Cisco Webex staying unencoded for a month. When we convert videos in the .mov format with mono sound works like a charm. Any suggestions.

Screen Shot 2021-03-09 at 9 25 20 AM

Internal Server Error: /fu/upload/
Traceback (most recent call last):
File "/home/mediacms.io/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/mediacms.io/lib/python3.6/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/mediacms.io/mediacms/uploader/views.py", line 48, in dispatch
return super(FineUploaderView, self).dispatch(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/views/generic/edit.py", line 142, in post
return self.form_valid(form)
File "/home/mediacms.io/mediacms/uploader/views.py", line 67, in form_valid
new = Media.objects.create(media_file=myfile, user=self.request.user)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/query.py", line 447, in create
obj.save(force_insert=True, using=self.db)
File "/home/mediacms.io/mediacms/files/models.py", line 418, in save
super(Media, self).save(*args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/base.py", line 754, in save
force_update=force_update, update_fields=update_fields)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/base.py", line 803, in save_base
update_fields=update_fields, raw=raw, using=using,
File "/home/mediacms.io/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 179, in send
for receiver in self._live_receivers(sender)
File "/home/mediacms.io/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 179, in
for receiver in self._live_receivers(sender)
File "/home/mediacms.io/mediacms/files/models.py", line 1460, in media_save
instance.media_init()
File "/home/mediacms.io/mediacms/files/models.py", line 490, in media_init
self.encode()
File "/home/mediacms.io/mediacms/files/models.py", line 652, in encode
#if self.video_height and self.video_height < int(profile.resolution or 0):
TypeError: '<' not supported between instances of 'int' and 'NoneType'

Here's the code that generates that error…

else:
for profile in profiles:
if profile.extension != "gif":
if self.video_height and self.video_height < int(profile.resolution or 0): <<<<<<<<HERE
if (
profile.resolution
not in settings.MINIMUM_RESOLUTIONS_TO_ENCODE
):
continue
encoding = Encoding(media=self, profile=profile)
encoding.save()
enc_url = settings.SSL_FRONTEND_HOST + encoding.get_absolute_url()
if profile.resolution in settings.MINIMUM_RESOLUTIONS_TO_ENCODE:
priority = 9
else:
priority = 0
tasks.encode_media.apply_async(
args=[self.friendly_token, profile.id, encoding.id, enc_url],
kwargs={"force": force},
priority=priority,
)

More information:
this is the command thats being ran on the server once the video file is uploaded.
www-data 28524 7078 99 12:35 ? 00:00:18 ffmpeg -y -i /home/mediacms.io/mediacms/media_files/original/user/admin/8101b53cdea84b59bc3f930c5869bb03.1_min_webex.mp4 -c:v libx264 -filter:v scale=-2:720,fps=fps=90 -pix_fmt yuv420p -crf 23 -c:a aac -b:a 128k -ac 2 -maxrate 5250k -bufsize 5250k -force_key_frames expr:gte(t,n_forced4) -x264-params keyint=720:keyint_min=360 -preset faster -profile:v main -level 4.2 -strict -2 /tmp/tmp_g8efv2i/tmp98j9r_sl.mp4
www-data 28526 7079 99 12:35 ? 00:00:25 ffmpeg -y -i /home/mediacms.io/mediacms/media_files/original/user/admin/8101b53cdea84b59bc3f930c5869bb03.1_min_webex.mp4 -c:v libx264 -filter:v scale=-2:1080,fps=fps=90 -pix_fmt yuv420p -crf 23 -c:a aac -b:a 128k -ac 2 -maxrate 11250k -bufsize 11250k -force_key_frames expr:gte(t,n_forced
4) -x264-params keyint=720:keyint_min=360 -preset faster -profile:v main -level 4.2 -strict -2 /tmp/tmph4yraciz/tmpzlzo32ai.mp4

And this is debug txt file
Internal Server Error: /fu/upload/
Traceback (most recent call last):
File "/home/mediacms.io/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/mediacms.io/lib/python3.6/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/mediacms.io/mediacms/uploader/views.py", line 48, in dispatch
return super(FineUploaderView, self).dispatch(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/views/generic/edit.py", line 142, in post
return self.form_valid(form)
File "/home/mediacms.io/mediacms/uploader/views.py", line 67, in form_valid
new = Media.objects.create(media_file=myfile, user=self.request.user)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/query.py", line 447, in create
obj.save(force_insert=True, using=self.db)
File "/home/mediacms.io/mediacms/files/models.py", line 418, in save
super(Media, self).save(*args, **kwargs)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/base.py", line 754, in save
force_update=force_update, update_fields=update_fields)
File "/home/mediacms.io/lib/python3.6/site-packages/django/db/models/base.py", line 803, in save_base
update_fields=update_fields, raw=raw, using=using,
File "/home/mediacms.io/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 179, in send
for receiver in self._live_receivers(sender)
File "/home/mediacms.io/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 179, in
for receiver in self._live_receivers(sender)
File "/home/mediacms.io/mediacms/files/models.py", line 1460, in media_save
instance.media_init()
File "/home/mediacms.io/mediacms/files/models.py", line 490, in media_init
self.encode()
File "/home/mediacms.io/mediacms/files/models.py", line 652, in encode
#if self.video_height and self.video_height < int(profile.resolution or 0):
TypeError: '<' not supported between instances of 'int' and 'NoneType'

[Feature] Add metadata on media upload

This will be very useful in cases of multiple file uploads.

Below the upload form, a metadata section could be toggled on/off (off by default) and have title/description/tags/categories specified, plus a button to apply to the new media once hit.

[Feature] User friendliness improvements

A list with suggestions that increase overall user friendliness, please add your thoughts here!

  • Add graphic/pointers to upload media, on user media page (for logged in users). It could be a nice 'upload' link + graphic instead of the current empty page

  • Add graphic on the index page. For new systems, it is empty, while a nice graphic would be appreciated - it could point to the upload media, but also to things to do (as create a category, edit configuration etc)

  • Add tooltip next to private + unlisted, on media page. This need explain more clearly what these options mean

[Feature] Disable Media Download

Please implement functionality to disable media download button for public users or logged in users, globally, by the CMS Administrator.
If it is not disabled by the administrator of the site, then the users that are posting their media content, they should have the option to decide if the Download button should show, or not, per media file.

Server Error (500) on Login/Register pages

Huge thanks for providing this wonderful CMS. I have deployed the docker version and everything was working fine till now.
I am currently getting a Server Error (500) on both the login and register pages, as well as the django login page. I tried restarting and redeploying the containers but still no luck.

I did updated the default admin account's profile (full name, email) and password. I have around 40 videos uploaded as well, if that meant anything. I have also tinker around with the django settings for a bit too.

Found this snippet in debug.log:

Internal Server Error: /admin/login/
Traceback (most recent call last):
File "/home/mediacms.io/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/mediacms.io/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/contrib/admin/sites.py", line 410, in login
return LoginView.as_view(**defaults)(request)
File "/home/mediacms.io/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/views/decorators/debug.py", line 89, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/contrib/auth/views.py", line 63, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/views/generic/edit.py", line 133, in get
return self.render_to_response(self.get_context_data())
File "/home/mediacms.io/lib/python3.8/site-packages/django/contrib/auth/views.py", line 97, in get_context_data
current_site = get_current_site(self.request)
File "/home/mediacms.io/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 13, in get_current_site
return Site.objects.get_current(request)
File "/home/mediacms.io/lib/python3.8/site-packages/django/contrib/sites/models.py", line 58, in get_current
return self._get_site_by_id(site_id)
File "/home/mediacms.io/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id
site = self.get(pk=site_id)
File "/home/mediacms.io/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/django/db/models/query.py", line 429, in get
raise self.model.DoesNotExist(
django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist.

Thank you.

Configuration.md not clear on role of docker/local_settings.py

(Making an issue from discussion to link to PR)

In the docs it says:

A number of options are available on cms/settings.py.
It is advisable to override any of them by adding it to cms/local_settings.py .
Any change needs restart of MediaCMS in order to take effect. So edit cms/local_settings.py, make a change and restart MediaCMS

But when I change something in cms/local_settings.py and restart MediaCMS, this seems to reset cms/local_settings.py to its original content. After a while I realized the file was being overwritten with whatever is written in deploy/docker/local_settings.py.
I installed MediaCMS with the Docker Compose installation so I guess that makes sense.

But the text in Configuration.md isn't clear on this point and could be made clearer. The deploy/docker/local_settings.py file is only mentioned in the installation instructions on the main page. It could be mentioned here in Configuration.md as well.

Originally posted by @Dan1ell in #76

How does one set the theme default for everyone

I can switch the theme to Dark when I am registered, and signed in. But I would like to switch the theme to dark for everyone by default, i.e. guests/non logged in users, etc. I looked in the settings.py and there is this

DEFAULT_THEME = "black"  # this is not taken under consideration currently

Any idea if this can be done currently, or how long before this is implemented?

Thanks!

[Feature] Allow private playlists

You can't add private playlists (private videos to playlists) and you can't share videos between users (private)
These features (especially the first one) would be nice to have but thanks for the great work you did so far!

Best regards,
Lukas

PS: if you want me to delete the second part of the request, just tell me:)

[Feature] Documentation

A place to access all the documentation is a must these days for open source software.

Is it possible to implement a Wiki JS on the mediacms.io domain such as docs.mediacms.io?

I would like admin access to be able to create documentation

Trouble With Reverse Proxy

I run my own Nginx reverse proxy with SSL termination. I am experiencing an interesting issue.

When I set the FRONTEND_HOST variable in the deploy/docker/local_settings.py to https://mydomain.example.com and start the app, all of the links and login logic work well and point to the correct domain.

However, any assets IE videos and images do not point to the correct link. They will point to my IP Address and port for some reason. Not sure what I am doing wrong. Posting snippets below:

I am using the standard docker-compose.yml file. The only modification I have made was setting the web ports from 80:80 to 10100:80

nginx config

server {
    server_name mydomain.example.com;
    client_max_body_size 0;
    location / {
      proxy_set_header X-Forwarded-Host $host:$server_port;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass         http://192.168.X.X:10100;
    }

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/mydomain.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.example.com/privkey.pem;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

server {
    if ($host = mydomain.example.com) {
        return 301 https://$host$request_uri;
    }

    listen   80;
    server_name mydomain.example.com;
    return 404;
}

Feature bounty

Feature bounty anyone? Lets make a list of critical features and try collective funding.

Instal Pip

Hello. I would like to install additional packs from Pip. How can this be done to make everything work? For example, to expand the place, there are packs that could do this.

My suggestions for improvemen

  1. How to force download not only mkv and mp4? I would like to add avi, vob.
  2. Language packs, let users translate, you just give the opportunity. I can translate into Russian.
  3. The problem is with Russian, there is no way to upload files that differ from English characters. And there is no way to change the name of the video other than English. Also, I cannot change the description. Server Error (500)
  4. Possible SubRip support, or transcoding at boot. (also the ability to get subtitles from the videocontainer)
  5. Additional customization of encoding profiles, and adding new ones. Ability to bring out the settings for quality compression, sound directly from the admin panel. For easy creation of profiles for unknowing people.
  6. For some reason, the vp9 profile does not work, I selected it, but the video is not encoded into it.
    Someday it will be good to add support for ads, additional audio tracks, choice of storage space, storage in the clouds and ftp, prevent the inserted video from playing on certain domains.

I really liked the script, it works well for me with a weak VPS. And the quality is decent. There are simply not enough opportunities, I would even like to help as much as I can. I see potential here, and I believe in you! With the help of your script will be doing a lot of great-million projects!

[Feature] Multiple language support

Another feature that would be great for this application is translation.
I can help with Romanian translation since this is my native language.

[Feature] Support Long file names

Built and deployed via docker compose. Here's the error logs:

[2021-02-13 09:40:32,190: INFO/ForkPoolWorker-1] encode_media[fb9e5623-4af1-474a-9d48-c55c33ac514b]: Encode Media started, friendly token nok0IhkGC, profile id 10, force True
[2021-02-13 09:40:32,598: INFO/MainProcess] Received task: encode_media[4476dd22-f32b-4f3f-9d7d-e9e2437c5a21]
[2021-02-13 09:40:33,483: INFO/ForkPoolWorker-1] encode_media[fb9e5623-4af1-474a-9d48-c55c33ac514b]: Saved 0.02
[2021-02-13 09:40:42,705: INFO/ForkPoolWorker-2] encode_media[58468e25-93a8-4817-b1e2-6b5d20523f06]: Saved 2.29
[2021-02-13 09:40:54,256: INFO/ForkPoolWorker-3] encode_media[4bd61192-bb9e-4f03-aafc-d407fd4ae7f6]: Saved 3.38
[2021-02-13 09:41:06,098: INFO/ForkPoolWorker-1] encode_media[fb9e5623-4af1-474a-9d48-c55c33ac514b]: Saved 0.6
[2021-02-13 09:41:13,038: INFO/ForkPoolWorker-4] Task produce_sprite_from_video[b3066118-940e-4d50-b872-78f50ea48379] succeeded in 388.49497139599407s: True
[2021-02-13 09:41:13,040: INFO/ForkPoolWorker-4] encode_media[e3007beb-70d1-42ce-9542-180e38bceff1]: Encode Media started, friendly token nok0IhkGC, profile id 10, force True
[2021-02-13 09:41:14,160: INFO/MainProcess] Received task: encode_media[865240af-21ef-41f3-a69b-0083f565e255]
[2021-02-13 09:41:14,451: INFO/ForkPoolWorker-4] encode_media[e3007beb-70d1-42ce-9542-180e38bceff1]: Saved 0.02
[2021-02-13 09:41:15,529: INFO/ForkPoolWorker-2] encode_media[58468e25-93a8-4817-b1e2-6b5d20523f06]: Saved 2.86
[2021-02-13 09:41:19,133: ERROR/ForkPoolWorker-3] Task encode_media[4bd61192-bb9e-4f03-aafc-d407fd4ae7f6] raised unexpected: OSError(36, 'File name too long')
Traceback (most recent call last):
File "/home/mediacms.io/lib/python3.8/site-packages/celery/app/trace.py", line 412, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/mediacms.io/lib/python3.8/site-packages/celery/app/trace.py", line 704, in protected_call
return self.run(*args, **kwargs)
File "/home/mediacms.io/mediacms/files/tasks.py", line 389, in encode_media
encoding.media_file.save(content=myfile, name=output_name)
File "/home/mediacms.io/lib/python3.8/site-packages/django/db/models/fields/files.py", line 87, in save
self.name = self.storage.save(name, content, max_length=self.field.max_length)
File "/home/mediacms.io/lib/python3.8/site-packages/django/core/files/storage.py", line 52, in save
return self._save(name, content)
File "/home/mediacms.io/lib/python3.8/site-packages/django/core/files/storage.py", line 267, in _save
fd = os.open(full_path, self.OS_OPEN_FLAGS, 0o666)
OSError: [Errno 36] File name too long: '/home/mediacms.io/mediacms/media_files/encoded/10/admin/2a20b04faf444f9b9eec1192b335ad0b.02_eFQjaLZo0_2a20b04faf444f9b9eec1192b335ad0b.11_2020_12_19_1655【テレ朝チャンネル1】【生】Creepy_Nuts_準ワンマンライブ「延長戦」at_LINE_CUBE_SHIBUYA<独占生中継>_2020年12月19日.mp4.mkv.mp4'

change password for users

When you first setup and run the server, it will automatically generate an admin password for you.
How can you change the admin password through the website, without going into Django backend?

[Feature] Expose email templates

A necessity for setting up/customizing email templates for communications from the application.
The initial template needs to be simple, but customizabile, with own logo and possibly another text

Relative urls needed for menu items

Most menu items don’t have relative urls and break when not running on a local machine.

When running MediaCMS from a server and accessing it with the server’s ip address, the menu items try to resolve to ‘localhost/item’ and of course there is nothing running on localhost, which is my laptop.

URLs that break:
Home: localhost
Featured: localhost/featured
Recommended: localhost/recommended
Recent uploads: localhost/latest
Tags: localhost/tags
Categories: localhost/categories
Members: localhost/members
History: localhost/history
Liked media: localhost/liked
Sign in: localhost/accounts/login
Register: localhost/accounts/signup
MediaCMS logo: localhost

URLs that work:
/about
/terms
/contact

De logo images are also not loading properly on the server.

Prevent video leeching / Hotlinking

Prevent bandwidth theft. The URL of the M3U8 file is dynamically encrypted based on the password and timestamp, and is changed every few minutes.

[Feature]Respect LOGS_DIR value

Mediacms does not respect new value of LOGS_DIR I change location in local_settings.py to = "/var/log/mediacms" yet logs are printed in old logs subfolder

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.