Belle-Ve Bricks

Building Brands,
Brick by Brick.

Hedwig  IMAGE
Hedwig  IMAGE

Hedwig’s Invitation to Fly: A Harry Potter Build with Wings (LEGO 75979)

Trusted by Over 392 Clients
Custom model
Bring Your Idea to Life
hedwig-lego-harry-potter-wizarding-world-75979

Further to Harry Potter’s return in 2018 to Lego’s pantheon of ongoing themes with The Great Hall (75954), LEGO® have pushed the envelope (no pun intended) beyond their range of castles with this kinetic model of Harry’s beloved snowy owl Hedwig, gifted to him on his 11th birthday by Hagrid and icon for the franchise itself.

If you would like have your very own Hedwig this set is available to purchase from:

LEGO US
LEGO UK
Amazon UK
Amazon US

Hedwig 75979 IMAGE 2

John Williams’ memorable main cue for his Harry Potter soundtracks is, in fact, called Hedwig’s Theme, bestowing upon the owl an irreplaceable stature within popular culture in general

Hedwig 75979 IMAGE 3

Aimed at ages 10+ and priced £34.99/$39.99, the main draw of this model is that it sports beautifully-designed and realised wings that not only look authentic but actually move courtesy of their mechanical construction, and operated by a handle which engages the gear mechanism housed within the stand on which the owl is supported.

This is no mere display piece, although, with its striking design and articulated joints, it does serve that aspect quite impressively. Overall, the construction is surprisingly complex with the most taxing phase of the build being the base shaft, comprised of Technic components that forge the gear mechanism which gives Hedwig’s wings their superbly graceful motion.

Hedwig 75979 IMAGE 7

This part would test any child’s problem-solving skills and those of this middle-aged blogger in particular. Intense patience is called for here, which is not only to be rewarded later but absolutely essential in making the build work: if you get this bit wrong, then you’ll be kicking yourself down the line when you find the flow of mechanisms turgid and unwieldy.

The colour scheme of the base with its autumnal brown bordering a concentric, lighter tone gives this feature a hand-crafted wooden look, nicely offset by red and yellow translucent bricks underneath which make it an eye-catching piece.

Hedwig 75979 IMAGE 8

The intersection of the key gears and levers is tricky indeed to align and marry but once the elements are correctly in place, you should achieve a smooth 360 degree motion of the handle to set the gears in motion.

The body of the owl is a robust construct, added to which Technic elements cleverly attach to the wings to give them a remarkably lifelike movement, far surpassing what you might have come to expect.

Hedwig 75979 IMAGE 15

The design of the wings is extraordinary, with a neatly-textured plumage consisting of black and white curved tile pieces in an alternating pattern along with jointed-feathers that allow for some subtle yet surprisingly nimble expression.

Hedwig 75979 IMAGE 16

The wingspan is an impressive 15”/35cm and is in proportion with the rest of the model which stands as an impressive display piece, from beak to tail, at 7.8”/20cm.

Hedwig 75979 IMAGE 17

Similarly, the tail feathers fan out on clip-joints that can be angled to depict a variety of striking looks and measure 6.7”/17cm.

Hedwig 75979 IMAGE 18

The head is surprisingly complicated for such a small piece and fits onto the main body of the owl with a ball and socket attachment that allows for the heat to pivot and tilt quite nicely.

Hedwig 75979 IMAGE 19

The eyes are printed bricks, not stickered, and give Hedwig her owlish character and are surrounded by three white curved quarter tiles, a sloped 1×2 tile and a single curved corner tile. A single black pointed brick gives Hedwig her beak.

Hedwig 75979 IMAGE 20

Hedwig’s chief role in the Harry Potter universe of dispatching the Owl Post is simply conveyed here with her claws angled on hinge joints just above a stickered-envelope bearing the Hogwarts’ seal that attaches to the front on the pillar.

Hedwig 75979 IMAGE 22

The Mini-figure of Harry Potter sits below this, with Harry in his Gryffindor scarf, blue gloves and some nice printing on the back of the torso. Next to him, you get a miniature Hedwig, wings fanned perched upon a golden telescope piece. Together, they strike an iconic image familiar from the first film when Hedwig first alights upon young Harry’s arm.

Hedwig 75979 IMAGE 23

The mini figures come with a detachable base that when added to the main stand, continue its colour scheme.

