Compare commits
15 Commits
wip-redesi
...
wip-produc
Author | SHA1 | Date | |
---|---|---|---|
e076346765 | |||
0b1f295480 | |||
a64d3902fd | |||
8dd1de1018 | |||
3fdbb92b93 | |||
cf98883633 | |||
7b32b97203 | |||
7f58be4568 | |||
099984f97c | |||
8bfb40ce54 | |||
d60a65c9f0 | |||
9cd2853e49 | |||
3d5554d9ce | |||
764ccfa78e | |||
0b8ebecfea |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -3,10 +3,11 @@
|
|||||||
.coverage
|
.coverage
|
||||||
*.pyc
|
*.pyc
|
||||||
__pycache__
|
__pycache__
|
||||||
|
*.js.map
|
||||||
|
*.css.map
|
||||||
|
|
||||||
/cloud/templates/
|
/cloud/templates/
|
||||||
/cloud/static/assets/css/
|
/cloud/static/assets/
|
||||||
/cloud/static/assets/js/bootstrap.min.js
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
/config_local.py
|
/config_local.py
|
||||||
|
@@ -41,6 +41,7 @@ class CloudExtension(PillarExtension):
|
|||||||
'EXTERNAL_SUBSCRIPTIONS_MANAGEMENT_SERVER': 'https://store.blender.org/api/',
|
'EXTERNAL_SUBSCRIPTIONS_MANAGEMENT_SERVER': 'https://store.blender.org/api/',
|
||||||
'EXTERNAL_SUBSCRIPTIONS_TIMEOUT_SECS': 10,
|
'EXTERNAL_SUBSCRIPTIONS_TIMEOUT_SECS': 10,
|
||||||
'BLENDER_ID_WEBHOOK_USER_CHANGED_SECRET': 'oos9wah1Zoa0Yau6ahThohleiChephoi',
|
'BLENDER_ID_WEBHOOK_USER_CHANGED_SECRET': 'oos9wah1Zoa0Yau6ahThohleiChephoi',
|
||||||
|
'NODE_TAGS': ['animation', 'modelling', 'rigging'],
|
||||||
}
|
}
|
||||||
|
|
||||||
def eve_settings(self):
|
def eve_settings(self):
|
||||||
|
@@ -391,6 +391,11 @@ def privacy():
|
|||||||
return render_template('privacy.html')
|
return render_template('privacy.html')
|
||||||
|
|
||||||
|
|
||||||
|
@blueprint.route('/production')
|
||||||
|
def production():
|
||||||
|
return render_template('production.html')
|
||||||
|
|
||||||
|
|
||||||
@blueprint.route('/emails/welcome.send')
|
@blueprint.route('/emails/welcome.send')
|
||||||
@login_required
|
@login_required
|
||||||
def emails_welcome_send():
|
def emails_welcome_send():
|
||||||
|
3
cloud/tagged/__init__.py
Normal file
3
cloud/tagged/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"""Routes for fetching tagged assets."""
|
||||||
|
|
||||||
|
|
16
cloud/tagged/routes.py
Normal file
16
cloud/tagged/routes.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import logging
|
||||||
|
import datetime
|
||||||
|
import functools
|
||||||
|
|
||||||
|
from flask import Blueprint, jsonify
|
||||||
|
|
||||||
|
blueprint = Blueprint('cloud.tagged', __name__, url_prefix='/tagged')
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@blueprint.route('/')
|
||||||
|
def index():
|
||||||
|
"""Return all tagged assets as JSON, grouped by tag."""
|
||||||
|
|
||||||
|
|
@@ -7,8 +7,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
from flask_login import request
|
from flask import Blueprint, request
|
||||||
from flask import Blueprint
|
|
||||||
import werkzeug.exceptions as wz_exceptions
|
import werkzeug.exceptions as wz_exceptions
|
||||||
|
|
||||||
from pillar import current_app
|
from pillar import current_app
|
||||||
|
@@ -2,7 +2,7 @@ import os
|
|||||||
|
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
|
|
||||||
BLENDER_ID_ENDPOINT = 'http://id.local:8000'
|
BLENDER_ID_ENDPOINT = 'http://id.local:8000/'
|
||||||
|
|
||||||
SERVER_NAME = 'cloud.local:5001'
|
SERVER_NAME = 'cloud.local:5001'
|
||||||
SCHEME = 'http'
|
SCHEME = 'http'
|
||||||
|
@@ -1,6 +1,10 @@
|
|||||||
FROM ubuntu:17.10
|
FROM ubuntu:18.04
|
||||||
MAINTAINER Francesco Siddi <francesco@blender.org>
|
LABEL maintainer="Sybren A. Stüvel <sybren@blender.studio>"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -qyy \
|
RUN set -ex; \
|
||||||
-o APT::Install-Recommends=false -o APT::Install-Suggests=false \
|
apt-get update; \
|
||||||
openssl ca-certificates
|
DEBIAN_FRONTEND=noninteractive apt-get install \
|
||||||
|
-qyy -o APT::Install-Recommends=false -o APT::Install-Suggests=false \
|
||||||
|
tzdata openssl ca-certificates locales; \
|
||||||
|
locale-gen en_US.UTF-8 en_GB.UTF-8 nl_NL.UTF-8
|
||||||
|
ENV LANG en_US.UTF-8
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
1325134dd525b4a2c3272a1a0214dd54 Python-3.6.4.tar.xz
|
|
1
docker/2_buildpy/Python-3.6.6.tar.xz.md5
Normal file
1
docker/2_buildpy/Python-3.6.6.tar.xz.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
c3f30a0aff425dda77d19e02f420d6ba Python-3.6.6.tar.xz
|
@@ -34,6 +34,9 @@ make -j8 install
|
|||||||
# Make sure we can run Python
|
# Make sure we can run Python
|
||||||
ldconfig
|
ldconfig
|
||||||
|
|
||||||
|
# Upgrade pip
|
||||||
|
/opt/python/bin/python3 -m pip install -U pip
|
||||||
|
|
||||||
# Build mod-wsgi-py3 for Python 3.6
|
# Build mod-wsgi-py3 for Python 3.6
|
||||||
cd /dpkg/mod-wsgi-*
|
cd /dpkg/mod-wsgi-*
|
||||||
./configure --with-python=/opt/python/bin/python3
|
./configure --with-python=/opt/python/bin/python3
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
FROM pillar_base
|
FROM pillar_base
|
||||||
LABEL maintainer Sybren A. Stüvel <sybren@blender.studio>
|
LABEL maintainer="Sybren A. Stüvel <sybren@blender.studio>"
|
||||||
|
|
||||||
RUN sed -i 's/^# deb-src/deb-src/' /etc/apt/sources.list && \
|
RUN sed -i 's/^# deb-src/deb-src/' /etc/apt/sources.list && \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install -qy \
|
DEBIAN_FRONTEND=noninteractive apt-get install -qy \
|
||||||
build-essential \
|
build-essential \
|
||||||
apache2-dev \
|
apache2-dev \
|
||||||
checkinstall \
|
checkinstall \
|
||||||
@@ -11,13 +11,13 @@ RUN sed -i 's/^# deb-src/deb-src/' /etc/apt/sources.list && \
|
|||||||
|
|
||||||
RUN apt-get build-dep -y python3.6
|
RUN apt-get build-dep -y python3.6
|
||||||
|
|
||||||
ADD Python-3.6.4.tar.xz.md5 /Python-3.6.4.tar.xz.md5
|
ADD Python-3.6.6.tar.xz.md5 /Python-3.6.6.tar.xz.md5
|
||||||
|
|
||||||
# Install Python sources
|
# Install Python sources
|
||||||
RUN curl -O https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz && \
|
RUN curl -O https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz && \
|
||||||
md5sum -c Python-3.6.4.tar.xz.md5 && \
|
md5sum -c Python-3.6.6.tar.xz.md5 && \
|
||||||
tar xf Python-3.6.4.tar.xz && \
|
tar xf Python-3.6.6.tar.xz && \
|
||||||
rm -v Python-3.6.4.tar.xz
|
rm -v Python-3.6.6.tar.xz
|
||||||
|
|
||||||
# Install mod-wsgi sources
|
# Install mod-wsgi sources
|
||||||
RUN mkdir -p /dpkg && cd /dpkg && apt-get source libapache2-mod-wsgi-py3
|
RUN mkdir -p /dpkg && cd /dpkg && apt-get source libapache2-mod-wsgi-py3
|
||||||
@@ -32,4 +32,4 @@ RUN echo /opt/python/lib > /etc/ld.so.conf.d/python.conf
|
|||||||
RUN ldconfig
|
RUN ldconfig
|
||||||
ENV PATH=/opt/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
ENV PATH=/opt/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
|
||||||
ENV PYTHONSOURCE=/Python-3.6.4
|
ENV PYTHONSOURCE=/Python-3.6.6
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
FROM pillar_base
|
FROM pillar_base
|
||||||
LABEL maintainer Sybren A. Stüvel <sybren@blender.studio>
|
LABEL maintainer="Sybren A. Stüvel <sybren@blender.studio>"
|
||||||
|
|
||||||
ADD python /opt/python
|
ADD python /opt/python
|
||||||
|
|
||||||
@@ -10,5 +10,4 @@ RUN echo Python is installed in /opt/python/ > README.python
|
|||||||
ENV PATH=/opt/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
ENV PATH=/opt/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
|
||||||
RUN cd /opt/python/bin && \
|
RUN cd /opt/python/bin && \
|
||||||
ln -s python3 python && \
|
ln -s python3 python
|
||||||
ln -s pip3 pip
|
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
FROM armadillica/pillar_py:3.6
|
FROM armadillica/pillar_py:3.6
|
||||||
LABEL maintainer Sybren A. Stüvel <sybren@blender.studio>
|
LABEL maintainer="Sybren A. Stüvel <sybren@blender.studio>"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -qy \
|
RUN set -ex; \
|
||||||
|
apt-get update; \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -qy \
|
||||||
git \
|
git \
|
||||||
build-essential \
|
build-essential \
|
||||||
checkinstall \
|
checkinstall \
|
||||||
|
@@ -1,17 +1,19 @@
|
|||||||
FROM armadillica/pillar_py:3.6
|
FROM armadillica/pillar_py:3.6
|
||||||
LABEL maintainer Sybren A. Stüvel <sybren@blender.studio>
|
LABEL maintainer="Sybren A. Stüvel <sybren@blender.studio>"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -qyy \
|
RUN set -ex; \
|
||||||
-o APT::Install-Recommends=false -o APT::Install-Suggests=false \
|
apt-get update; \
|
||||||
git \
|
DEBIAN_FRONTEND=noninteractive apt-get install -qy \
|
||||||
apache2 \
|
-o APT::Install-Recommends=false -o APT::Install-Suggests=false \
|
||||||
libapache2-mod-xsendfile \
|
git \
|
||||||
libjpeg8 \
|
apache2 \
|
||||||
libtiff5 \
|
libapache2-mod-xsendfile \
|
||||||
ffmpeg \
|
libjpeg8 \
|
||||||
rsyslog logrotate \
|
libtiff5 \
|
||||||
nano vim-tiny curl \
|
ffmpeg \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
rsyslog logrotate \
|
||||||
|
nano vim-tiny curl; \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN ln -s /usr/bin/vim.tiny /usr/bin/vim
|
RUN ln -s /usr/bin/vim.tiny /usr/bin/vim
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ CACHE_REDIS_URL = 'redis://redis:6379'
|
|||||||
|
|
||||||
PILLAR_SERVER_ENDPOINT = 'https://cloud.blender.org/api/'
|
PILLAR_SERVER_ENDPOINT = 'https://cloud.blender.org/api/'
|
||||||
|
|
||||||
BLENDER_ID_ENDPOINT = 'https://www.blender.org/id'
|
BLENDER_ID_ENDPOINT = 'https://www.blender.org/id/'
|
||||||
|
|
||||||
GCLOUD_APP_CREDENTIALS = '/data/config/google_app.json'
|
GCLOUD_APP_CREDENTIALS = '/data/config/google_app.json'
|
||||||
GCLOUD_PROJECT = 'blender-cloud'
|
GCLOUD_PROJECT = 'blender-cloud'
|
||||||
@@ -83,21 +83,22 @@ LOGGING = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Latest version of the add-on.
|
||||||
|
BLENDER_CLOUD_ADDON_VERSION = '1.9.0'
|
||||||
|
|
||||||
REDIRECTS = {
|
REDIRECTS = {
|
||||||
# For old links, refer to the services page (hopefully it refreshes then)
|
# For old links, refer to the services page (hopefully it refreshes then)
|
||||||
'downloads/blender_cloud-latest-bundle.zip': 'https://cloud.blender.org/services#blender-addon',
|
'downloads/blender_cloud-latest-bundle.zip': 'https://cloud.blender.org/services#blender-addon',
|
||||||
|
|
||||||
# Latest Blender Cloud add-on; remember to update BLENDER_CLOUD_ADDON_VERSION.
|
# Latest Blender Cloud add-on.
|
||||||
'downloads/blender_cloud-latest-addon.zip':
|
'downloads/blender_cloud-latest-addon.zip':
|
||||||
'https://storage.googleapis.com/institute-storage/addons/blender_cloud-1.8.0.addon.zip',
|
f'https://storage.googleapis.com/institute-storage/addons/'
|
||||||
|
f'blender_cloud-{BLENDER_CLOUD_ADDON_VERSION}.addon.zip',
|
||||||
|
|
||||||
# Redirect old Grafista endpoint to /stats
|
# Redirect old Grafista endpoint to /stats
|
||||||
'/stats/': '/stats',
|
'/stats/': '/stats',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Latest version of the add-on; remember to update REDIRECTS.
|
|
||||||
BLENDER_CLOUD_ADDON_VERSION = '1.8.0'
|
|
||||||
|
|
||||||
UTM_LINKS = {
|
UTM_LINKS = {
|
||||||
'cartoon_brew': {
|
'cartoon_brew': {
|
||||||
'image': 'https://imgur.com/13nQTi3.png',
|
'image': 'https://imgur.com/13nQTi3.png',
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
if [ -f /installed ]; then
|
if [ -f /installed ]; then
|
||||||
return
|
return
|
||||||
|
@@ -16,7 +16,7 @@ var uglify = require('gulp-uglify-es').default;
|
|||||||
|
|
||||||
var enabled = {
|
var enabled = {
|
||||||
uglify: argv.production,
|
uglify: argv.production,
|
||||||
maps: argv.production,
|
maps: !argv.production,
|
||||||
failCheck: !argv.production,
|
failCheck: !argv.production,
|
||||||
prettyPug: !argv.production,
|
prettyPug: !argv.production,
|
||||||
cachify: !argv.production,
|
cachify: !argv.production,
|
||||||
|
@@ -9,3 +9,4 @@
|
|||||||
-e ../attract
|
-e ../attract
|
||||||
-e ../flamenco
|
-e ../flamenco
|
||||||
-e ../pillar-svnman
|
-e ../pillar-svnman
|
||||||
|
-e .
|
||||||
|
109
src/scripts/tagged_assets.js
Normal file
109
src/scripts/tagged_assets.js
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/**
|
||||||
|
* Support for fetching & rendering assets by tags.
|
||||||
|
*/
|
||||||
|
(function($) {
|
||||||
|
/* How many nodes to load initially, and when clicked on the 'Load Next' link. */
|
||||||
|
const LOAD_INITIAL_COUNT = 5;
|
||||||
|
const LOAD_NEXT_COUNT = 3;
|
||||||
|
|
||||||
|
/* Renders a node as a <li> element, returns a jQuery object. */
|
||||||
|
function renderAsset(node) {
|
||||||
|
let li = $('<li>').addClass('tagged-asset');
|
||||||
|
let link = $('<a>')
|
||||||
|
.attr('href', '/nodes/' + node._id + '/redir')
|
||||||
|
.appendTo(li);
|
||||||
|
|
||||||
|
function warnNoPicture() {
|
||||||
|
li.addClass('warning');
|
||||||
|
link.text('no picture for node ' + node._id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!node.picture) {
|
||||||
|
warnNoPicture();
|
||||||
|
return li;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: show 'loading' thingy
|
||||||
|
$.get('/api/files/' + node.picture)
|
||||||
|
.fail(function(error) {
|
||||||
|
let msg = xhrErrorResponseMessage(error);
|
||||||
|
li.addClass('error').text(msg);
|
||||||
|
})
|
||||||
|
.done(function(resp) {
|
||||||
|
// Render the picture if it has the proper size.
|
||||||
|
var show_variation = null;
|
||||||
|
if (typeof resp.variations != 'undefined') {
|
||||||
|
for (variation of resp.variations) {
|
||||||
|
if (variation.size != 'm') continue;
|
||||||
|
show_variation = variation;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (show_variation == null) {
|
||||||
|
warnNoPicture();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let img = $('<img>')
|
||||||
|
.attr('alt', node.name)
|
||||||
|
.attr('src', variation.link)
|
||||||
|
.attr('width', variation.width)
|
||||||
|
.attr('height', variation.height);
|
||||||
|
link.append(img);
|
||||||
|
});
|
||||||
|
|
||||||
|
return li;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadNext(ul_element) {
|
||||||
|
let $ul = $(ul_element);
|
||||||
|
let tagged_assets = ul_element.tagged_assets; // Stored here by loadTaggedAssets().
|
||||||
|
let already_loaded = $ul.find('li.tagged-asset').length;
|
||||||
|
|
||||||
|
let load_next = $ul.find('li.load-next');
|
||||||
|
|
||||||
|
let nodes_to_load = tagged_assets.slice(already_loaded, already_loaded + LOAD_NEXT_COUNT);
|
||||||
|
for (node of nodes_to_load) {
|
||||||
|
let li = renderAsset(node);
|
||||||
|
load_next.before(li);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (already_loaded + LOAD_NEXT_COUNT >= tagged_assets.length)
|
||||||
|
load_next.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.loadTaggedAssets = function(api_base_url) {
|
||||||
|
this.each(function(index, ul_element) {
|
||||||
|
// TODO(Sybren): show a 'loading' animation.
|
||||||
|
$.get('/api/nodes/tagged/' + ul_element.dataset.assetTag)
|
||||||
|
.fail(function(error) {
|
||||||
|
let msg = xhrErrorResponseMessage(error);
|
||||||
|
$('<li>').addClass('error').text(msg).appendTo(ul_element);
|
||||||
|
})
|
||||||
|
.done(function(resp) {
|
||||||
|
// 'resp' is a list of node documents.
|
||||||
|
// Store the response on the DOM <ul>-element so that we can later render more.
|
||||||
|
ul_element.tagged_assets = resp;
|
||||||
|
|
||||||
|
// Here render the first N.
|
||||||
|
for (node of resp.slice(0, LOAD_INITIAL_COUNT)) {
|
||||||
|
let li = renderAsset(node);
|
||||||
|
li.appendTo(ul_element);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't bother with a 'load next' link if there is no more.
|
||||||
|
if (resp.length <= LOAD_INITIAL_COUNT) return;
|
||||||
|
|
||||||
|
// Construct the 'load next' link.
|
||||||
|
let load_next = $('<li>').addClass('load-next');
|
||||||
|
let link = $('<a>')
|
||||||
|
.attr('href', 'javascript:void(0);')
|
||||||
|
.click(function() { loadNext(ul_element); return false; })
|
||||||
|
.text('Load next')
|
||||||
|
.appendTo(load_next);
|
||||||
|
load_next.appendTo(ul_element);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}(jQuery));
|
@@ -193,16 +193,16 @@ style.
|
|||||||
small October 30th, 2015
|
small October 30th, 2015
|
||||||
.page-card-summary
|
.page-card-summary
|
||||||
| Introducing integrated blogs in Blender Cloud projects. Glass Half is the first project fully developed on the new Blender Cloud. It's also the first and only project to have share its
|
| Introducing integrated blogs in Blender Cloud projects. Glass Half is the first project fully developed on the new Blender Cloud. It's also the first and only project to have share its
|
||||||
a(href='https://cloud.blender.org/p/glass-half/5627bb22f0e7220061109c9f') animation dailies
|
a(href='/p/glass-half/5627bb22f0e7220061109c9f') animation dailies
|
||||||
| ! But the biggest outcome from Glass Half was definitely
|
| ! But the biggest outcome from Glass Half was definitely
|
||||||
a(href='https://cloud.blender.org/p/glass-half/569d6044c379cf445461293e') Flexirig
|
a(href='/p/glass-half/569d6044c379cf445461293e') Flexirig
|
||||||
| .
|
| .
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/p/glass-half/blog/glass-half-premiere')
|
a(href='/p/glass-half/blog/glass-half-premiere')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_10_30_glass.jpg') }}", alt="Glass Half")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_10_30_glass.jpg') }}", alt="Glass Half")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/new-art-gallery-with-gleb-alexandrov')
|
a(href='/blog/new-art-gallery-with-gleb-alexandrov')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_11_19_art.jpg') }}", alt="Art Gallery")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_11_19_art.jpg') }}", alt="Art Gallery")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -218,11 +218,11 @@ style.
|
|||||||
.page-card-summary
|
.page-card-summary
|
||||||
| With so much going on in the Cloud at at the studio. The Blender Institute Podcast was born! Sharing our daily studio work, Blender community news, and interacting with the awesome Blender Cloud subscribers.
|
| With so much going on in the Cloud at at the studio. The Blender Institute Podcast was born! Sharing our daily studio work, Blender community news, and interacting with the awesome Blender Cloud subscribers.
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-blender-institute-podcast')
|
a(href='/blog/introducing-blender-institute-podcast')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_11_24_bip.jpg') }}", alt="Blender Institute Podcast")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_11_24_bip.jpg') }}", alt="Blender Institute Podcast")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/p/blenrig/blog/welcome-to-the-blenrig-project')
|
a(href='/p/blenrig/blog/welcome-to-the-blenrig-project')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_12_01_blenrig.jpg') }}", alt="Blenrig")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_12_01_blenrig.jpg') }}", alt="Blenrig")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -238,11 +238,11 @@ style.
|
|||||||
.page-card-summary
|
.page-card-summary
|
||||||
| The biggest source for CC0/Public Domain textures on the interwebs goes live. First as beta, as a quick gift right before Xmas 2015!
|
| The biggest source for CC0/Public Domain textures on the interwebs goes live. First as beta, as a quick gift right before Xmas 2015!
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/new-texture-library')
|
a(href='/blog/new-texture-library')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_12_23_textures.jpg') }}", alt="Texture Library")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2015_12_23_textures.jpg') }}", alt="Texture Library")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/nraryew-the-character-lib')
|
a(href='/blog/nraryew-the-character-lib')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_01_05_charlib.jpg') }}", alt="Character Library")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_01_05_charlib.jpg') }}", alt="Character Library")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -262,11 +262,11 @@ style.
|
|||||||
a(href='https://www.youtube.com/watch?v=kQH897V9bDg&list=PLI2TkLMzCSr_H6ppmzDtU0ut0RwxGvXjv') nicely edited Weekly video reports
|
a(href='https://www.youtube.com/watch?v=kQH897V9bDg&list=PLI2TkLMzCSr_H6ppmzDtU0ut0RwxGvXjv') nicely edited Weekly video reports
|
||||||
| .
|
| .
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/p/caminandes-3/blog/caminandes-llamigos')
|
a(href='/p/caminandes-3/blog/caminandes-llamigos')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_01_30_llamigos.jpg') }}", alt="Caminandes: Llamigos")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_01_30_llamigos.jpg') }}", alt="Caminandes: Llamigos")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/welcome-sybren')
|
a(href='/blog/welcome-sybren')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_03_01_sybren.jpg') }}", alt="Dr. Sybren!")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_03_01_sybren.jpg') }}", alt="Dr. Sybren!")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -282,11 +282,11 @@ style.
|
|||||||
.page-card-summary
|
.page-card-summary
|
||||||
| Create your own private projects on Blender Cloud.
|
| Create your own private projects on Blender Cloud.
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/welcome-sybren')
|
a(href='/blog/welcome-sybren')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_03_projects.jpg') }}", alt="Projects")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_03_projects.jpg') }}", alt="Projects")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-project-sharing')
|
a(href='/blog/introducing-project-sharing')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_09_projectsharing.jpg') }}", alt="Sharing")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_09_projectsharing.jpg') }}", alt="Sharing")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -302,11 +302,11 @@ style.
|
|||||||
.page-card-summary
|
.page-card-summary
|
||||||
| Browse the textures from within Blender!
|
| Browse the textures from within Blender!
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-project-sharing')
|
a(href='/blog/introducing-project-sharing')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_11_addon.jpg') }}", alt="Blender Cloud Add-on")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_11_addon.jpg') }}", alt="Blender Cloud Add-on")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-private-texture-libraries')
|
a(href='/blog/introducing-private-texture-libraries')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_23_privtextures.jpg') }}", alt="Texture Libraries")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_05_23_privtextures.jpg') }}", alt="Texture Libraries")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -322,11 +322,11 @@ style.
|
|||||||
.page-card-summary
|
.page-card-summary
|
||||||
| Sync your Blender preferences across multiple devices.
|
| Sync your Blender preferences across multiple devices.
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-blender-sync')
|
a(href='/blog/introducing-blender-sync')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_06_30_sync.jpg') }}", alt="Blender Sync")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_06_30_sync.jpg') }}", alt="Blender Sync")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-image-sharing')
|
a(href='/blog/introducing-image-sharing')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_07_14_image.jpg') }}", alt="Image Sharing")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_07_14_image.jpg') }}", alt="Image Sharing")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
@@ -337,21 +337,21 @@ style.
|
|||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
a(href='https://cloud.blender.org/blog/introducing-the-hdri-library')
|
a(href='/blog/introducing-the-hdri-library')
|
||||||
| HDRI Library
|
| HDRI Library
|
||||||
small July 27th, 2016
|
small July 27th, 2016
|
||||||
.page-card-summary
|
.page-card-summary
|
||||||
| High-dynamic range images are now available on Blender Cloud! With their own special viewer. Also available via the Blender Cloud add-on.
|
| High-dynamic range images are now available on Blender Cloud! With their own special viewer. Also available via the Blender Cloud add-on.
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-the-hdri-library')
|
a(href='/blog/introducing-the-hdri-library')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_07_27_hdri.jpg') }}", alt="HDRI Library")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_07_27_hdri.jpg') }}", alt="HDRI Library")
|
||||||
section.page-card
|
section.page-card
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/blog/introducing-the-hdri-library')
|
a(href='/blog/introducing-the-hdri-library')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_12_06_toon.jpg') }}", alt="Hdri Library")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2016_12_06_toon.jpg') }}", alt="Hdri Library")
|
||||||
.page-card-side
|
.page-card-side
|
||||||
h2.page-card-title
|
h2.page-card-title
|
||||||
a(href='https://cloud.blender.org/blog/new-training-toon-character-workflow')
|
a(href='/blog/new-training-toon-character-workflow')
|
||||||
| Toon Character Workflow
|
| Toon Character Workflow
|
||||||
small December 6th, 2016
|
small December 6th, 2016
|
||||||
.page-card-summary
|
.page-card-summary
|
||||||
@@ -366,7 +366,7 @@ style.
|
|||||||
| to all resources and training produced so far!
|
| to all resources and training produced so far!
|
||||||
a.page-card-cta(href='https://store.blender.org/product/membership/') Subscribe
|
a.page-card-cta(href='https://store.blender.org/product/membership/') Subscribe
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a(href='https://cloud.blender.org/p/agent-327')
|
a(href='/p/agent-327')
|
||||||
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2017_03_10_agent.jpg') }}", alt="Agent 327")
|
img.img-responsive(src="{{ url_for('static_cloud', filename='img/2017_03_10_agent.jpg') }}", alt="Agent 327")
|
||||||
|
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
| {% block og %}
|
| {% block og %}
|
||||||
meta(property="og:type", content="website")
|
meta(property="og:type", content="website")
|
||||||
meta(property="og:url", content="https://cloud.blender.org/")
|
meta(property="og:url", content="{{ request.url }}")
|
||||||
|
|
||||||
meta(property="og:title", content="Blender Cloud")
|
meta(property="og:title", content="Blender Cloud")
|
||||||
meta(name="twitter:title", content="Blender Cloud")
|
meta(name="twitter:title", content="Blender Cloud")
|
||||||
|
@@ -19,7 +19,7 @@ html(lang="en")
|
|||||||
|
|
||||||
| {% block og %}
|
| {% block og %}
|
||||||
meta(property="og:title", content="Blender Cloud")
|
meta(property="og:title", content="Blender Cloud")
|
||||||
meta(property="og:url", content="https://cloud.blender.org")
|
meta(property="og:url", content="{{ request.url }}")
|
||||||
meta(property="og:type", content="website")
|
meta(property="og:type", content="website")
|
||||||
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_gleb_locomotive.jpg')}}")
|
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_gleb_locomotive.jpg')}}")
|
||||||
meta(property="og:description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.")
|
meta(property="og:description", content="Blender Cloud is a web based service developed by Blender Institute that allows people to access the training videos and all the data from the open projects.")
|
||||||
@@ -436,9 +436,6 @@ html(lang="en")
|
|||||||
if (typeof $().tooltip != 'undefined'){
|
if (typeof $().tooltip != 'undefined'){
|
||||||
$('[data-toggle="tooltip"]').tooltip({'delay' : {'show': 0, 'hide': 0}});
|
$('[data-toggle="tooltip"]').tooltip({'delay' : {'show': 0, 'hide': 0}});
|
||||||
}
|
}
|
||||||
if(typeof($.fn.popover) != 'undefined'){
|
|
||||||
$('[data-toggle="popover"]').popover();
|
|
||||||
}
|
|
||||||
|
|
||||||
| {% block footer_scripts_pre %}{% endblock %}
|
| {% block footer_scripts_pre %}{% endblock %}
|
||||||
| {% block footer_scripts %}{% endblock %}
|
| {% block footer_scripts %}{% endblock %}
|
||||||
|
35
src/templates/production.pug
Normal file
35
src/templates/production.pug
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
| {% extends 'layout.html' %}
|
||||||
|
| {% block page_title %}Production of Stuff{% endblock %}
|
||||||
|
| {% block head %}
|
||||||
|
script(src="{{ url_for('static_cloud', filename='assets/js/tagged_assets.min.js') }}")
|
||||||
|
|
||||||
|
script.
|
||||||
|
$(function() {
|
||||||
|
$('ul.asset-list').loadTaggedAssets();
|
||||||
|
})
|
||||||
|
| {% endblock %}
|
||||||
|
| {% block body %}
|
||||||
|
#page-container
|
||||||
|
#page-content
|
||||||
|
h2 Production of Stuff
|
||||||
|
p.
|
||||||
|
Here are our hand-selected assets 'bout stuff.
|
||||||
|
|
||||||
|
h3 Animation
|
||||||
|
ul.asset-list(data-asset-tag="animation")
|
||||||
|
|
||||||
|
h3 Modelling
|
||||||
|
ul.asset-list(data-asset-tag="modelling")
|
||||||
|
|
||||||
|
h3 Rigging
|
||||||
|
ul.asset-list(data-asset-tag="rigging")
|
||||||
|
|
||||||
|
h3 pipeline
|
||||||
|
ul.asset-list(data-asset-tag="pipeline")
|
||||||
|
|
||||||
|
h3 lookdev
|
||||||
|
ul.asset-list(data-asset-tag="lookdev")
|
||||||
|
|
||||||
|
h3 crazyspace
|
||||||
|
ul.asset-list(data-asset-tag="crazyspace")
|
||||||
|
| {% endblock body%}
|
@@ -51,7 +51,7 @@ meta(name="twitter:description", content="Blender Cloud, your source for open co
|
|||||||
|
|
||||||
| {% endif %}
|
| {% endif %}
|
||||||
|
|
||||||
meta(property="og:url", content="{{url_for('projects.view_node', project_url=project.url, node_id=node._id)}}")
|
meta(property="og:url", content="{{url_for('projects.view_node', project_url=project.url, node_id=node._id, _external=True)}}")
|
||||||
| {% else %}
|
| {% else %}
|
||||||
meta(property="og:title", content="{{ project.name }} Blog on Blender Cloud")
|
meta(property="og:title", content="{{ project.name }} Blog on Blender Cloud")
|
||||||
meta(name="twitter:title", content="{{ project.name }} Blog on Blender Cloud")
|
meta(name="twitter:title", content="{{ project.name }} Blog on Blender Cloud")
|
||||||
|
@@ -24,7 +24,7 @@ include mixins/components
|
|||||||
|
|
||||||
| {% block og %}
|
| {% block og %}
|
||||||
meta(property="og:type", content="website")
|
meta(property="og:type", content="website")
|
||||||
meta(property="og:url", content="https://cloud.blender.org")
|
meta(property="og:url", content="{{ request.url }}")
|
||||||
|
|
||||||
meta(property="og:title", content="{{ page_title }} on Blender Cloud")
|
meta(property="og:title", content="{{ page_title }} on Blender Cloud")
|
||||||
meta(name="twitter:title", content="{{ page_title }} on Blender Cloud")
|
meta(name="twitter:title", content="{{ page_title }} on Blender Cloud")
|
||||||
|
@@ -5,7 +5,7 @@ include mixins/components
|
|||||||
|
|
||||||
| {% block og %}
|
| {% block og %}
|
||||||
meta(property="og:type", content="website")
|
meta(property="og:type", content="website")
|
||||||
meta(property="og:url", content="{{ url_for('cloud.services') }}")
|
meta(property="og:url", content="{{ request.url }}")
|
||||||
|
|
||||||
meta(property="og:title", content="Services - Blender Cloud")
|
meta(property="og:title", content="Services - Blender Cloud")
|
||||||
meta(name="twitter:title", content="Services - Blender Cloud")
|
meta(name="twitter:title", content="Services - Blender Cloud")
|
||||||
@@ -39,8 +39,8 @@ section#blender-cloud-add-on.page-card
|
|||||||
|
|
||||||
small Blender Cloud add-on requires Blender 2.78 or newer
|
small Blender Cloud add-on requires Blender 2.78 or newer
|
||||||
|
|
||||||
a.btn.btn-outline-success(
|
a.btn.btn-primary(
|
||||||
href="https://cloud.blender.org/r/downloads/blender_cloud-latest-addon.zip")
|
href="/r/downloads/blender_cloud-latest-addon.zip")
|
||||||
i.pi-download
|
i.pi-download
|
||||||
| Download add-on <small>v</small> {{ config.BLENDER_CLOUD_ADDON_VERSION }}
|
| Download add-on <small>v</small> {{ config.BLENDER_CLOUD_ADDON_VERSION }}
|
||||||
|
|
||||||
@@ -61,10 +61,15 @@ section#blender-sync.page-card.right
|
|||||||
|
|
||||||
.tip !{addon_text}
|
.tip !{addon_text}
|
||||||
|
|
||||||
|
a.btn.btn-outline-primary(
|
||||||
|
href="/r/downloads/blender_cloud-latest-addon.zip")
|
||||||
|
i.pi-download
|
||||||
|
| Download add-on <small>v</small> {{ config.BLENDER_CLOUD_ADDON_VERSION }}
|
||||||
|
|
||||||
a.page-card-cta(
|
a.btn.btn-link(
|
||||||
href="https://cloud.blender.org/blog/introducing-blender-sync")
|
href="/blog/introducing-blender-sync")
|
||||||
| Learn More
|
| Learn More
|
||||||
|
i.pi-angle-right
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
img(
|
img(
|
||||||
@@ -76,13 +81,13 @@ section#texture-browser.page-card.right
|
|||||||
h2.page-card-title Texture & HDRI Browser
|
h2.page-card-title Texture & HDRI Browser
|
||||||
.page-card-summary
|
.page-card-summary
|
||||||
p.
|
p.
|
||||||
Access the <a href="https://cloud.blender.org/p/textures/">Blender Cloud Textures</a>
|
Access the <a href="/p/textures/">Blender Cloud Textures</a>
|
||||||
library from within Blender using our exclusive add-on.
|
library from within Blender using our exclusive add-on.
|
||||||
Create, manage and share <em>your own</em> texture libraries!
|
Create, manage and share <em>your own</em> texture libraries!
|
||||||
|
|
||||||
.tip !{addon_text}
|
.tip !{addon_text}
|
||||||
|
|
||||||
a.btn.btn-outline-success.js-watch-video(
|
a.btn.btn-outline-primary.js-watch-video(
|
||||||
href="https://www.youtube.com/watch?v=-srXYv2Osjw",
|
href="https://www.youtube.com/watch?v=-srXYv2Osjw",
|
||||||
data-youtube-id="-srXYv2Osjw")
|
data-youtube-id="-srXYv2Osjw")
|
||||||
i.pi-play
|
i.pi-play
|
||||||
@@ -102,15 +107,16 @@ section#image-sharing.page-card.right
|
|||||||
|
|
||||||
.tip !{addon_text}
|
.tip !{addon_text}
|
||||||
|
|
||||||
a.btn.btn-outline-success.js-watch-video(
|
a.btn.btn-outline-primary.js-watch-video(
|
||||||
href="https://www.youtube.com/watch?v=yvtqeMBOAyk",
|
href="https://www.youtube.com/watch?v=yvtqeMBOAyk",
|
||||||
data-youtube-id="yvtqeMBOAyk")
|
data-youtube-id="yvtqeMBOAyk")
|
||||||
i.pi-play
|
i.pi-play
|
||||||
| Watch Video
|
| Watch Video
|
||||||
|
|
||||||
a.page-card-cta.outline(
|
a.btn.btn-link(
|
||||||
href="https://cloud.blender.org/blog/introducing-image-sharing")
|
href="/blog/introducing-image-sharing")
|
||||||
| Learn More
|
| Learn More
|
||||||
|
i.pi-angle-right
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
img(
|
img(
|
||||||
@@ -124,9 +130,10 @@ section#projects.page-card.right
|
|||||||
Create and manage your own personal projects.
|
Create and manage your own personal projects.
|
||||||
Upload assets and collaborate with other Blender Cloud members.
|
Upload assets and collaborate with other Blender Cloud members.
|
||||||
|
|
||||||
a.page-card-cta(
|
a.btn.btn-link(
|
||||||
href="https://cloud.blender.org/blog/introducing-private-projects")
|
href="/blog/introducing-private-projects")
|
||||||
| Learn More
|
| Learn More
|
||||||
|
i.pi-angle-right
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
img(
|
img(
|
||||||
@@ -140,16 +147,17 @@ section#attract.page-card.right
|
|||||||
.page-card-summary.
|
.page-card-summary.
|
||||||
Production-management software for your film, game, or commercial projects.
|
Production-management software for your film, game, or commercial projects.
|
||||||
|
|
||||||
a.btn.btn-outline-success.js-watch-video(
|
a.btn.btn-outline-primary.js-watch-video(
|
||||||
href="https://www.youtube.com/watch?v=b9x1rlyyt_o",
|
href="https://www.youtube.com/watch?v=b9x1rlyyt_o",
|
||||||
data-youtube-id="b9x1rlyyt_o")
|
data-youtube-id="b9x1rlyyt_o")
|
||||||
i.pi-play
|
i.pi-play
|
||||||
| Watch Video
|
| Watch Video
|
||||||
|
|
||||||
a.page-card-cta(
|
a.btn.btn-link(
|
||||||
href="https://cloud.blender.org/blog/attract-and-flamenco-public-beta",
|
href="/blog/attract-and-flamenco-public-beta",
|
||||||
title="Learn more about Attract")
|
title="Learn more about Attract")
|
||||||
| Learn More
|
| Learn More
|
||||||
|
i.pi-angle-right
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
img(
|
img(
|
||||||
@@ -163,16 +171,17 @@ section#flamenco.page-card.right
|
|||||||
.page-card-summary.
|
.page-card-summary.
|
||||||
Take control of your computing infrastructure and get things done.
|
Take control of your computing infrastructure and get things done.
|
||||||
|
|
||||||
a.btn.btn-outline-success.js-watch-video(
|
a.btn.btn-outline-primary.js-watch-video(
|
||||||
href="https://www.youtube.com/watch?v=7cnFKhsM67Q",
|
href="https://www.youtube.com/watch?v=7cnFKhsM67Q",
|
||||||
data-youtube-id="7cnFKhsM67Q")
|
data-youtube-id="7cnFKhsM67Q")
|
||||||
i.pi-play
|
i.pi-play
|
||||||
| Watch Video
|
| Watch Video
|
||||||
|
|
||||||
a.page-card-cta(
|
a.btn.btn-link(
|
||||||
href="https://flamenco.io",
|
href="https://flamenco.io",
|
||||||
title="Learn more about Flamenco")
|
title="Learn more about Flamenco")
|
||||||
| Learn More
|
| Learn More
|
||||||
|
i.pi-angle-right
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
img(
|
img(
|
||||||
@@ -190,7 +199,8 @@ section.page-card(
|
|||||||
.page-card-summary.text-white
|
.page-card-summary.text-white
|
||||||
| Join us for only $9.90/month!
|
| Join us for only $9.90/month!
|
||||||
|
|
||||||
a.page-card-cta(href="https://store.blender.org/product/membership/")
|
a.btn.btn-outline-light.px-3(href="https://store.blender.org/product/membership/")
|
||||||
|
i.pi-heart.mr-2
|
||||||
| Subscribe Now
|
| Subscribe Now
|
||||||
| {% endif %}
|
| {% endif %}
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
| {% block og %}
|
| {% block og %}
|
||||||
meta(property="og:title", content="Blender Cloud Statistics")
|
meta(property="og:title", content="Blender Cloud Statistics")
|
||||||
meta(property="og:url", content="https://cloud.blender.org/stats")
|
meta(property="og:url", content="{{ request.url }}")
|
||||||
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_andy_hdribot_01.jpg')}}")
|
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_andy_hdribot_01.jpg')}}")
|
||||||
| {% endblock %}
|
| {% endblock %}
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
| {% block og %}
|
| {% block og %}
|
||||||
meta(property="og:title", content="Blender Cloud - Open Content Production Platform")
|
meta(property="og:title", content="Blender Cloud - Open Content Production Platform")
|
||||||
meta(property="og:url", content="https://cloud.blender.org/")
|
meta(property="og:url", content="{{ request.url }}")
|
||||||
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_dweebs_01.jpg')}}")
|
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_dweebs_01.jpg')}}")
|
||||||
| {% endblock og %}
|
| {% endblock og %}
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ li.pt-1.pr-1
|
|||||||
improve it for everyone's benefit.
|
improve it for everyone's benefit.
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a.page-card-image(href="https://cloud.blender.org/p/caminandes-3/56bdacccc379cf00797160b0", target="_blank")
|
a.page-card-image(href="/p/caminandes-3/56bdacccc379cf00797160b0", target="_blank")
|
||||||
video(autoplay, loop)
|
video(autoplay, loop)
|
||||||
source(src="{{ url_for('static', filename='assets/img/features/animation_review_01.mp4')}}")
|
source(src="{{ url_for('static', filename='assets/img/features/animation_review_01.mp4')}}")
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ li.pt-1.pr-1
|
|||||||
Access high quality content, organized in
|
Access high quality content, organized in
|
||||||
#[a(href="{{ url_for('cloud.courses') }}") classes],
|
#[a(href="{{ url_for('cloud.courses') }}") classes],
|
||||||
#[a(href="{{ url_for('cloud.workshops') }}") workshop] and the
|
#[a(href="{{ url_for('cloud.workshops') }}") workshop] and the
|
||||||
#[a(href="https://cloud.blender.org/p/gallery") art gallery],
|
#[a(href="/p/gallery") art gallery],
|
||||||
a curated artwork selection, where you can open a
|
a curated artwork selection, where you can open a
|
||||||
.blend file and see how it was made.
|
.blend file and see how it was made.
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ li.pt-1.pr-1
|
|||||||
| See #[a.learn(href="{{ url_for('cloud.courses') }}") Courses] & #[a.learn(href="{{ url_for('cloud.courses') }}") Workshops]
|
| See #[a.learn(href="{{ url_for('cloud.courses') }}") Courses] & #[a.learn(href="{{ url_for('cloud.courses') }}") Workshops]
|
||||||
|
|
||||||
.page-card-side
|
.page-card-side
|
||||||
a.page-card-image(href="https://cloud.blender.org/p/scripting-for-artists/")
|
a.page-card-image(href="/p/scripting-for-artists/")
|
||||||
img(
|
img(
|
||||||
alt="Sybren teaches Python Scripting with Blender",
|
alt="Sybren teaches Python Scripting with Blender",
|
||||||
src="{{ url_for('static', filename='assets/img/backgrounds/background_sybren_01.jpg')}}")
|
src="{{ url_for('static', filename='assets/img/backgrounds/background_sybren_01.jpg')}}")
|
||||||
@@ -121,7 +121,7 @@ li.pt-1.pr-1
|
|||||||
.page-triplet-container.homepage
|
.page-triplet-container.homepage
|
||||||
.row
|
.row
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.triplet-card(data-url="https://cloud.blender.org/p/minecraft-animation-workshop/")
|
.triplet-card(data-url="/p/minecraft-animation-workshop/")
|
||||||
.triplet-card-thumbnail
|
.triplet-card-thumbnail
|
||||||
img(
|
img(
|
||||||
alt="Textures",
|
alt="Textures",
|
||||||
@@ -130,11 +130,11 @@ li.pt-1.pr-1
|
|||||||
h3 Minecraft Animation
|
h3 Minecraft Animation
|
||||||
p.
|
p.
|
||||||
Learn how to make animations with this workshop by Dillon Gu.
|
Learn how to make animations with this workshop by Dillon Gu.
|
||||||
a.triplet-cta(href="https://cloud.blender.org/p/minecraft-animation-workshop/")
|
a.triplet-cta(href="/p/minecraft-animation-workshop/")
|
||||||
| LEARN MORE
|
| LEARN MORE
|
||||||
|
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.triplet-card(data-url="https://cloud.blender.org/p/motion-graphics/")
|
.triplet-card(data-url="/p/motion-graphics/")
|
||||||
.triplet-card-thumbnail
|
.triplet-card-thumbnail
|
||||||
img(
|
img(
|
||||||
alt="HDRI",
|
alt="HDRI",
|
||||||
@@ -143,11 +143,11 @@ li.pt-1.pr-1
|
|||||||
h3 Motion Graphics
|
h3 Motion Graphics
|
||||||
p.
|
p.
|
||||||
A comprehensive guide to motion graphics techniques using Blender.
|
A comprehensive guide to motion graphics techniques using Blender.
|
||||||
a.triplet-cta(href="https://cloud.blender.org/p/motion-graphics/")
|
a.triplet-cta(href="/p/motion-graphics/")
|
||||||
| LEARN MORE
|
| LEARN MORE
|
||||||
|
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.triplet-card(data-url="https://cloud.blender.org/p/gallery")
|
.triplet-card(data-url="/p/gallery")
|
||||||
.triplet-card-thumbnail
|
.triplet-card-thumbnail
|
||||||
img(
|
img(
|
||||||
alt="Characters",
|
alt="Characters",
|
||||||
@@ -156,25 +156,25 @@ li.pt-1.pr-1
|
|||||||
h3 Art Walk-throughs
|
h3 Art Walk-throughs
|
||||||
p.
|
p.
|
||||||
Follow the creative process and techniques behind stunning artwork.
|
Follow the creative process and techniques behind stunning artwork.
|
||||||
a.triplet-cta(href="https://cloud.blender.org/p/gallery")
|
a.triplet-cta(href="/p/gallery")
|
||||||
| LEARN MORE
|
| LEARN MORE
|
||||||
|
|
||||||
.row.training-other
|
.row.training-other
|
||||||
.col-md-10.col-md-offset-1
|
.col-md-10.col-md-offset-1
|
||||||
p.
|
p.
|
||||||
Other training:
|
Other training:
|
||||||
#[a(href="https://cloud.blender.org/p/toon-character-workflow/") Toon Character Workflow],
|
#[a(href="/p/toon-character-workflow/") Toon Character Workflow],
|
||||||
#[a(href="https://cloud.blender.org/p/3d-printing/") Blender for 3D Printing],
|
#[a(href="/p/3d-printing/") Blender for 3D Printing],
|
||||||
#[a(href="https://cloud.blender.org/p/game-asset-creation/") Game Asset Creation],
|
#[a(href="/p/game-asset-creation/") Game Asset Creation],
|
||||||
#[a(href="https://cloud.blender.org/p/blenderella/") Character Modeling],
|
#[a(href="/p/blenderella/") Character Modeling],
|
||||||
#[a(href="https://cloud.blender.org/p/character-animation/") Character Animation],
|
#[a(href="/p/character-animation/") Character Animation],
|
||||||
#[a(href="https://cloud.blender.org/p/humane-rigging/") Introduction] and
|
#[a(href="/p/humane-rigging/") Introduction] and
|
||||||
#[a(href="https://cloud.blender.org/p/blenrig/") Advanced Rigging],
|
#[a(href="/p/blenrig/") Advanced Rigging],
|
||||||
#[a(href="https://cloud.blender.org/p/track-match-2/") VFX Workflow],
|
#[a(href="/p/track-match-2/") VFX Workflow],
|
||||||
#[a(href="https://cloud.blender.org/p/creature-factory-2/") Creature] and
|
#[a(href="/p/creature-factory-2/") Creature] and
|
||||||
#[a(href="https://cloud.blender.org/p/venoms-lab-2/") Cartoon Character creation],
|
#[a(href="/p/venoms-lab-2/") Cartoon Character creation],
|
||||||
#[a(href="https://cloud.blender.org/p/chaos-evolution/") Advanced]
|
#[a(href="/p/chaos-evolution/") Advanced]
|
||||||
#[a(href="https://cloud.blender.org/p/blend-and-paint/") Digital Painting] and
|
#[a(href="/p/blend-and-paint/") Digital Painting] and
|
||||||
#[a(href="{{ url_for('cloud.courses') }}") much more]!
|
#[a(href="{{ url_for('cloud.courses') }}") much more]!
|
||||||
|
|
||||||
|
|
||||||
@@ -215,7 +215,7 @@ li.pt-1.pr-1
|
|||||||
.page-triplet-container.homepage
|
.page-triplet-container.homepage
|
||||||
.row
|
.row
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.triplet-card(data-url="https://cloud.blender.org/p/hero/")
|
.triplet-card(data-url="/p/hero/")
|
||||||
.triplet-card-thumbnail
|
.triplet-card-thumbnail
|
||||||
img(
|
img(
|
||||||
alt="Hero",
|
alt="Hero",
|
||||||
@@ -224,11 +224,11 @@ li.pt-1.pr-1
|
|||||||
h3 Hero
|
h3 Hero
|
||||||
p.
|
p.
|
||||||
The first ever Grease Pencil open movie made with Blender 2.8
|
The first ever Grease Pencil open movie made with Blender 2.8
|
||||||
a.triplet-cta(href="https://cloud.blender.org/p/hero/")
|
a.triplet-cta(href="/p/hero/")
|
||||||
| LEARN MORE
|
| LEARN MORE
|
||||||
|
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.triplet-card(data-url="https://cloud.blender.org/p/spring/")
|
.triplet-card(data-url="/p/spring/")
|
||||||
.triplet-card-thumbnail
|
.triplet-card-thumbnail
|
||||||
img(
|
img(
|
||||||
alt="Spring",
|
alt="Spring",
|
||||||
@@ -237,11 +237,11 @@ li.pt-1.pr-1
|
|||||||
h3 Spring
|
h3 Spring
|
||||||
p.
|
p.
|
||||||
A poetic fantasy film. #[br] A stunning visual journey.
|
A poetic fantasy film. #[br] A stunning visual journey.
|
||||||
a.triplet-cta(href="https://cloud.blender.org/p/spring/")
|
a.triplet-cta(href="/p/spring/")
|
||||||
| LEARN MORE
|
| LEARN MORE
|
||||||
|
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.triplet-card(data-url="https://cloud.blender.org/p/caminandes-3/")
|
.triplet-card(data-url="/p/caminandes-3/")
|
||||||
.triplet-card-thumbnail
|
.triplet-card-thumbnail
|
||||||
img(
|
img(
|
||||||
alt="Caminandes",
|
alt="Caminandes",
|
||||||
@@ -250,21 +250,21 @@ li.pt-1.pr-1
|
|||||||
h3 Caminandes
|
h3 Caminandes
|
||||||
p.
|
p.
|
||||||
Follow the adventures of Koro through the Patagonian pampas.
|
Follow the adventures of Koro through the Patagonian pampas.
|
||||||
a.triplet-cta(href="https://cloud.blender.org/p/caminandes-3/")
|
a.triplet-cta(href="/p/caminandes-3/")
|
||||||
| LEARN MORE
|
| LEARN MORE
|
||||||
|
|
||||||
.row.training-other
|
.row.training-other
|
||||||
.col-md-10.col-md-offset-1
|
.col-md-10.col-md-offset-1
|
||||||
p.
|
p.
|
||||||
Other open movies:
|
Other open movies:
|
||||||
#[a(href="https://cloud.blender.org/p/elephants-dream/") Elephants Dream],
|
#[a(href="/p/elephants-dream/") Elephants Dream],
|
||||||
#[a(href="https://cloud.blender.org/p/big-buck-bunny/") Big Buck Bunny],
|
#[a(href="/p/big-buck-bunny/") Big Buck Bunny],
|
||||||
#[a(href="https://cloud.blender.org/p/sintel/") Sintel],
|
#[a(href="/p/sintel/") Sintel],
|
||||||
#[a(href="https://cloud.blender.org/p/tears-of-steel/") Tears of Steel],
|
#[a(href="/p/tears-of-steel/") Tears of Steel],
|
||||||
#[a(href="https://cloud.blender.org/p/cosmos-laundromat/") Cosmos Laundromat],
|
#[a(href="/p/cosmos-laundromat/") Cosmos Laundromat],
|
||||||
#[a(href="https://cloud.blender.org/p/glass-half/") Glass Half],
|
#[a(href="/p/glass-half/") Glass Half],
|
||||||
#[a(href="https://cloud.blender.org/p/dailydweebs/") The Daily Dweebs],
|
#[a(href="/p/dailydweebs/") The Daily Dweebs],
|
||||||
#[a(href="https://cloud.blender.org/p/agent-327/") Agent 327]
|
#[a(href="/p/agent-327/") Agent 327]
|
||||||
and #[a(href="{{ url_for('cloud.open_projects') }}") more]
|
and #[a(href="{{ url_for('cloud.open_projects') }}") more]
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user