diff --git a/README.md b/README.md index 17bf6e20..c0b53251 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ If Fireshare is useful to you, [GitHub Sponsors](https://github.com/sponsors/Sha - Share videos through unique links - Public / private feeds (private is link-only) -- [video transcoding with CPU or GPU](#transcoding-optional) +- [Video transcoding with CPU or GPU](#transcoding-optional) - Password protected videos - Game-based organization with cover art - Mobile device support @@ -54,6 +54,19 @@ If Fireshare is useful to you, [GitHub Sponsors](https://github.com/sponsors/Sha - RSS feed for new public videos - [LDAP support](./docs/LDAP.md) +## Supported Video Formats + +| Container | Extension | Notes | +| ----------- | --------- | ----------------------------------------- | +| MP4 | `.mp4` | Most compatible, recommended | +| MP4 (Apple) | `.m4v` | Identical to MP4, common on Apple devices | +| QuickTime | `.mov` | Common on macOS / iOS | +| WebM | `.webm` | Open format, browser-native | + +**Supported encodings:** H.264 (AVC), H.265 (HEVC), AV1, VP9. + +Files must be in a supported format because the original file is always served directly to the viewer. Transcoding (when enabled) only generates additional lower-quality versions for adaptive streaming; the original is never modified. + ## Navigation - [Installation](#installation) @@ -176,6 +189,8 @@ See [LDAP.md](./docs/LDAP.md) for setup instructions. ### Transcoding (Optional) +When enabled, Fireshare will create lower quality versions of your original supported file type videos. Your viewers can then choose to play your videos at lower qualities that their internet can handle. Fireshare will also attempt to automatically downgrade the quality of a viewer who is constantly buffering. + Transcoding is off by default. To enable it, set the following environment variables: ``` @@ -249,14 +264,19 @@ See [EnvironmentVariables.md](./docs/EnvironmentVariables.md) for the full list Contributions are welcome. For larger changes, open an issue first to align on scope. -1. Fork the repository -2. Create a branch from `develop` -3. Commit your changes -4. Rebase on latest `develop` -5. Open a pull request to `develop` +1. Know how to code! **I DO NOT WANT VIBE CODERS SUBMITTING PRs** + AI assisted coding is fine if you can read, understand, and validate AI code. + _Asking AI to review itself doesn't count as reading, understanding, and validating AI code._ +2. Fork the repository +3. Create a branch from `develop` +4. Commit your changes +5. Rebase on latest `develop` +6. Open a pull request to `develop` For issues and feature requests, visit the [issue tracker](https://github.com/ShaneIsrael/fireshare/issues). +**Please DO NOT open a pull request for a feature or addition that was not previously discussed with me. Pull requests that do this will be automatically closed.** + ### Database Changes If you update models, create a migration and review it before opening a pull request. diff --git a/app/client/package-lock.json b/app/client/package-lock.json index 4eab2f57..9054317f 100644 --- a/app/client/package-lock.json +++ b/app/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "fireshare", - "version": "1.6.10", + "version": "1.6.12", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/app/client/package.json b/app/client/package.json index ba99922f..6485dddd 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -1,6 +1,6 @@ { "name": "fireshare", - "version": "1.6.11", + "version": "1.6.12", "private": true, "dependencies": { "@emotion/react": "^11.9.0", diff --git a/app/server/fireshare/__init__.py b/app/server/fireshare/__init__.py index 2ed64479..e801fd24 100644 --- a/app/server/fireshare/__init__.py +++ b/app/server/fireshare/__init__.py @@ -184,7 +184,7 @@ def create_app(init_schedule=False): app.config['MINUTES_BETWEEN_VIDEO_SCANS'] = int(os.getenv('MINUTES_BETWEEN_VIDEO_SCANS', '5')) app.config['WARNINGS'] = [] - if (app.config['ADMIN_PASSWORD'] and app.config['ADMIN_USERNAME'] == "admin") and app.config["DISABLE_ADMINCREATE"] == False: + if (app.config['ADMIN_PASSWORD'] and app.config['ADMIN_USERNAME'] == "admin") and app.config["DISABLE_ADMINCREATE"] == False and not app.config['LDAP_ENABLE']: stdPasswordWarning = "You are using the Default Login-Credentials, please consider changing it." app.config['WARNINGS'].append(stdPasswordWarning) logger.warning(stdPasswordWarning) diff --git a/app/server/fireshare/cli.py b/app/server/fireshare/cli.py index 23f24f18..a8592033 100755 --- a/app/server/fireshare/cli.py +++ b/app/server/fireshare/cli.py @@ -471,9 +471,11 @@ def scan_video(ctx, path, tag_ids, game_id, title): folder = parts[0] folder_rule = FolderRule.query.filter_by(folder_path=folder).first() if folder_rule: - link = VideoGameLink(video_id=v.video_id, game_id=folder_rule.game_id, created_at=datetime.utcnow()) - db.session.add(link) - db.session.commit() + existing = VideoGameLink.query.filter_by(video_id=v.video_id, game_id=folder_rule.game_id).first() + if not existing: + link = VideoGameLink(video_id=v.video_id, game_id=folder_rule.game_id, created_at=datetime.utcnow()) + db.session.add(link) + db.session.commit() auto_tagged = True logger.info(f"[Folder Rule] Auto-tagged {v.video_id} to game {folder_rule.game_id} (folder: {folder})") diff --git a/app/server/fireshare/constants.py b/app/server/fireshare/constants.py index c5e7fd90..abed0201 100644 --- a/app/server/fireshare/constants.py +++ b/app/server/fireshare/constants.py @@ -43,5 +43,5 @@ } } -SUPPORTED_FILE_TYPES = ['mp4', 'mov', 'webm'] -SUPPORTED_FILE_EXTENSIONS = ['.mp4', '.mov', '.webm'] \ No newline at end of file +SUPPORTED_FILE_TYPES = ['mp4', 'm4v', 'mov', 'webm'] +SUPPORTED_FILE_EXTENSIONS = ['.mp4', '.m4v', '.mov', '.webm'] \ No newline at end of file