Hedwig 75979 IMAGE 24

The base is adorned with a classy, stickered name plaque for Hedwig, gold on black, in the Harry Potter font.

Hedwig 75979 IMAGE 25
Hedwig 75979 IMAGE 26

Lego have triumphed here with this addition to their drop of releases during the second half of 2020 and one can only wonder what other innovative models they might have up their sleeves in the future. The kinetic nature of this set marks it out as an unusual delight and what it may lack in playability is more than made up for with the engineered options of its display ability, if you will. This model flies.

Hedwig 75979 IMAGE 27
Hedwig 75979 IMAGE 28

Let us know what you think by dropping a comment below!

<div class="badge-base LI-profile-badge" data-locale="en_US" data-size="large" data-theme="dark" data-type="HORIZONTAL" data-vanity="ferdi-vol" data-version="v1"><a class="badge-base__link LI-simple-link" href="https://www.linkedin.com/in/%E2%9C%85-ferdi-vol-corporate-gifts/?trk=profile-badge"></a></div>
/* Auto generated, hash = 5dceu9kevqjdyuy2uw1atqrsu */
//TODO: Break this file down so that we can actually unit test it.
(function(window) {
  /**
  * Renders all unrendred LinkedIn Badges on the page
  */
  window.LIRenderAll = function () {
    var CALLBACK_NAME     = 'LIBadgeCallback', //Must match callback on helpers.js
        BADGE_NAMES       = '.LI-profile-badge, .LI-entity-badge',
        // TODO -- tracking param for other badge types
        TRACKING_PARAM    = 'profile-badge',
        responsesReceived = 0, //Keeps track of number of responses recieved for proper cleanup when finished
        expectedResponses = 0, //Keeps track of number of responses to expect
        scripts           = [ ], //Keeps track of scripts added for proper cleanup when finished
        childScripts      = {}, //Keeps track of child scripts to render
        badges            = Array.prototype.slice.call(document.querySelectorAll(BADGE_NAMES));

    var i, len, badge, rendered;
    for (i = 0, len = badges.length;  i < len; i++) {
      badge    = badges[i];
      rendered =  badge.getAttribute('data-rendered');
      if (!rendered) {
        expectedResponses++;
        badge.setAttribute('data-rendered', true);
        renderBadge(badge);
      }
    }

    function isCNDomain() {
      if (typeof window !== "undefined") {
        var hostName = window.location && window.location.hostname ||  '';
        return (/linkedin(-ei)?.cn$/).test(hostName);
      }

      return false;
    }

    function generateUrl(isEI) {
      var domainPrefix = isEI ? 'https://badges.linkedin-ei' : 'https://badges.linkedin';
      if (isCNDomain()) {
        return domainPrefix + ".cn/";
      }

      return domainPrefix + ".com/";
    }

    function getBadgeKeyQueryParams(badge) {
      return Array.prototype.slice.call(badge.attributes).filter(function (attr) {
        return attr.name.lastIndexOf('data-key-', 0) !== -1;
      }).map(function (attr) {
        // Most browsers automatically lowercase the attribute name when its being read
        // We are calling lowercase on it again to ensure consistency for any browsers that are lagging behind.
        return encodeURIComponent(attr.name.replace('data-', '').toLowerCase()) + '=' + encodeURIComponent(attr.value);
      });
    }

    /*
    * Renders a single badge on the page
    * @param badge: div element of badge to render
    */
    function renderBadge(badge) {
      var size       = badge.getAttribute('data-size'),
          locale     = badge.getAttribute('data-locale'),
          type       = badge.getAttribute('data-type'),
          theme      = badge.getAttribute('data-theme'),
          vanity     = badge.getAttribute('data-vanity'),
          version    = badge.getAttribute('data-version'),
          isEI       = badge.hasAttribute('data-ei'),
          entity     = badge.getAttribute('data-entity'),
          isCreatePage = badge.hasAttribute('data-iscreate'),
          uid        = Math.round(1000000 * Math.random()),
          baseUrl = generateUrl(isEI),
          queryParams = [
            'locale=' + encodeURIComponent(locale),
            'badgetype=' + encodeURIComponent(type),
            'badgetheme=' + encodeURIComponent(theme),
            'uid=' + encodeURIComponent(uid),
            'version=' + encodeURIComponent(version)
          ],
          url;

      if (version === 'v2') {
        baseUrl += 'view';
        queryParams.push('badgesize=' + encodeURIComponent(size));
        queryParams.push('entity=' + encodeURIComponent(entity));
        queryParams = queryParams.concat(getBadgeKeyQueryParams(badge));
      } else {
        baseUrl += 'profile';
        queryParams.push('maxsize=' + encodeURIComponent(size));
        queryParams.push('trk=' + encodeURIComponent(TRACKING_PARAM));
        queryParams.push('vanityname=' + encodeURIComponent(vanity));
      }

      if (isCreatePage) {
        queryParams.push('fromCreate=true');
      }

      url = baseUrl + '?' + queryParams.join('&');
      badge.setAttribute('data-uid' , uid);
      jsonp(url); //Calls responseHandler when done
    }

    /**
    * Handles a response from the server. Finds badge matching badgeUid and inserts badgeHtml there
    * @param badgeHtml: String representing contents of the badge
    * @param badgeUid: UID of the badge to target
    **/
    function responseHandler(badgeHtml, badgeUid) {
      responsesReceived ++;

      var i, badge, uid, isCreate;
      var defaultWidth = 330 // max possible width
      var defaultHeight = 300 // max possible height

      for (i = 0, len = badges.length; i < len; i++) {
        badge = badges[i];
        // isCreate needed to prevent reloading artdeco script tag
        isCreate = badge.getAttribute('data-iscreate');
        uid   = parseInt(badge.getAttribute('data-uid'), 10);
        if (uid === badgeUid) {
          var badgeMarkup = `<body>${badgeHtml}</body>`
          var iframe = document.createElement('iframe');
          iframe.onload = function() {
            var iframeBody = iframe.contentWindow.document.body;
            // 5 px buffer to avoid the badge border being cut off.
            iframe.setAttribute('height', (iframeBody.scrollHeight || defaultHeight) + 5);
            iframe.setAttribute('width', (iframeBody.scrollWidth || defaultWidth) + 5);
          };
          iframe.setAttribute('frameBorder', '0');
          iframe.style.display = 'block';
          badge.appendChild(iframe);
          iframe.contentWindow.document.open();
          iframe.contentWindow.document.write(badgeMarkup);
          iframe.contentWindow.document.close();
          replaceScriptTags(badge, isCreate);
        }
      }
      tryClean();
    }

  // These functions are needed because badge markup is added via innerHtml property which does not run script tags
  function replaceScriptTags(node, isCreate) {
    if (shouldReplaceNode(node, isCreate)) {
      node.parentNode.replaceChild(cloneScriptNode(node), node);
      childScripts[node.src] = true;
    } else {
      var i = 0,
          children = node.childNodes;
      while (i < children.length) {
        replaceScriptTags(children[i++], isCreate);
      }
    }
    return node;
  }

  function shouldReplaceNode(node, isCreate) {
    return isScriptNode(node) && !childScripts[node.src] && (!isCreate || (isCreate && !node.getAttribute('data-isartdeco')));
  }

  function isScriptNode(node) {
    return node.tagName === 'SCRIPT';
  }

  function cloneScriptNode(node){
    var script  = document.createElement("script");
    for( var i = node.attributes.length-1; i >= 0; i-- ) {
      script.setAttribute( node.attributes[i].name, node.attributes[i].value );
    }
    return script;
  }

    // Gets all incoming responses
    window[CALLBACK_NAME] = responseHandler;

    /**
    * Tries to clean added tags
    **/
    function tryClean() {
      //Clean up after all requests are done..
      //Accounts for people including script more than once
      var done = (responsesReceived >= expectedResponses && expectedResponses > 0) || responsesReceived >= badges.length;
      if (done) {
        delete window[CALLBACK_NAME];

        // remove all script tags
        scripts.map(function(script){
          document.body.removeChild(script);
        });

      }
    }

    /*
    * Makes Jsonp request, responses handles by CALLBACK_NAME
    * @param url String: url of server to make request to
    */
    function jsonp(url) {
      var script = document.createElement('script');
      script.src = url;
      scripts.push(script);
      document.body.appendChild(script);
    }
  };

  if (document.readyState === 'complete') {
    window.LIRenderAll();
  } else {
    window.addEventListener('load', window.LIRenderAll, false);
  }

})(window);
Popular Posts