Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - CatLabInteractive/central-storage · GitHub
Skip to content

Repository files navigation

Central Storage

Central Storage is a storage engine built in Laravel. It includes duplicate upload detection, supports on the fly image (but cached) image resize and allows you to set 'Processors' that handle more complex file transformations like video transcoding etc.

Quick start

CHeckout this code:

git clone git@github.com:CatLabInteractive/central-storage.git

Let composer install all dependencies:

composer install

Copy .env.example to .env and set the database credentials.

Set a unique app key:

php artisan key:generate

Setup the database:

php artisan migrate

Create a user (for security, there is no registration form enabled in the website)

php artisan user:create

Done! You should now be able to login on the website.

Disk configuration

Central Storage uses the default File Storage systems, so you can configure where files will be stored. The files are stored in various folders based on a hashing mechanism that should in theory improve performance when reading a lot of sequentially uploaded files.

Note that certain Processors (like the AWS MediaConvert processor, formerly Elastic Transcoder) requires the files to be stored on Amazon S3.

Setting up a consumer

A 'consumer' is an application that will use central storage for storing files.

Navigate to Consumers and click Create consumer. Fill in a descriptive name.

You should now get your consumer key and consumer secret.

Upload limits

Image uploads are limited to 20MB by default. This limit only applies to image files (image/*); videos and other file types are not affected. The limit can be configured via the MAX_IMAGE_FILE_SIZE environment variable (value in bytes).

MAX_IMAGE_FILE_SIZE=20971520

The PHP-level upload limits (upload_max_filesize and post_max_size) are set to 1GB in docker/php/upload.ini.

File resize

In order for file resizing to work, you need to either install the GD or the Imagick php extensions. In your .env file, set INTERVENTION_DRIVER=imagick accordingly. The project uses the Intervention Image library to manipulate images, so for further install instructions, take a look there.

Content delivery network

In order to use a CDN with Central Storage (like Amazon Cloudfront), point the origin of the network to your asset website and configure your Central Storage Client projects FRONT config parameter to the CDN network. This way, uploads will use the direct connection to Central Storage, but all generated links fetch content will use the CDN.

Setting up your client project (in Laravel)

Central Storage provides a standard REST API and is thus consumable by any language or framework. We will focus on the existing Laravel client here. Note that it is a trivial task to implement a new client, as there is only a few methods to implement.

In your Laravel project, run composer require catlabinteractive/central-storage-client

Then, wherever you want to upload a file, initialize the client:

$centralStorageClient = newCentralStorageClient(
'https://your-central-storage-url.com',
'your_key',
'your_secret'
);

Or, if you like, you can use the provider that uses the default configuration files:

'providers' => [
[...]
CatLab\CentralStorage\Client\CentralStorageServiceProvider::class,
],
'aliases' => [
[...]
'CentralStorage' => CatLab\CentralStorage\Client\CentralStorageClientFacade::class,
]
]

The PHP client consumes Symfony's File objects. That means you can upload files straight from Laravel. The client returns an Eloquent model 'Asset', which can be saved directly to a database (migration file is available in central-storage-client/database).

<?phpuseApp\Models\Attachments\Asset;
useIlluminate\Http\Request;
class AssetController
{
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */publicfunctionupload(Request$request)
{
$file = $request->file()->first();
if (!$file) {
abort(400, 'Please provide a valid file.');
}
if (!$file->isValid()) {
abort(400, 'File not valid: ' . $file->getErrorMessage());
}
/** @var Asset $asset */$asset = \CentralStorage::store($file);
$asset->save();
returnresponse()->json($asset->getData());
}
}

For further instructions on how to upload and consume assets, please check out the Central Storage Client documentation.

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages