Remove Blender Cloud specific pages

They are now available in the blender-cloud repository. This is an effort to make Pillar a generic package.
This commit is contained in:
Francesco Siddi 2017-07-13 18:24:17 +02:00
parent 7f336cb47c
commit 5ec76f8801
5 changed files with 20 additions and 1645 deletions

View File

@ -1,16 +1,12 @@
import itertools
import logging
from pillarsdk import Node
from pillarsdk import Project
from pillarsdk.exceptions import ResourceNotFound
from flask import abort
from flask import Blueprint
from flask import current_app
from flask import render_template
from flask import redirect
from flask import request
from flask_login import current_user
from werkzeug.contrib.atom import AtomFeed
from pillar.web.utils import system_util
@ -19,7 +15,6 @@ from pillar.web.nodes.custom.posts import posts_view
from pillar.web.nodes.custom.posts import posts_create
from pillar.web.utils import attach_project_pictures
from pillar.web.utils import current_user_is_authenticated
from pillar.web.utils import get_file
blueprint = Blueprint('main', __name__)
log = logging.getLogger(__name__)
@ -27,80 +22,7 @@ log = logging.getLogger(__name__)
@blueprint.route('/')
def homepage():
# Workaround to cache rendering of a page if user not logged in
@current_app.cache.cached(timeout=3600)
def render_page():
return render_template('join.html')
if current_user.is_anonymous:
return render_page()
# Get latest blog posts
api = system_util.pillar_api()
latest_posts = Node.all({
'projection': {'name': 1, 'project': 1, 'node_type': 1,
'picture': 1, 'properties.status': 1, 'properties.url': 1},
'where': {'node_type': 'post', 'properties.status': 'published'},
'embedded': {'project': 1},
'sort': '-_created',
'max_results': '5'
}, api=api)
# Append picture Files to last_posts
for post in latest_posts._items:
post.picture = get_file(post.picture, api=api)
# Get latest assets added to any project
latest_assets = Node.latest('assets', api=api)
# Append picture Files to latest_assets
for asset in latest_assets._items:
asset.picture = get_file(asset.picture, api=api)
# Get latest comments to any node
latest_comments = Node.latest('comments', api=api)
# Get a list of random featured assets
random_featured = get_random_featured_nodes()
# Parse results for replies
to_remove = []
for idx, comment in enumerate(latest_comments._items):
if comment.properties.is_reply:
try:
comment.attached_to = Node.find(comment.parent.parent,
{'projection': {
'_id': 1,
'name': 1,
}},
api=api)
except ResourceNotFound:
# Remove this comment
to_remove.append(idx)
else:
comment.attached_to = comment.parent
for idx in reversed(to_remove):
del latest_comments._items[idx]
main_project = Project.find(current_app.config['MAIN_PROJECT_ID'], api=api)
main_project.picture_header = get_file(main_project.picture_header, api=api)
# Merge latest assets and comments into one activity stream.
def sort_key(item):
return item._created
activities = itertools.chain(latest_assets._items,
latest_comments._items)
activity_stream = sorted(activities, key=sort_key, reverse=True)
return render_template(
'homepage.html',
main_project=main_project,
latest_posts=latest_posts._items,
activity_stream=activity_stream,
random_featured=random_featured,
api=api)
return render_template('homepage.html')
# @blueprint.errorhandler(500)
@ -118,17 +40,6 @@ def homepage():
# return render_template('errors/403_embed.html'), 403
#
@blueprint.route('/join')
def join():
"""Join page"""
return redirect('https://store.blender.org/product/membership/')
@blueprint.route('/services')
def services():
"""Services page"""
return render_template('services.html')
@blueprint.route('/blog/')
@blueprint.route('/blog/<url>')
@ -167,37 +78,6 @@ def get_projects(category):
return projects
def get_random_featured_nodes():
import random
api = system_util.pillar_api()
projects = Project.all({
'projection': {'nodes_featured': 1},
'where': {'is_private': False},
'max_results': '15'
}, api=api)
featured_nodes = (p.nodes_featured for p in projects._items if p.nodes_featured)
featured_nodes = [item for sublist in featured_nodes for item in sublist]
if len(featured_nodes) > 3:
featured_nodes = random.sample(featured_nodes, 3)
featured_node_documents = []
for node in featured_nodes:
node_document = Node.find(node, {
'projection': {'name': 1, 'project': 1, 'picture': 1,
'properties.content_type': 1, 'properties.url': 1},
'embedded': {'project': 1}
}, api=api)
node_document.picture = get_file(node_document.picture, api=api)
featured_node_documents.append(node_document)
return featured_node_documents
@blueprint.route('/open-projects')
def open_projects():
@current_app.cache.cached(timeout=3600, unless=current_user_is_authenticated)

View File

