*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE) (View: /home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php)"
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
}
*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE)"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
*
* For the full copyright and license information, please view the LICENSE.md
* file that was distributed with this source code.
*
* ------------------------------------------------------------------
*/
declare(strict_types=1);
namespace TOC;
use Cocur\Slugify\Slugify;
use Cocur\Slugify\SlugifyInterface;
/**
* UniqueSlugify creates slugs from text without repeating the same slug twice per instance
*
* @author Casey McLaughlin <caseyamcl@gmail.com>
*/
class UniqueSlugify implements SlugifyInterface
{
/**
* @var SlugifyInterface
*/
private $slugify;
/**
* @var array
*/
private $used;
/**
* Constructor
*
* @param SlugifyInterface|null $slugify
*/
public function __construct(?SlugifyInterface $slugify = null)
{
$this->used = array();
$this->slugify = $slugify ?: new Slugify();
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/vendor/caseyamcl/toc/src/UniqueSlugify.php"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
/**
* @var HTML5
*/
private $htmlParser;
/**
* @var SlugifyInterface
*/
private $slugifier;
/**
* Constructor
*
* @param HTML5|null $htmlParser
* @param SlugifyInterface|null $slugify
*/
public function __construct(?HTML5 $htmlParser = null, ?SlugifyInterface $slugify = null)
{
$this->htmlParser = $htmlParser ?? new HTML5();
$this->slugifier = $slugify ?? new UniqueSlugify();
}
/**
* Fix markup
*
* @param string $markup
* @param int $topLevel
* @param int $depth
* @return string Markup with added IDs
* @throws RuntimeException
*/
public function fix(string $markup, int $topLevel = 1, int $depth = 6): string
{
if (! $this->isFullHtmlDocument($markup)) {
$partialID = uniqid('toc_generator_');
$markup = sprintf("<body id='%s'>%s</body>", $partialID, $markup);
}
$domDocument = $this->htmlParser->loadHTML($markup);
$domDocument->preserveWhiteSpace = true; // do not clobber whitespace
<?php
namespace App\View\Composers;
use DOMDocument;
use Roots\Acorn\View\Composer;
class BlogPost extends Composer
{
protected static $views = [
'partials.content-single',
];
public function override()
{
$fields = get_fields();
$htmlContent = apply_filters( 'the_content', get_the_content() );
$markupFixer = new \TOC\MarkupFixer();
$tocGenerator = new \TOC\TocGenerator();
$htmlContent = $markupFixer->fix($htmlContent);
$fields['toc'] = $tocGenerator->getOrderedHtmlMenu($htmlContent);
$fields['the_content'] = $htmlContent;
$fields['the_category'] = $this->getCategory();
return $fields;
}
public function getCategory() {
$category = null;
if(get_the_terms(get_the_id(), 'category')) {
foreach(get_the_terms(get_the_id(), 'category') as $term) {
if($term->name !== "Blog" && $term->name !== "Events" && $term->name !== "News") {
$category = $term;
return $category;
}
}
}
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function with()
{
return [];
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function override()
{
return static::$views;
}
$view = array_slice(explode('\\', static::class), 3);
$view = array_map([Str::class, 'snake'], $view, array_fill(0, count($view), '-'));
return implode('/', $view);
}
/**
* Compose the view before rendering.
*
* @param \Illuminate\View\View $view
* @return void
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
return $callback;
}
/**
* Build a class based container callback Closure.
*
* @param string $class
* @param string $prefix
* @return \Closure
*/
protected function buildClassEventCallback($class, $prefix)
{
[$class, $method] = $this->parseClassEvent($class, $prefix);
// Once we have the class and method name, we can build the Closure to resolve
// the instance out of the IoC container and call the method on it with the
// given arguments that are passed to the Closure as the composer's data.
return function () use ($class, $method) {
return $this->container->make($class)->{$method}(...func_get_args());
};
}
/**
* Parse a class based composer name.
*
* @param string $class
* @param string $prefix
* @return array
*/
protected function parseClassEvent($class, $prefix)
{
return Str::parseCallback($class, $this->classEventMethodForPrefix($prefix));
}
/**
* Determine the class event method based on the given prefix.
*
* @param string $prefix
* @return string
* @param \Closure|string $listener
* @param bool $wildcard
* @return \Closure
*/
public function makeListener($listener, $wildcard = false)
{
if (is_string($listener)) {
return $this->createClassListener($listener, $wildcard);
}
if (is_array($listener) && isset($listener[0]) && is_string($listener[0])) {
return $this->createClassListener($listener, $wildcard);
}
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return $listener($event, $payload);
}
return $listener(...array_values($payload));
};
}
/**
* Create a class based listener using the IoC container.
*
* @param string $listener
* @param bool $wildcard
* @return \Closure
*/
public function createClassListener($listener, $wildcard = false)
{
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return call_user_func($this->createClassCallable($listener), $event, $payload);
}
$callable = $this->createClassCallable($listener);
return $callable(...array_values($payload));
* @param bool $halt
* @return array|null
*/
public function dispatch($event, $payload = [], $halt = false)
{
// When the given "event" is actually an object we will assume it is an event
// object and use the class as the event name and this event itself as the
// payload to the handler, which makes object based events quite simple.
[$event, $payload] = $this->parseEventAndPayload(
$event, $payload
);
if ($this->shouldBroadcast($payload)) {
$this->broadcastEvent($payload[0]);
}
$responses = [];
foreach ($this->getListeners($event) as $listener) {
$response = $listener($event, $payload);
// If a response is returned from the listener and event halting is enabled
// we will just return this response, and not call the rest of the event
// listeners. Otherwise we will add the response on the response list.
if ($halt && ! is_null($response)) {
return $response;
}
// If a boolean false is returned from a listener, we will stop propagating
// the event to any further listeners down in the chain, else we keep on
// looping through the listeners and firing every one in our sequence.
if ($response === false) {
break;
}
$responses[] = $response;
}
return $halt ? null : $responses;
}
protected function addEventListener($name, $callback)
{
if (Str::contains($name, '*')) {
$callback = function ($name, array $data) use ($callback) {
return $callback($data[0]);
};
}
$this->events->listen($name, $callback);
}
/**
* Call the composer for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callComposer(ViewContract $view)
{
$this->events->dispatch('composing: '.$view->name(), [$view]);
}
/**
* Call the creator for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callCreator(ViewContract $view)
{
$this->events->dispatch('creating: '.$view->name(), [$view]);
}
}
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<?php $__env->startSection('content'); ?>
<?php while(have_posts()): ?> <?php (the_post()); ?>
<?php echo $__env->first(['partials.content-single-' . get_post_type(), 'partials.content-single'], \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>
<?php endwhile; ?>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?><?php /**PATH /home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php ENDPATH**/ ?>
/**
* Get the evaluated contents of the view at the given path.
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/storage/framework/views/eb422c8beb3d93cfa2fe08ce3b438f23bc0fae21.php"
*
* @param string $path
* @param array $data
* @return string
*/
public function get($path, array $data = [])
{
$this->lastCompiled[] = $path;
// If this given view has expired, which means it has simply been edited since
// it was last compiled, we will re-compile the views so we can evaluate a
// fresh copy of the view. We'll pass the compiler the path of the view.
if ($this->compiler->isExpired($path)) {
$this->compiler->compile($path);
}
// Once we have the path to the compiled file, we will evaluate the paths with
// typical PHP just like any other templates. We also keep a stack of views
// which have been rendered for right exception messages to be generated.
$results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data);
array_pop($this->lastCompiled);
return $results;
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
$e = new ViewException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
parent::handleViewException($e, $obLevel);
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
* Get the data bound to the view instance.
*
* @return array
*/
public function gatherData()
{
$data = array_merge($this->factory->getShared(), $this->data);
foreach ($data as $key => $value) {
if ($value instanceof Renderable) {
$data[$key] = $value->render();
}
}
return $data;
}
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<!doctype html>
<html <?php language_attributes(); ?>>
<?php echo \Roots\view(\Roots\app('sage.view'), \Roots\app('sage.data'))->render(); ?>
</html>
}
break;
}
}
if ( ! $template ) {
$template = get_index_template();
}
/**
* Filters the path of the current template before including it.
*
* @since 3.0.0
*
* @param string $template The path of the template to include.
*/
$template = apply_filters( 'template_include', $template );
if ( $template ) {
include $template;
} elseif ( current_user_can( 'switch_themes' ) ) {
$theme = wp_get_theme();
if ( $theme->errors() ) {
wp_die( $theme->errors() );
}
}
return;
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/index.php"
<?php
/**
* Loads the WordPress environment and template.
*
* @package WordPress
*/
if ( ! isset( $wp_did_header ) ) {
$wp_did_header = true;
// Load the WordPress library.
require_once __DIR__ . '/wp-load.php';
// Set up the WordPress query.
wp();
// Load the theme template.
require_once ABSPATH . WPINC . '/template-loader.php';
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-includes/template-loader.php"
<?php
/**
* WordPress View Bootstrapper
*/
define('WP_USE_THEMES', true);
require __DIR__ . '/wp/wp-blog-header.php';
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-blog-header.php"
Key | Value |
query_vars | array:3 [ "page" => "" "name" => "how-to-create-a-self-tape" "category_name" => "blog" ] |
query_string | "name=how-to-create-a-self-tape&category_name=blog"
|
request | "blog/how-to-create-a-self-tape"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=how-to-create-a-self-tape&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "how-to-create-a-self-tape" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "how-to-create-a-self-tape" "category_name" => "blog" "error" => "" "m" => "" "p" => 0 "post_parent" => "" "subpost" => "" "subpost_id" => "" "attachment" => "" "attachment_id" => 0 "pagename" => "" "page_id" => 0 "second" => "" "minute" => "" "hour" => "" "day" => 0 "monthnum" => 0 "year" => 0 "w" => 0 "tag" => "" "cat" => "" "tag_id" => "" "author" => "" "author_name" => "" "feed" => "" "tb" => "" "paged" => 0 "meta_key" => "" "meta_value" => "" "preview" => "" "s" => "" "sentence" => "" "title" => "" "fields" => "" "menu_order" => "" "embed" => "" "category__in" => [] "category__not_in" => [] "category__and" => [] "post__in" => [] "post__not_in" => [] "post_name__in" => [] "tag__in" => [] "tag__not_in" => [] "tag__and" => [] "tag_slug__in" => [] "tag_slug__and" => [] "post_parent__in" => [] "post_parent__not_in" => [] "author__in" => [] "author__not_in" => [] "search_columns" => [] "ignore_sticky_posts" => false "suppress_filters" => false "cache_results" => true "update_post_term_cache" => true "update_menu_item_cache" => false "lazy_load_term_meta" => true "update_post_meta_cache" => true "post_type" => "" "posts_per_page" => 10 "nopaging" => false "comments_per_page" => "50" "no_found_rows" => false "order" => "DESC" ] |
meta_query | WP_Meta_Query {#2559} |
queried_object | WP_Post {#2560} |
queried_object_id | 29447
|
request | """ SELECT wp_posts.*\n \t\t\t\t\t FROM wp_posts \n \t\t\t\t\t WHERE 1=1 AND wp_posts.post_name = 'how-to-create-a-self-tape' AND wp_posts.post_type = 'post'\n \t\t\t\t\t \n \t\t\t\t\t ORDER BY wp_posts.post_date DESC\n \t\t\t\t\t """ |
post_count | 1
|
in_the_loop | true
|
current_comment | -1
|
found_posts | 1
|
is_single | true
|
is_singular | true
|
Key | Value |
ID | 29447
|
post_author | "2"
|
post_date | "2023-02-13 00:00:00"
|
post_date_gmt | "2023-02-13 00:00:00"
|
post_content | """ <img src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2023/03/9V2A3271-scaled.jpg" alt="self tape how to" width="670" height="447" class="alignnone size-medium wp-image-27720" />\n </br>\n \n Self-tape auditions have been around for a long time, but the pandemic made them more prevalent and more important than ever. During lockdown, casting agents turned to self-tapes as a safe but still highly effective alternative to in-person auditions. Flash-forward to the end of 2022, and it's clear that self-tapes are here to stay. In fact, they’ve become the new industry standard!\n \n But what does that mean for you as an actor? \n \n Well, on the one hand, self-tapes present you with a new and dynamic method for showcasing your talents – one that is free from the constraints and pressures of an in-person audition. On the other hand, self-tapes bring about new challenges. They require both technical know-how and a highly self–assured performance style.\n \n Whether you view self-tapes as an exciting opportunity or a daunting challenge, one thing has become abundantly clear: if you're an actor looking to stand out, mastering both the production and performance elements of a self-tape audition is a must. \n \n In this blog post, we’ll guide you through the key production and performance elements required to nail your next self-tape audition.\n \n \n \n <h1>What is a self-tape audition? </h1>\n \n <strong>A self-tape is a specific kind of acting audition in which an actor records their performance at home and submits it to casting directors and other industry professionals for later viewing.</strong> Of course, it differs greatly from a traditional in-person audition as it is conducted entirely remotely, and typically from the comfort of one’s own home. \n \n \n \n <h1>What makes for a good self-tape acting audition?</h1>\n \n \n A great self-tape audition combines high-quality <em>production</em> with a high-impact <em>performance</em>. So, nailing both these elements is critical if you want your audition to stand out against the competition. \n \n <h1>Production Elements You Must Consider For Your Self-Tape</h1>\n \n When it comes to producing a self-tape, the key is to make sure that your video looks as close to a professional recording as possible. You want to make sure casting directors can focus 100% on your stellar performance, so your self-tape should be clear, crisp, and completely <em>distraction-free</em>.\n \n Of course, your ability to achieve this kind of high-quality recording will be contingent on the effort you put into your self-tape set-up. Make sure to get it right!\n \n </br>\n <em><strong>Set up the perfect self-tape frame</strong></em>\n \n To make your video look professional, setting up the right frame for your self-tape audition is essential. To do this, you'll need to ensure that you have the right camera and lens combination. We recommend using a tripod and a DSLR camera with a zoom lens. If you're using a smartphone, make sure that it is securely mounted and that your device’s camera resolution has been <a href="https://www.pcmag.com/how-to/how-to-change-the-default-camera-settings-on-your-iphone" rel="noopener" target="_blank">switched to maximum in your settings</a>. \n \n Either way, you want to create a tight shot that goes from your chest to just over the top of your head – known as a medium close-up. This will ensure that your facial expressions and body language are clearly visible. In addition, be sure to avoid giving yourself a “haircut” by providing ample room above the top of your head. And whatever you do, always be sure that your head and shoulders are at the center of the frame!\n \n Once your frame is set, stick with it throughout the entire duration of your audition, except if you're also shooting a new <a href="https://www.backstage.com/magazine/article/how-to-slate-in-an-audition-72708/" rel="noopener" target="_blank">full-body slate</a>. \n </br>\n <em><strong>Choose the right eye line</strong></em>\n \n Once you’ve set your frame you will need to choose an appropriate eye line. For those unfamiliar, an eye line is a fixed point that you will look at while performing your audition. \n \n When choosing your eye line, consider the scene and what actions you are performing. Ask yourself:\n \n \n \t<p style="padding-left:25px">• Is this a more serious or comedic scene? </p>\n \n \t<p style="padding-left:25px">• Do you need to direct your gaze outwards, past the camera?</p>\n \n \t<p style="padding-left:25px">• Or should you be looking toward a specific person that you're conversing with? </p>\n </br>\n \n Answering these questions can help you decide where to place your eye line and how it will affect your overall performance. In most cases, you shouldn’t look directly at the camera for your self-tape. You’ll want to look slightly off-camera, to create a natural scene. But remember, once you’ve picked your eye line, keep it consistent through your entire performance! We recommend physically marking a spot so you never lose track. \n \n </br>\n <em><strong>Light your self-tape audition like a pro</strong></em>\n \n Nothing will hurt the quality of your self-tape production more than poor lighting. And although it can be challenging to light your scene at home, it’s worth the extra effort and attention to detail – casting directors will immediately appreciate that you took the time to properly light your audition. \n \n In terms of affordable home studio lights, there are a variety of options available. For starters, you can use <a href="https://www.digitalcameraworld.com/buying-guides/the-best-led-light-panels" rel="noopener" target="_blank">LED light panels</a> or <a href="https://www.tomsguide.com/best-picks/best-ring-lights" rel="noopener" target="_blank">ring lights</a>. These are both fairly inexpensive and easy to move around as needed. You can also opt for more professional lighting setups such as <a href="https://www.thephoblographer.com/2018/04/25/how-to-use-a-softbox-a-guide-for-the-photographer-new-to-lighting/" rel="noopener" target="_blank">softboxes</a> and spotlights. \n \n That being said, if you're on a tight budget, don’t stress! You can achieve great lighting by creating your own <strong>three-point lighting system</strong> using lamps and other light objects found in your home. To do this follow these steps:\n \n \t<p style="padding-left:25px">1. Set up a <strong>key light</strong> at a 45-degree angle toward the area you will be performing. This light will highlight your face, so it should be the brightest in your setup.</p>\n \n \t<p style="padding-left:25px">2. Set up a <strong>fill light</strong> on the opposite side of your key light. The goal here is to reduce any shadows being produced by the key light while not over-brightening the scene. </p>\n \n \t<p style="padding-left:25px">3. Set up your <strong>backlight</strong>, which should be placed between you and your backdrop. This third light in the setup serves to improve overall visibility while firmly separating your image from the background. </p>\n \n </br>\n https://www.youtube.com/shorts/9d9RRQt7BY0\n </br>\n \n <em><strong>Picking the right backdrop </strong></em>\n \n The backdrop of your self-tape audition can have a big impact on the overall look and feel of your video. Therefore, it’s important to choose one that will complement and not distract from your performance.\n \n A plain wall or a solid-coloured background can work well, as it will allow the focus of the scene to remain on you. In general, avoid using busy or distracting backgrounds, such as walls with patterned or detailed wallpaper. You can also dress your wall in a green or blue fabric to simulate a professional studio setting.\n \n <h1>Self-Tape Performance Tips that Work</h1>\n \n Performing solo in your apartment without feedback can definitely feel a bit awkward at first, especially when agents expect the same level of intensity as an in-person audition. But, because of this, you want to put in the same amount of effort and emotional energy into your self-tape as you would a real audition. \n \n <em>“This is where you're going to have to become your own director,”</em> explains actress Kearsten Johansson, who teaches a <a href="https://www.torontofilmschool.ca/programs/acting-for-film-tv-and-the-theatre-diploma/course-descriptions/" rel="noopener" target="_blank">stand-alone course on self-tape production</a> at the Toronto Film School. \n \n Here are a few performance-focused tips to help you accomplish this. \n </br>\n <em><strong>Memorize your lines</strong></em>\n \n When teaching his students at Toronto Film School, John Tench likes to evoke an old acting adage: <em>“Your script is your best friend."</em>\n \n In light of this, he advises his students to “hang out” with it!\n \n Once you receive your script, you should take it with you everywhere as memorizing your lines is easily one of the most important factors contributing to a successful self-tape performance.\n \n When memorizing your lines, it can be helpful to break them down into manageable chunks. This way, you won’t get overwhelmed by the entire script and will be able to focus on individual sections of dialogue. It can also be useful to practice in front of a mirror or with a friend, as this will allow you to gain some initial feedback on your performance. \n \n Once your lines are memorized, you might find yourself wondering – how many takes should my self-tape be? Here, Kearsten recommends that her students stop recording after just three takes. Otherwise, you risk burning out and hurting your overall performance. \n </br>\n <em><strong>Use a live reader </strong></em>\n \n Working with a live reader during your self-tape acting audition can be an excellent way to create an authentic performance as it allows you to react to an emotionally expressive person. However, it’s important to choose the right person for this role, as they will play an integral part in making sure that your performance is believable and engaging. \n \n Our advice – pick someone you feel very comfortable with and someone who understands the audition process. \n \n When it comes time to work with them, remember that you both have different roles in the audition. You should be focused on creating an emotive and believable performance, while your reader is there to give you cues for lines or action. \n \n In other words, your reader is only there to support your audition, so their delivery of lines and their overall presence should be quite subdued. \n </br>\n <em><strong>Make strong acting decisions </strong></em>\n \n The main difference between a self-tape and an in-person audition is that you are on your own, which means you won’t be receiving any real-time guidance or feedback. So be bold!\n \n For example, a strong character choice will demonstrate your ability to confidently create and portray a character without much direction. When done correctly this will speak to your abilities as an actor while highlighting your commitment to the craft. Plus, it’ll show that you’ve researched the character thoroughly and that you have thoughtfully interpreted their motivations and ambitions.\n \n For some quick inspo, check out Dacre Montgomery’s now-famous self-tape audition for Billy in Stranger Things. Talk about strong choices!\n \n </br>\n https://www.youtube.com/watch?v=cJ1zhq3yNBM\n </br>\n \n <em><strong>Your secret weapon? The environment.</strong></em>\n \n When recording a self-tape audition, you must create a believable environment in the viewer’s mind. In this case, the environment refers to the specific location where the scene is taking place. So make sure to think carefully about your scene’s environment and ask yourself the following questions: \n \n \t<p style="padding-left:25px">• Is the space public or private? </p>\n \n \t<p style="padding-left:25px">• Formal or intimate? </p>\n \n \t<p style="padding-left:25px">• Social or personal? </p>\n \n \t<p style="padding-left:25px">• Are you entering or exiting this scene? </p>\n \n \t<p style="padding-left:25px">• What time of day is it? </p>\n \n </br>\n \n Next, think about all the elements of your performance – your facial expressions, your line delivery, your gestures, your use of props – and make sure they align with the setting of the scene.\n \n If you are really looking to nail this aspect of your audition, we even recommend drawing a bird’s eye map of the scene’s environment in detail, plotting out its various elements such as furniture placement and entrance and exit locations. \n \n <h1>Self-Tapes Are Here To Stay, So Embrace Them</h1>\n \n Love them or loathe them, self-tape auditions are routinely expected in today’s acting world. So, if you're an actor that’s looking to stand out, it’s best you start mastering this remote method of auditioning. \n \n And while there are certainly challenges involved with self-tapes — such as lack of feedback on performances and the requirement of basic production knowledge —they also offer invaluable opportunities and endless flexibility for aspiring actors. \n \n In this blog post, we’ve given you the winning self-tape formula: pair high-quality production with a high-impact performance. We’ve also handed out a variety of insider tips, from how to set your frame and choose the right backdrop to the importance of using a live reader and making strong acting choices. \n \n Now, we encourage you to now go forward and make your audition stand out amidst the sea of submitted self-tapes!\n \n Oh, and one more thing —if you found this article helpful, you should consider <a href="https://create.torontofilmschool.ca/newsletter/" rel="noopener" target="_blank">subscribing to Toronto Film School’s industry-focused newsletter</a> Insider Advantage. Packed with exclusive content and useful industry insights, Insider Advantage is essential reading for anyone looking to make their mark in the world of film and television. \n \n </br> """ |
post_title | "How to Create a Self-Tape Audition That Stands Out"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "closed"
|
post_password | "" |
post_name | "how-to-create-a-self-tape"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:06:47"
|
post_modified_gmt | "2023-03-27 21:06:47"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/how-to-create-a-self-tape-2/"
|
menu_order | 0
|
post_type | "post"
|
post_mime_type | "" |
comment_count | "0"
|
filter | "raw"
|
Key | Value |
SERVER_SOFTWARE | "nginx/1.22.1"
|
REQUEST_URI | "/blog/how-to-create-a-self-tape/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/how-to-create-a-self-tape"
|
HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
HTTP_ACCEPT | "*/*"
|
HTTP_HOST | "dev.tfs.staging.poundandgrain.ca"
|
REDIRECT_STATUS | "200"
|
HTTPS | "on"
|
SERVER_NAME | "dev.tfs.staging.poundandgrain.ca"
|
SERVER_PORT | "443"
|
SERVER_ADDR | "10.0.1.187"
|
REMOTE_PORT | "55643"
|
REMOTE_ADDR | "3.22.248.100"
|
GATEWAY_INTERFACE | "CGI/1.1"
|
SERVER_PROTOCOL | "HTTP/2.0"
|
DOCUMENT_ROOT | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web"
|
DOCUMENT_URI | "/index.php"
|
SCRIPT_NAME | "/index.php"
|
SCRIPT_FILENAME | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/index.php"
|
CONTENT_LENGTH | "" |
CONTENT_TYPE | "" |
REQUEST_METHOD | "GET"
|
QUERY_STRING | "" |
FCGI_ROLE | "RESPONDER"
|
PHP_SELF | "/index.php"
|
REQUEST_TIME_FLOAT | 1731839109.2854
|
REQUEST_TIME | 1731839109
|
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|
Key | Value |
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|