@ -1,361 +1,8 @@
| {% extends 'layout.html' %}
| {% from '_macros/_navigation.html' import navigation_tabs %}
| {% set title = 'homepage' %}
| {% block og %}
meta(property="og:type", content="website")
meta(property="og:url", content="https://cloud.blender.org/")
meta(property="og:title", content="Blender Cloud")
meta(name="twitter:title", content="Blender Cloud")
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(name="twitter: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:image", content="{% if main_project.picture_header %}{{ main_project.picture_header.thumbnail('l', api=api) }}{% else %}{{ url_for('static', filename='assets/img/backgrounds/background_caminandes_3_02.jpg')}}{% endif %}")
meta(name="twitter:image", content="{% if main_project.picture_header %}{{ main_project.picture_header.thumbnail('l', api=api) }}{% else %}{{ url_for('static', filename='assets/img/backgrounds/background_caminandes_3_02.jpg')}}{% endif %}")
| {% endblock %}
| {% block body %}
.dashboard-container
section#main
| {{ navigation_tabs(title) }}
section#stream
h3#activity-stream__title
| Activity Stream
ul#activity-stream__filters
li Filter
li.filter.active(
data-filter='image',
title="List images")
i.pi-picture
li.filter.active(
data-filter='video',
title="List videos")
i.pi-film-thick
li.filter.active(
data-filter='file',
title="List files")
i.pi-file-archive
li.filter(
data-filter='comment',
title="List comments")
i.pi-comment
ul#activity-stream__list
| {% for n in activity_stream %}
li.activity-stream__list-item(
class="{{ n.node_type }} {{ n.properties.content_type }} {% if n.picture %}with-picture{% endif %}",
data-url="{{ url_for_node(node=n) }}")
a.activity-stream__list-thumbnail(
class="{{ n.properties.content_type }}",
href="{{ url_for_node(node=n) }}")
| {% if n.picture %}
img(src="{{ n.picture.thumbnail('m', api=api) }}")
| {% endif %}
.activity-stream__list-thumbnail-icon
| {% if n.node_type == 'asset' %}
| {% if n.properties.content_type == 'video' %}
i.pi-play
| {% elif n.properties.content_type == 'image' %}
i.pi-picture
| {% elif n.properties.content_type == 'file' %}
i.pi-file-archive
| {% else %}
i.pi-folder
| {% endif %}
| {% elif n.node_type == 'comment' %}
i.pi-comment
| {% endif %}
.activity-stream__list-details
a.title(href="{{ url_for_node(node=n) }}")
| {% if n.node_type == 'comment' %}
| {{ n.properties.content | striptags | truncate(200) }}
| {% else %}
| {{ n.name }}
| {% endif %}
| {% if n.permissions.world %}
.ribbon
span free
| {% endif %}
ul.meta
| {% if n.node_type == 'comment' or not n.picture %}
li.when
a(href="{{ url_for_node(node=n) }}", title="{{ n._created }}") {{ n._created | pretty_date_time }}
li.who {{ n.user.full_name }}
| {% endif %}
| {% if n.attached_to %}
li.where-parent
a(href="{{ url_for_node(node_id=n.attached_to._id) }}") {{ n.attached_to.name }}
| {% endif %}
li.where-project
a.project(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }}
li.what
| {% if n.node_type == 'asset' %}
| {{ n.properties.content_type | undertitle }}
| {% elif n.node_type != 'comment' %}
| {{ n.node_type | undertitle }}
| {% endif %}
| {% if n.picture %}
ul.meta.extra
li.when
a(href="{{ url_for_node(node=n) }}", title="{{ n._created }}") {{ n._created | pretty_date_time }}
li.who {{ n.user.full_name }}
| {% endif %}
| {% endfor %}
li.activity-stream__list-item.empty#activity-stream__empty
| No items to list.
section#side
section.announcement.hidden
| {% if main_project.picture_header %}
a(href="https://cloud.blender.org/p/agent-327/")
img.header(
src="{{ main_project.picture_header.thumbnail('l', api=api) }}")
| {% endif %}
.text
.title
a(href="https://cloud.blender.org/p/agent-327/")
span In production:
strong Agent 327
.lead
span.
Follow the ongoing progress of the Barbershop fight scene, a character study for the Agent 327 project.
.buttons
a.btn.btn-default.btn-outline.orange(
href="https://cloud.blender.org/p/agent-327/blog/")
| Blog
a.btn.btn-default.btn-outline.blue(
href="https://cloud.blender.org/p/agent-327/")
| Learn More
section#blog-stream
a.feed(
href="{{ url_for('main.feeds_blogs') }}",
title="Blender Cloud & Projects Blog Feed",
data-toggle="tooltip",
data-placement="left")
i.pi-rss
h3
a(href="{{ url_for('main.main_blog') }}") Blog
ul#blog-stream__list
| {% if latest_posts %}
| {% for n in latest_posts %}
| {% if n.picture and loop.first %}
li.blog-stream__list-item.featured
a.blog-stream__thumbnail(
href="{{ url_for_node(node=n) }}")
img(src="{{ n.picture.thumbnail('l', api=api) }}")
a.title(href="{{ url_for_node(node=n) }}")
| {{ n.name }}
ul.meta
li.when
a(href="{{ url_for_node(node=n) }}",
title="Updated {{ n._updated | pretty_date }}")
| {{ n._created | pretty_date }}
li.where-project
a.project(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }}
| {% else %}
li.blog-stream__list-item
a.blog-stream__list-thumbnail(href="{{ url_for_node(node=n) }}")
| {% if n.picture %}
img.image(src="{{ n.picture.thumbnail('s', api=api) }}")
| {% else %}
i.pi-newspaper
| {% endif %}
.blog-stream__list-details
a.title(href="{{ url_for_node(node=n) }}") {{ n.name }}
ul.meta
li.when
a(href="{{ url_for_node(node=n) }}",
title="Updated {{ n._updated | pretty_date }}")
| {{ n._created | pretty_date }}
li.where-project
a.project(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }}
| {% endif %}
| {% endfor %}
| {% else %}
li.blog-stream__list-item
.blog-stream__list-details
ul.meta
li.when No updates yet
| {% endif %}
li.blog-stream__list-item.more
a(href="{{ url_for('main.main_blog') }}") See All Blog Posts
section#random-asset
h3
a(href="/search") Explore the Cloud
span.section-lead Random selection of the best assets &amp; tutorials
ul.random-asset__list
| {% for n in random_featured %}
| {% if n.picture and loop.first %}
li.random-asset__list-item.featured
| {% if n.permissions.world %}
.ribbon
span free
| {% endif %}
a.random-asset__thumbnail(
href="{{ url_for_node(node=n) }}",
class="{{ n.properties.content_type }}")
| {% if n.picture %}
img(src="{{ n.picture.thumbnail('l', api=api) }}")
| {% if n.properties.content_type == 'video' %}
i.pi-play
| {% endif %}
| {% endif %}
a.title(href="{{ url_for_node(node=n) }}")
| {{ n.name }}
ul.meta
li.what
a(href="{{ url_for_node(node=n) }}")
| {% if n.properties.content_type %}{{ n.properties.content_type }}{% else %}Folder{% endif %}
li.where
a(href="{{ url_for('projects.view', project_url=n.project.url) }}")
| {{ n.project.name }}
| {% else %}
li.random-asset__list-item
| {% if n.permissions.world %}
.ribbon
span free
| {% endif %}
a.random-asset__list-thumbnail(
href="{{ url_for_node(node=n) }}",
class="{{ n.properties.content_type }}")
| {% if n.picture %}
img.image(src="{{ n.picture.thumbnail('s', api=api) }}")
| {% else %}
| {% if n.properties.content_type == 'video' %}
i.pi-film-thick
| {% elif n.properties.content_type == 'image' %}
i.pi-picture
| {% elif n.properties.content_type == 'file' %}
i.pi-file-archive
| {% else %}
i.pi-folder
| {% endif %}
| {% endif %}
.random-asset__list-details
a.title(href="{{ url_for_node(node=n) }}") {{ n.name }}
ul.meta
li.what
a(href="{{ url_for_node(node=n) }}")
| {% if n.properties.content_type %}{{ n.properties.content_type }}{% else %}Folder{% endif %}
li.where
a(href="{{ url_for('projects.view', project_url=n.project.url) }}") {{ n.project.name }}
| {% endif %}
| {% endfor %}
| {% endblock %}
| {% block footer_scripts %}
script.
$(function () {
/* cleanup mentions in comments */
$('.activity-stream__list-details a.title').each(function(){
$(this).text($(this).text().replace(/\*|\@|\<(.*?)\>/g, ''));
});
function saveFilters(){
var filtersEnabled = [];
$('ul#activity-stream__filters li.filter.active').each(function(){
filtersEnabled.push($(this).attr('data-filter'));
});
setJSONCookie('bcloud_ui', 'homepage_activity_filters', filtersEnabled);
}
function loadFilters(){
var filters = Cookies.getJSON('bcloud_ui');
if (filters) {
if (filters.homepage_activity_filters && filters.homepage_activity_filters.length){
/* Clear style on filters/items */
$('ul#activity-stream__filters li.filter').removeClass('active');
$('ul#activity-stream__list li.activity-stream__list-item').addClass('hidden');
for (var f in filters.homepage_activity_filters){
var savedFilter = filters.homepage_activity_filters[f];
/* Style each filter type */
$('ul#activity-stream__filters li.filter').each(function(){
if ($(this).attr('data-filter') == savedFilter){
$(this).addClass('active');
}
});
/* Show items that are on the cookie */
$('ul#activity-stream__list li.activity-stream__list-item').each(function(){
if ($(this).hasClass(savedFilter)) {
$(this).removeClass('hidden');
}
});
}
}
}
}
/* Toggle filters */
$('ul#activity-stream__filters li.filter').click(function(){
// Style the filter button
$(this).toggleClass('active');
var filterType = $(this).attr('data-filter');
saveFilters();
// Toggle hidden class on list item if it has class matching the filter
$('ul#activity-stream__list li.activity-stream__list-item').each(function(){
if ($(this).hasClass(filterType)) {
$(this).toggleClass('hidden');
}
});
var hiddenItems = $('ul#activity-stream__list li.activity-stream__list-item.hidden').length;
if (hiddenItems == '{{ activity_stream|length }}'){
$('#activity-stream__empty').show();
}
});
loadFilters();
/* Click on the whole asset/comment row to go */
$('li.activity-stream__list-item.asset, li.activity-stream__list-item.comment').click(function(e){
window.location.href = $(this).data('url');
$(this).addClass('active');
});
hopToTop(); // Display jump to top button
});
| {% endblock %}
h1 Welcome to Pillar!
p Get started on pillarframework.org
| {% endblock body %}

View File

@ -1,674 +0,0 @@
| {% extends 'layout.html' %}
| {% block page_title %}Welcome{% endblock %}
| {% set title = 'join' %}
| {% block og %}
meta(property="og:title", content="Join the Blender Cloud")
meta(property="og:url", content="https://cloud.blender.org/")
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_andy_hdribot_01.jpg')}}")
| {% endblock %}
| {% block header_backdrop %}
.navbar-backdrop.join(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/background_agent327_04.jpg')}})")
| {% endblock %}
| {% block page_overlay %}
#page-overlay.video
.video-embed
| {% endblock %}
| {% block body %}
#page-container.join
#page-header
.container
.page-title
span.text-background Welcome to the Blender Cloud.
.page-title-summary
p
span.text-background Join us as we make the Agent 327 "Barbershop" scene
ul
li
span.text-background Exclusive production insight &amp; walk-throughs
li
span.text-background High-quality assets ready to use
li
span.text-background All the open movies files & tutorials
li
span.text-background 100+ hours of training
.page-header-cta-container
a.page-header-cta(href="https://store.blender.org/product/membership/")
| Join Now
a.page-header-cta-extra(href="https://cloud.blender.org/p/agent-327")
| Learn More
i.pi-angle-right
#page-content
section.page-card-header
h2
a(href="{{ url_for('main.training') }}") Training & Tutorials
.page-triplet-container.homepage
.row
.col-md-4
.triplet-card(data-url="https://cloud.blender.org/p/motion-graphics/")
.triplet-card-thumbnail
img(
alt="HDRI",
src="{{ url_for('static', filename='assets/img/features/training_motion_graphics.jpg')}}")
.triplet-card-info
h3 Motion Graphics
p.
A comprehensive guide to motion graphics techniques using Blender.
a.triplet-cta(href="https://cloud.blender.org/p/motion-graphics/")
| LEARN MORE
.col-md-4
.triplet-card(data-url="https://cloud.blender.org/p/toon-character-workflow/")
.triplet-card-thumbnail
img(
alt="Textures",
src="{{ url_for('static', filename='assets/img/features/training_toon_character.jpg')}}")
.triplet-card-info
h3 Toon Character Workflow
p.
Perfect for beginners, learn how to build a cartoon character from concept to finish.
a.triplet-cta(href="https://cloud.blender.org/p/toon-character-workflow/")
| LEARN MORE
.col-md-4
.triplet-card(data-url="https://cloud.blender.org/p/gallery")
.triplet-card-thumbnail
img(
alt="Characters",
src="{{ url_for('static', filename='assets/img/features/training_bob_forest.jpg')}}")
.triplet-card-info
h3 Art Walk-throughs
p.
Follow artists through the creative process and techniques behind their work.
a.triplet-cta(href="https://cloud.blender.org/p/gallery")
| LEARN MORE
.row
.col-md-8.col-md-offset-2
p.extra.
Other trainings:
<a href="https://cloud.blender.org/p/3d-printing/">Blender for 3D Printing</a>,
<a href="https://cloud.blender.org/p/game-asset-creation/">Game Asset Creation</a>,
<a href="https://cloud.blender.org/p/blenderella/">Character Modeling</a>,
<a href="https://cloud.blender.org/p/character-animation/">Character Animation</a>,
<a href="https://cloud.blender.org/p/humane-rigging/">Introduction</a>
and
<a href="https://cloud.blender.org/p/blenrig/">Advanced Rigging</a>,
<a href="https://cloud.blender.org/p/track-match-2/">VFX Workflow</a>,
<a href="https://cloud.blender.org/p/creature-factory-2/">Creature</a>
and
<a href="https://cloud.blender.org/p/venoms-lab-2/">Cartoon Character creation</a>,
<a href="https://cloud.blender.org/p/chaos-evolution/">Advanced</a>
<a href="https://cloud.blender.org/p/blend-and-paint/">Digital Painting</a>
and
<a href="{{ url_for('main.training') }}">much more</a>!
.page-triplet-container-fluid.dark(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})")
section.page-card-header
h2
a(href="{{ url_for('main.open_projects') }}") Browse all the Open Movies
.page-triplet-container.homepage
.row
.col-md-4
.triplet-card(data-url="https://cloud.blender.org/p/cosmos-laundromat/")
.triplet-card-thumbnail
img(
alt="HDRI",
src="{{ url_for('static', filename='assets/img/features/open_movies_cosmos.jpg')}}")
.triplet-card-info
h3 Cosmos Laundromat
a.triplet-cta(href="https://cloud.blender.org/p/cosmos-laundromat/")
| LEARN MORE
.col-md-4
.triplet-card(data-url="https://cloud.blender.org/p/agent-327/")
.triplet-card-thumbnail
img(
alt="Textures",
src="{{ url_for('static', filename='assets/img/features/open_movies_agent_barbershop.jpg')}}")
.triplet-card-info
h3 Agent 327
a.triplet-cta(href="https://cloud.blender.org/p/agent-327/")
| LEARN MORE
.col-md-4
.triplet-card(data-url="https://cloud.blender.org/p/caminandes-3/")
.triplet-card-thumbnail
img(
alt="Characters",
src="{{ url_for('static', filename='assets/img/features/open_movies_caminandes_llamigos.jpg')}}")
.triplet-card-info
h3 Caminandes
a.triplet-cta(href="https://cloud.blender.org/p/caminandes-3/")
| LEARN MORE
.row
.col-md-8.col-md-offset-2
p.extra.
Other open movies:
<a href="https://cloud.blender.org/p/elephants-dream/">Elephants Dream</a>,
<a href="https://cloud.blender.org/p/sintel/">Sintel</a>,
<a href="https://cloud.blender.org/p/big-buck-bunny/">Big Buck Bunny</a>,
<a href="https://cloud.blender.org/p/tears-of-steel/">Tears of Steel</a>,
<a href="https://cloud.blender.org/p/glass-half/">Glass Half</a>,
and
<a href="{{ url_for('main.open_projects') }}">more</a>.
section.page-card-header
h2 Download 1000s of files and assets
.page-triplet-container.homepage
.row
.col-md-4
.triplet-card(data-url="{{ url_for('projects.view', project_url='textures') }}")
.triplet-card-thumbnail
img(
alt="Textures",
src="{{ url_for('static', filename='assets/img/features/textures_01.jpg')}}")
.triplet-card-info
h3 Textures
p.
More than 1500 texture maps.
Browse online or from Blender with our awesome add-on.
a.triplet-cta(href="{{ url_for('projects.view', project_url='textures') }}")
| LEARN MORE
.col-md-4
.triplet-card(data-url="{{ url_for('projects.view', project_url='hdri') }}")
.triplet-card-thumbnail
img(
alt="HDRI",
src="{{ url_for('static', filename='assets/img/features/hdri_01.jpg')}}")
.triplet-card-info
h3 HDRI
p.
Up to 16K and 24 EVs (extremely high) HDR images to light your renders.
a.triplet-cta(href="{{ url_for('projects.view', project_url='hdri') }}")
| LEARN MORE
.col-md-4
.triplet-card(data-url="{{ url_for('projects.view', project_url='characters') }}")
.triplet-card-thumbnail
img(
alt="Characters",
src="{{ url_for('static', filename='assets/img/features/characters_01.jpg')}}")
.triplet-card-info
h3 Characters
p.
Production quality, fully rigged and shaded characters ready to animate.
a.triplet-cta(href="{{ url_for('projects.view', project_url='characters') }}")
| LEARN MORE
section.page-card-header
h2 Learn by Example
section.page-card.services-projects
.page-card-side
h2.page-card-title Exclusive Production Insights
.page-card-summary
p.
Watch the original authors of shots breaking them down and share their
insight in the production process. Watch animation reviews,
narrated timelapses, shot walk-throughs and more.
.page-card-side
.page-card-image
video(autoplay, loop)
source(src="{{ url_for('static', filename='assets/img/features/animation_review_01.mp4')}}")
section.page-card.right.services-projects
.page-card-side
h2.page-card-title Production Quality Files
.page-card-summary
p.
From fully rigged characters ready to animate to an Art Gallery
curated by the best Blender artists, access top quality blendfiles to learn
new techniques and improve your art.
.page-card-side
.page-card-image
img(
alt="High Quality Assets",
src="{{ url_for('static', filename='assets/img/features/locomotive_01.jpg')}}")
#blender-addon.page-section-container(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_bw_01.jpg')}})")
section.page-card-header.dark Blender Cloud Add-on
span.page-card-header_lead.dark Connect Blender with the Cloud
a.page-card-cta.download(
href="https://cloud.blender.org/r/downloads/blender_cloud-latest-bundle.zip")
i.pi-download
| Download <small>v</small>{{ config.BLENDER_CLOUD_ADDON_VERSION }}
section.page-card.dark.right
.page-card-side
h2.page-card-title Blender Sync
.page-card-summary.
Save your settings once. Use them anywhere.
Carry your Blender configuration with you,
use our free add-on to sync your keymaps and preferences.
<hr/>
<small>Syncing settings is free for everyone! No subscription required.</small>
a.page-card-cta(
href="https://cloud.blender.org/blog/introducing-blender-sync")
| Learn More
.page-card-side
.page-card-icon
svg(xmlns="http://www.w3.org/2000/svg",
width="64", height="54", viewBox="0 0 64 54")
g(fill="none", stroke="#aaa", stroke-width="2", stroke-miterlimit="10")
path(d="M29 47H5l-4-4v-2h24l2 2h2M29 3H10C8.344 3 7 4.343 7 6v32M35 51h24l4-4v-2H39l-2 2h-2M35 7h19c1.656 0 3 1.343 3 3v32M32 34v20M32 20v8M32 0v14")
g
path(d="M32 31c-3.866 0-7-3.134-7-7M32 17c3.866 0 7 3.134 7 7M32 31h8M24 17h8M36 35l4-4-4-4M28 21l-4-4 4-4")
path(d="M29 37H11V7h18M35 11h18v30H35")
section.page-card.dark
.page-card-side
h2.page-card-title Texture Browser
.page-card-summary
p.
Access the <a href="https://cloud.blender.org/p/textures/">Blender Cloud Textures and HDRI</a>
libraries from within Blender.
Create, manage and share <em>your own</em> texture libraries!
a.page-card-cta.watch-video(
href="https://www.youtube.com/watch?v=-srXYv2Osjw",
data-youtube-id="-srXYv2Osjw")
i.pi-play
| Watch Video
.page-card-side
.page-card-icon
svg(xmlns="http://www.w3.org/2000/svg",
width="64", height="60",
viewBox="0 0 64 60")
g(fill="#aaa")
path(d="M32 60c-.188 0-.377-.053-.542-.16l-31-20C.173 39.656 0 39.34 0 39s.173-.656.458-.84l31-20c.33-.213.754-.213 1.084 0l31 20c.285.184.458.5.458.84s-.173.656-.458.84l-31 20c-.165.107-.354.16-.542.16zM2.845 39L32 57.81 61.155 39 32 20.19 2.845 39z")
path(d="M32 51c-.188 0-.377-.053-.542-.16l-31-20C.173 30.656 0 30.34 0 30s.173-.656.458-.84l31-20c.33-.213.754-.213 1.084 0l31 20c.285.184.458.5.458.84s-.173.656-.458.84l-31 20c-.165.107-.354.16-.542.16zM2.845 30L32 48.81 61.155 30 32 11.19 2.845 30z")
path(d="M32 42c-.188 0-.377-.053-.542-.16l-31-20C.173 21.656 0 21.34 0 21s.173-.656.458-.84l31-20c.33-.213.754-.213 1.084 0l31 20c.285.184.458.5.458.84s-.173.656-.458.84l-31 20c-.165.107-.354.16-.542.16zM2.845 21L32 39.81 61.155 21 32 2.19 2.845 21z")
path(d="M31 27h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zm4-4h2v2h-2zm4 2h2v2h-2zm-16 0h2v2h-2zm12 2h2v2h-2zm-8-4h2v2h-2zm0 4h2v2h-2zm4 4h2v2h-2zm31 15h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zm0 4h2v2h-2zm0-54h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zm0 4h2v2h-2zM0 50h2v2H0zm0-4h2v2H0zm0 8h2v2H0zm0 4h2v2H0zM0 4h2v2H0zm0-4h2v2H0zm4 0h2v2H4zm4 0h2v2H8zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm22 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zM4 58h2v2H4zm4 0h2v2H8zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm22 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zM0 8h2v2H0zm0 4h2v2H0z")
section.page-card.dark.right
.page-card-side
h2.page-card-title
| Image Sharing
.page-card-summary
p.
Got a nice render, a Blender oddity, a cool screenshot?
Share it instantly from within Blender to the Cloud, to the world!
a.page-card-cta(
href="https://cloud.blender.org/blog/introducing-image-sharing")
| Learn More
.page-card-side
.page-card-icon
svg(xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64")
g(fill="none",
stroke="#aaa",
stroke-width="2",
stroke-linejoin="round",
stroke-miterlimit="10")
path(d="M1 1h62v62H1zM4 59h2M8 59h2M12 59h2M60 49H48M46 49H27M60 53H40")
path(d="M5 5h54v40H5z")
path(d="M9 45v-3c0-1.656 1.344-3 3-3h6c1.656 0 3 1.344 3 3v3M29 45v-3c0-1.656 1.344-3 3-3h6c1.656 0 3 1.344 3 3v3M13 45v-3M17 45v-3M33 45v-3M37 45v-3M22 31h-5c-2.762 0-5 2.238-5 5v3M38 39v-3c0-2.762-2.238-5-5-5h-5M31 20c0 3.313-1 9-6 9s-6-5.687-6-9c0-1 0-5 6-5s6 4 6 5z")
path(d="M29 27l-2 8h-4l-2-8M18 31c-4-3-5-9-5-9l6-3M32 31c4-3 5-9 5-9l-6-3M59 24L44 9l-8 8M44 9l8 36")
circle(cx="12", cy="12", r="3")
section.page-card
.page-card-side
h2.page-card-title Private Projects
.page-card-summary.
Create and manage your own personal projects.
Upload assets and collaborate with other Blender Cloud members.
a.page-card-cta(
href="https://cloud.blender.org/blog/introducing-private-projects")
| Learn More
.page-card-side
.page-card-icon
svg(xmlns='http://www.w3.org/2000/svg', width='56', height='64', viewbox='0 0 56 64')
g(fill='#555')
path(d='M42 38H14V26h28v12zm-26-2h24v-8H16v8zm-4-5H8c-1.654 0-3-1.346-3-3V15h2v13c0 .55.45 1 1 1h4v2z')
path(d='M9.293 19.707L6 16.414l-3.293 3.293-1.414-1.414 4-4c.39-.39 1.023-.39 1.414 0l4 4-1.414 1.414zM48 31h-4v-2h4c.55 0 1-.45 1-1V15h2v13c0 1.654-1.346 3-3 3z')
path(d='M53.293 19.707L50 16.414l-3.293 3.293-1.414-1.414L50 13.586l4.707 4.707M27 15h2v9h-2z')
path(d='M31.293 19.707L28 16.414l-3.293 3.293-1.414-1.414L28 13.586l4.707 4.707M7 49H5V36c0-1.654 1.346-3 3-3h4v2H8c-.55 0-1 .45-1 1v13z')
path(d='M6 50c-.256 0-.512-.098-.707-.293l-4-4 1.414-1.414L6 47.586l3.293-3.293 1.414 1.414-4 4c-.195.195-.45.293-.707.293zm45-1h-2V36c0-.55-.45-1-1-1h-4v-2h4c1.654 0 3 1.346 3 3v13z')
path(d='M50 50.414l-4.707-4.707 1.414-1.414L50 47.586l3.293-3.293 1.414 1.414M27 40h2v9h-2z')
path(d='M28 50.414l-4.707-4.707 1.414-1.414L28 47.586l3.293-3.293 1.414 1.414M6 12c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zM6 2C3.794 2 2 3.794 2 6s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zM6 64c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zm22 10c-3.31 0-6-2.692-6-6s2.69-6 6-6 6 2.692 6 6-2.69 6-6 6zm0-10c-2.206 0-4 1.794-4 4s1.794 4 4 4 4-1.794 4-4-1.794-4-4-4zM27 31h2v2h-2zm-4 0h2v2h-2zm8 0h2v2h-2z')
section.pricing
.container
.row
.col-md-12
h2 Simple Pricing. Any payment method.
.row
.col-md-4.col-sm-4
.box.monthly
h3 Monthly
.pricing-display
span.currency-sign $
span.digit-int 9
span.digit-dec .90 / month*
.pricing-caption
p * with a 3-months minimum period
ul
li 100+ hours of high-quality training
li All the open movies files and tutorials
li Exclusive production insight &amp; walk-throughs
li <strong>Sync</strong> your Blender settings across devices
li <strong>Share</strong> images &amp; screenshots from within Blender
li <strong>Download</strong>&nbsp;1500+ textures &amp; HDRIs from Blender
a.sign-up-now(href="https://store.blender.org/product/membership/")
| Subscribe Now
.col-md-4.col-sm-4
.box.yearly
h3 Yearly
.pricing-display
span.currency-sign $
span.digit-int 109
span.digit-dec .00 / year
.pricing-caption
ul
li 100+ hours of high-quality training
li All the open movies files and tutorials
li Exclusive production insight &amp; walk-throughs
li <strong>Sync</strong> your Blender settings across devices
li <strong>Share</strong> images &amp; screenshots from within Blender
li <strong>Download</strong>&nbsp;1500+ textures &amp; HDRIs from Blender
li.special 1 month free!
a.sign-up-now(href="https://store.blender.org/product/membership/")
| Subscribe Now
.col-md-4.col-sm-4
.box.education
h3 Education
.pricing-caption
p.
We also provide flexible options for group subscription
ideal for schools or teams.
p.
Get in touch to discuss direct support, custom solutions,
team management tools and Single Sign-on.
a.sign-up-now(href="mailto:cloudsupport@blender.org")
i.pi-email
| Get in Touch
section.team(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})")
.container
.row
.col-md-12
h2.
A restless team of artists and developers <br/>
wants to share their work with you.
.people-container
.people-intro
h3 Blender Institute
span Amsterdam, The Netherlands
.people-faces
a.face(
href="https://twitter.com/tonroosendaal",
data-blenderhead='ton')
img(alt="Ton", src="{{ url_for('static', filename='assets/img/people/ton.jpg')}}")
a.face(
href="https://twitter.com/fsiddi",
data-blenderhead='francesco')
img(alt="Francesco", src="{{ url_for('static', filename='assets/img/people/francesco.jpg')}}")
a.face(
href="https://twitter.com/hjalti",
data-blenderhead='hjalti')
img(alt="Hjalti", src="{{ url_for('static', filename='assets/img/people/hjalti.jpg')}}")
a.face(
href="https://twitter.com/colinlevy",
data-blenderhead='colin')
img(alt="Colin", src="{{ url_for('static', filename='assets/img/people/colin.jpg')}}")
a.face(
href="https://twitter.com/PabloVazquez_",
data-blenderhead='pablo')
img(alt="Pablo", src="{{ url_for('static', filename='assets/img/people/pablo.jpg')}}")
a.face(
href="https://twitter.com/artificial3d",
data-blenderhead='andy')
img(alt="Andy", src="{{ url_for('static', filename='assets/img/people/andy.jpg')}}")
a.face(
href="https://developer.blender.org/p/sergey/",
data-blenderhead='sergey')
img(alt="Sergey", src="{{ url_for('static', filename='assets/img/people/sergey.jpg')}}")
a.face(
href="https://twitter.com/sastuvel",
data-blenderhead='sybren')
img(alt="Sybren", src="{{ url_for('static', filename='assets/img/people/sybren.jpg')}}")
a.face(
href="https://twitter.com/dfelinto",
data-blenderhead='dalai')
img(alt="dalai", src="{{ url_for('static', filename='assets/img/people/dalai.jpg')}}")
a.face(
href="https://twitter.com/dfelinto",
data-blenderhead='luca')
img(alt="luca", src="{{ url_for('static', filename='assets/img/people/luca.jpg')}}")
.people-bio
.bio#ton
h3 Ton Roosendaal
small CEO Blender Foundation. Producer Blender Institute
span The Netherlands
.bio#francesco
h3 Francesco Siddi
small Pipeline Tools & Back-end Web Development
span Italy
.bio#pablo
h3 Pablo Vázquez
small Lighting, Rendering. Front-end Web Development
span Argentina
.bio#andy
h3 Andy Goralczyk
small Shading, Lighting, Rendering, FX
span Germany
.bio#colin
h3 Colin Levy
small Director. Layout.
span United States
.bio#hjalti
h3 Hjalti Hjálmarsson
small Director. Animation. Layout.
span Iceland
.bio#sergey
h3 Sergey Sharybin
small Blender & Cycles Core Developer
span Russia
.bio#sybren
h3 Sybren Stüvel
small Blender Cloud Developer
span The Netherlands
.bio#dalai
h3 Dalai Felinto
small Blender Developer
span Brazil
.bio#luca
h3 Luca Rood
small Blender Developer
span The Netherlands
.people-container.online
.people-intro
h3 Online Collaborators
span Contributing to Blender Cloud from all over the globe.
.people-faces
a.face(
href="https://twitter.com/davidrevoy",
data-blenderhead='david')
img(alt="David", src="{{ url_for('static', filename='assets/img/people/david.jpg')}}")
a.face(
href="https://twitter.com/s_koenig",
data-blenderhead='sebastian')
img(alt="Sebastian", src="{{ url_for('static', filename='assets/img/people/sebastian.jpg')}}")
a.face(
href="https://twitter.com/gleb_alexandrov",
data-blenderhead='gleb')
img(alt="Gleb", src="{{ url_for('static', filename='assets/img/people/gleb.jpg')}}")
a.face(
href="https://twitter.com/the_mantissa",
data-blenderhead='midge')
img(alt="Midge", src="{{ url_for('static', filename='assets/img/people/midge.jpg')}}")
a.face(
href="https://twitter.com/jpbouza",
data-blenderhead='jpbouza')
img(alt="Juan Pablo", src="{{ url_for('static', filename='assets/img/people/jpbouza.jpg')}}")
.people-bio
.bio#gleb
h3 Gleb Alexandrov
small Lighting & Shading
span Belarus
.bio#david
h3 David Revoy
small Illustrator & Concept Artist
span France
.bio#midge
h3 Midge Sinnaeve
small Motion Graphics
span Belgium
.bio#sebastian
h3 Sebastian König
small VFX
span Germany
.bio#jpbouza
h3 Juan Pablo Bouza
small Rigging
span Argentina
section.page-card.oneofus.
Join <strong>2021</strong> awesome people, <a href="">subscribe to Blender Cloud</a> now.
section.supported-by
h2 Our projects were supported by
img.logos(alt="Supported by", src="{{ url_for('static', filename='assets/img/support_logos.png') }}")
section.page-card.subscribe(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_bw_01.jpg')}})")
.page-card-side
h2.page-card-title
| Support Blender, get inspiration, knowledge and tools in one place.
a.page-card-cta(
href="https://store.blender.org/product/membership/")
i.pi-heart-filled
| Subscribe Now
| {% endblock %}
| {% block footer_scripts %}
script.
$('.triplet-card').click(function(){
window.location.href = $(this).attr('data-url');
});
function getSubscribers(){
$.get('https://store.blender.org/product-counter/?prod=cloud', function(data) {
}).done(function(data){
if (data.total_sold > 0) {
$('.page-card.oneofus').addClass('active');
$('.page-card.oneofus strong').html(data.total_sold);
}
});
}
getSubscribers();
$('.people-faces .face').hover(
function(){
var who = $(this).data('blenderhead');
$('#' + who).addClass('active');
$(this).parent().prev().addClass('active');
},
function(){
$('.bio, .people-intro').removeClass('active');
}
);
// Click anywhere in the page to hide the overlay
function hideOverlay() {
$('#page-overlay.video').removeClass('active');
$('#page-overlay.video .video-embed').html('');
}
$(document).click(function() {
hideOverlay();
});
$(document).keyup(function(e) {
if (e.keyCode == 27) {
hideOverlay();
}
});
$('a.watch-video').click(function(e){
e.preventDefault();
e.stopPropagation();
$('#page-overlay.video').addClass('active');
var videoId = $(this).attr('data-youtube-id');
$('#page-overlay .video-embed').html('<iframe src="https://www.youtube.com/embed/' + videoId +'?rel=0&amp;showinfo=0;autoplay=1" frameborder="0" allowfullscreen></iframe>')
});
| {% endblock %}

View File

@ -2,31 +2,31 @@ doctype
html(lang="en")
head
meta(charset="utf-8")
title {% if self.page_title() %}{% block page_title %}{% endblock %} — {% endif %}Blender Cloud
title {% if self.page_title() %}{% block page_title %}{% endblock %} — {% endif %}Pillar
meta(name="viewport", content="width=device-width, initial-scale=1.0")
meta(name="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(name="author", content="Blender Institute")
meta(name="description", content="")
meta(name="author", content="")
meta(name="theme-color", content="#3e92aa")
| {% if config['GOOGLE_SITE_VERIFICATION'] %}
meta(name="google-site-verification" content="{{ config['GOOGLE_SITE_VERIFICATION'] }}")
| {% endif %}
meta(property="og:site_name", content="Blender Cloud")
meta(property="og:site_name", content="")
meta(property="og:locale", content="en_US")
meta(name="twitter:card", content="summary_large_image")
meta(name="twitter:site", content="@Blender_Cloud")
meta(name="twitter:site", content="")
| {% block og %}
meta(property="og:title", content="Blender Cloud")
meta(property="og:url", content="https://cloud.blender.org")
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: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:title", content="")
meta(property="og:url", content="")
meta(property="og:type", content="")
meta(property="og:image", content="")
meta(property="og:description", content="")
meta(name="twitter:title", content="Blender Cloud")
meta(name="twitter: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(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_gleb_locomotive.jpg')}}")
meta(name="twitter:title", content="")
meta(name="twitter:description", content="")
meta(name="twitter:image", content="")
| {% endblock %}
script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery-3.1.0.min.js')}}")
@ -67,150 +67,7 @@ html(lang="en")
body(class="{{ title }}")
.container-page
header.navbar-backdrop-container
| {% block header_backdrop %}
img(src="{{ url_for('static', filename='assets/img/backgrounds/pattern_02_blur.jpg')}}")
| {% endblock %}
| {% with messages = get_flashed_messages(with_categories=True) %}
| {% if messages %}
| {% for (category, message) in messages %}
.alert(role="alert", class="alert-{{ category }}")
i.alert-icon(class="{{ category }}")
span {{ message }}
button.close(type="button", data-dismiss="alert")
i.pi-cancel
| {% endfor %}
| {% endif %}
| {% endwith %}
nav.navbar.navbar-transparent.navbar-fixed-top
.navbar-overlay
.navbar-container
header.navbar-header
button.navbar-toggle(data-target=".navbar-collapse", data-toggle="collapse", type="button")
span.sr-only Toggle navigation
i.pi-menu
a.navbar-brand(
href="{{ url_for('main.homepage') }}",
title="Blender Cloud")
span.app-logo
i.pi-blender-cloud
| {% block navigation_search %}
.search-input
input#cloud-search(
type="text",
placeholder="Search assets, tutorials...")
i.search-icon.pi-search
| {% endblock %}
nav.collapse.navbar-collapse
ul.nav.navbar-nav.navbar-right
| {% if node and node.properties and node.properties.category %}
| {% set category = node.properties.category %}
| {% else %}
| {% set category = title %}
| {% endif %}
| {% block navigation_sections %}
li
a.navbar-item(
href="{{ url_for('main.main_blog') }}",
title="Blender Cloud Blog",
data-toggle="tooltip",
data-placement="bottom",
class="{% if category == 'blog' %}active{% endif %}")
span Blog
li(class="dropdown libraries")
a.navbar-item.dropdown-toggle(
href="",
data-toggle="dropdown",
title="Libraries")
span Libraries
i.pi-angle-down
ul.dropdown-menu
li
a.navbar-item(
href="{{ url_for('projects.view', project_url='hdri') }}",
title="HDRI Library",
data-toggle="tooltip",
data-placement="left")
i.pi-globe
| HDRI
li
a.navbar-item(
href="{{ url_for('projects.view', project_url='textures') }}",
title="Textures Library",
data-toggle="tooltip",
data-placement="left")
i.pi-folder-texture
| Textures
li
a.navbar-item(
href="{{ url_for('projects.view', project_url='characters') }}",
title="Character Library",
data-toggle="tooltip",
data-placement="left")
i.pi-character
| Characters
li
a.navbar-item(
href="{{ url_for('projects.view', project_url='gallery') }}",
title="Curated artwork collection",
data-toggle="tooltip",
data-placement="left")
i.pi-image
| Art Gallery
li
a.navbar-item(
href="{{ url_for('main.training') }}",
title="Training & Tutorials",
data-toggle="tooltip",
data-placement="bottom",
class="{% if category == 'training' %}active{% endif %}")
span Training
li
a.navbar-item(
href="{{ url_for('main.open_projects') }}",
title="Browse all the Open Projects",
data-toggle="tooltip",
data-placement="bottom",
class="{% if category in ['open-projects', 'film'] %}active{% endif %}")
span Open Projects
li
a.navbar-item(
href="{{ url_for('main.services') }}",
title="Blender Cloud Services",
data-toggle="tooltip",
data-placement="bottom",
class="{% if category == 'services' %}active{% endif %}")
span Services
| {% endblock %}
| {% if current_user.is_anonymous %}
li
a.navbar-item(
href="https://store.blender.org/product/membership/",
title="Sign up") Sign up
| {% endif %}
| {% from '_macros/_menu.html' import navigation_menu_notifications, navigation_menu_user %}
| {{ navigation_menu_notifications(current_user) }}
| {{ navigation_menu_user(current_user) }}
.page-content
#search-overlay
| {% block page_overlay %}
#page-overlay
| {% endblock %}
.page-body
| {% block body %}{% endblock %}
@ -218,105 +75,17 @@ html(lang="en")
#footer-container
| {% block footer_navigation %}
#footer-navigation
.container
.row
.col-md-4.col-xs-6
.footer-support
h4 Support & Feedback
p.
Let us know what you think or if you have any issues
just write to cloudsupport at blender dot org
.col-md-2.col-xs-6
ul.footer-social
li
a(href="https://www.facebook.com/BlenderCloudOfficial/",
title="Follow us on Facebook")
i.pi-social-facebook
li
a(href="https://twitter.com/Blender_Cloud",
title="Follow us on Twitter")
i.pi-social-twitter
.col-md-2.col-xs-6
h4
a(href="{{ url_for('main.homepage') }}")
| Blender Cloud
ul.footer-links
li
a(href="{{ url_for('main.main_blog') }}",
title="Blender Cloud Blog")
| Blog
li
a(href="{{ url_for('main.services') }}",
title="Blender Cloud Services")
| Services
li
a(href="https://cloud.blender.org/blog/blender-cloud-v3",
title="About Blender Cloud")
| About
.col-md-2.col-xs-6
h4
a(href="https://www.blender.org",
title="Blender official Website")
| Blender
ul.footer-links
li
a(href="https://www.blender.org",
title="Blender official Website")
| Blender.org
li
a(href="https://store.blender.org/",
title="The official Blender Store")
| Blender Store
.col-md-2.col-xs-6.special
| With the support of the <br/> MEDIA Programme of the European Union<br/><br/>
img(alt="MEDIA Programme of the European Union",
src="https://gooseberry.blender.org/wp-content/uploads/2014/01/media_programme.png")
| {% endblock %}
| {% endblock footer_navigation %}
| {% block footer %}
footer.container
#hop(title="Be awesome in space")
i.pi-angle-up
| {% endblock %}
| {% endblock %}
#notification-pop(data-url="", data-read-toggle="")
.nc-progress
a#pop-close(href="#", title="Dismiss")
i.pi-cancel
.nc-item
.nc-avatar
.nc-text
span.nc-date
a(href="")
noscript
link(href='//fonts.googleapis.com/css?family=Roboto:300,400', rel='stylesheet', type='text/css')
| {% endblock footer %}
| {% endblock footer_container%}
script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.bootstrap-3.3.7.min.js', v=17320171) }}")
script.
$(document).ready(function() {
{% if current_user.is_authenticated %}
getNotificationsLoop(); // Check for new notifications in the background
// Resize #notifications and change overflow for scrollbars
$(window).on("resize", function() { notificationsResize(); });
{% endif %}
});
if (typeof $().tooltip != 'undefined'){
$('[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 %}{% endblock %}

View File

@ -1,247 +0,0 @@
| {% extends 'layout.html' %}
| {% block page_title %}Services{% endblock %}
| {% set title = 'services' %}
| {% block og %}
meta(property="og:type", content="website")
meta(property="og:url", content="{{ url_for('main.services') }}")
meta(property="og:title", content="Services - Blender Cloud")
meta(name="twitter:title", content="Services - Blender Cloud")
meta(property="og:description", content="Personal Projects · Blender Integration · Texture Browsing · Production Management")
meta(name="twitter:description", content="Personal Projects · Blender Integration · Texture Browsing · Production Management")
meta(property="og:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_services.jpg')}}")
meta(name="twitter:image", content="{{ url_for('static', filename='assets/img/backgrounds/background_services.jpg')}}")
| {% endblock %}
| {% block header_backdrop %}
.navbar-backdrop(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/services_projects.jpg')}})")
.navbar-backdrop-overlay
| {% endblock %}
| {% block page_overlay %}
#page-overlay.video
.video-embed
| {% endblock %}
| {% block body %}
#page-container
.container
#page-header
.page-title
| Blender Cloud Services
.page-title-summary
span.text-background
p.
Blender Cloud is the creative hub for your projects, powered by Free and Open Source software.
p.
On Blender Cloud you can create and share personal projects, access our texture and HDRI
library (or create your own), keep track of your production, manage your renders and much more!
- var addon_text = 'Available through the <a href="{{ url_for(\'main.services\') }}#blender-cloud-add-on">Blender Cloud add-on</a>'
#page-content
section#blender-cloud-add-on.page-card
.page-card-side
h2.page-card-title
| Blender Cloud add-on
.page-card-summary
p.
The Blender Cloud add-on provides access to most of our services directly within Blender.
p.
Use the add-on to share images online, submit renders to Flamenco or browse textures and HDRI libraries!
hr
small Blender Cloud add-on requires Blender 2.78 or newer
a.page-card-cta.download(
href="https://cloud.blender.org/r/downloads/blender_cloud-latest-addon.zip")
i.pi-download
| Download add-on &nbsp;<small>v</small> {{ config.BLENDER_CLOUD_ADDON_VERSION }}
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/blender_cloud_addon_thumbnail.png')}}")
section#blender-sync.page-card.right
.page-card-side
h2.page-card-title Blender Sync
.page-card-summary
| Save your settings once. Use them anywhere.
| Carry your Blender configuration with you,
| use our add-on to sync your keymaps and preferences.
hr
small Blender Sync is <strong>free</strong> for everyone! No subscription required.
small This add-on requires Blender 2.78 or newer.
.tip !{addon_text}
a.page-card-cta(
href="https://cloud.blender.org/blog/introducing-blender-sync")
| Learn More
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/sync_thumbnail.jpg')}}")
section#texture-browser.page-card.right
.page-card-side
h2.page-card-title Texture & HDRI Browser
.page-card-summary
p.
Access the <a href="https://cloud.blender.org/p/textures/">Blender Cloud Textures</a>
library from within Blender using our exclusive add-on.
Create, manage and share <em>your own</em> texture libraries!
.tip !{addon_text}
a.page-card-cta.js-watch-video.download(
href="https://www.youtube.com/watch?v=-srXYv2Osjw",
data-youtube-id="-srXYv2Osjw")
i.pi-play
| Watch Video
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/tex_library_thumbnail.jpg')}}")
section#image-sharing.page-card.right
.page-card-side
h2.page-card-title Image Sharing
.page-card-summary
| Got a nice render, a Blender oddity, a cool screenshot?
| Share it instantly from within Blender to the Cloud, to the world!
.tip !{addon_text}
a.page-card-cta.download.js-watch-video(
href="https://www.youtube.com/watch?v=yvtqeMBOAyk",
data-youtube-id="yvtqeMBOAyk")
i.pi-play
| Watch Video
a.page-card-cta.outline(
href="https://cloud.blender.org/blog/introducing-image-sharing")
| Learn More
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/image_sharing_thumbnail.jpg')}}")
section#projects.page-card.right
.page-card-side
h2.page-card-title Private Projects
.page-card-summary.
Create and manage your own personal projects.
Upload assets and collaborate with other Blender Cloud members.
a.page-card-cta(
href="https://cloud.blender.org/blog/introducing-private-projects")
| Learn More
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/projects_thumbnail.jpg')}}")
section#attract.page-card.right
.page-card-side
h2.page-card-title
| Attract
.page-card-summary.
Production-management software for your film, game, or commercial projects.
a.page-card-cta.download.js-watch-video(
href="https://www.youtube.com/watch?v=b9x1rlyyt_o",
data-youtube-id="b9x1rlyyt_o")
i.pi-play
| Watch Video
a.page-card-cta(
href="https://cloud.blender.org/blog/attract-and-flamenco-public-beta",
title="Learn more about Attract")
| Learn More
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/attract_thumbnail.jpg')}}")
section#flamenco.page-card.right
.page-card-side
h2.page-card-title
| Flamenco
.page-card-summary.
Take control of your computing infrastructure and get things done.
a.page-card-cta.download.js-watch-video(
href="https://www.youtube.com/watch?v=7cnFKhsM67Q",
data-youtube-id="7cnFKhsM67Q")
i.pi-play
| Watch Video
a.page-card-cta(
href="https://flamenco.io",
title="Learn more about Flamenco")
| Learn More
.page-card-side
img(
src="{{ url_for('static', filename='assets/img/features/flamenco_thumbnail.jpg')}}")
| {% if not current_user.has_role('subscriber') %}
section.page-card.subscribe(
style="background-image: url({{ url_for('static', filename='assets/img/backgrounds/pattern_01.jpg')}})")
.page-card-side
h2.page-card-title
| All of this, plus hours of training and production assets.
.page-card-summary
| Join us for only $9.90/month!
a.page-card-cta(
href="https://store.blender.org/product/membership/")
| Subscribe Now
| {% endif %}
| {% endblock %}
| {% block footer_scripts %}
script.
// Click anywhere in the page to hide the overlay
function hideOverlay() {
$('#page-overlay.video').removeClass('active');
$('#page-overlay.video .video-embed').html('');
}
$(document).click(function() {
hideOverlay();
});
$(document).keyup(function(e) {
if (e.keyCode == 27) {
hideOverlay();
}
});
$('a.js-watch-video').click(function(e){
e.preventDefault();
e.stopPropagation();
$('#page-overlay.video').addClass('active');
var videoId = $(this).attr('data-youtube-id');
$('#page-overlay .video-embed').html('<iframe src="https://www.youtube.com/embed/' + videoId +'?rel=0&amp;showinfo=0;autoplay=1" frameborder="0" allowfullscreen></iframe>')
});
| {% endblock %}