Inspiring Stories and Photos .

Introducing All About Our Self.

  • Share and connect with the Flickr Community.

  • Stunning photos made easy.

  • All your pictures in one place.

Share and connect with the Flickr Community. Discover billions of beautiful photos.

Become obsessed with our social feed of daily inspiration from the photographers you follow. Explore Flickr to easily find everything you're interested in. Join the world's largest photography community, discover billions of beautiful photos and share your own.

Stunning photos made easy.

Our powerful mobile camera makes it easy to take expert photos in high resolution. Free professional editing tools and live filters let you refine your pictures in real-time. Record HD video to capture all your moments.

All your pictures in one place.

On Flickr, everyone gets 1000GB of free storage, enough space for more than 500,000 photos. Our powerful search technology means you can find them anytime you want. No matter where you are, automatically sync your phone's photos to Flickr. Now you can save a lifetime of memories in one place.

F.config = F.util.clone(yconf); YUI(yconf).use(function (Y) { page_timing.js_assets_end = new Date().getTime(); Y.use('node', 'dom', 'anim', 'rapid-tracker', 'nav-selecta-rapid', 'cookie', function(Y) { /** * Howdy. Did I mention we're hiring? Because we are. ;) * http://flickr.com/jobs/ */ var winloc = window.location.toString(); var css = { disabled: 'disabled', enabled: 'enabled', mobile: 'mobile', notEmpty: 'not-empty', visible: 'visible', yoohooOverHere: 'yoohoo-over-here' }; var windowInnerWidth; var windowInnerHeight; var bodyOffsetHeight; var dotsNavItems = document.querySelectorAll('.sohp-dots-nav li'); var lastDotNavItem; var sohp = Y.one('#sohp-2014'); var frames = Y.all('.sohp-section'); var frameHeights = []; var maxSections = frames.size(); // whether ads are present on the page, or not var adEnabled = (0 || 0); // presumed true until otherwise. var hasAd = true; // if there's no ad in section 0, it will be hidden from view and minSection will be 1. var minSection = 0; var sectionBodies = Y.all('.sohp-section-bd'); var scrollAnimation; var lastScrollTimestamp = new Date(); var upArrowLink = Y.one('#up-arrow-link'); var upArrowUI = Y.one('#up-arrow-ui'); var downArrowLink = Y.one('#down-arrow-link'); var downArrowUI = Y.one('#down-arrow-ui'); var downloads = Y.one('#sohp-downloads'); var overlayWrapper = Y.one('#section-stunning-overlay'); var overlayWrapperVisible = false; var overlays = { graphite: Y.one('#section-stunning-graphite'), icedTea: Y.one('#section-stunning-iced-tea'), throwback: Y.one('#section-stunning-throwback') }; var backgrounds = [Y.one('#background-noblur'), Y.one('#background-blur'), Y.one('#background-superblur')]; var backgroundOpacity = [1,0,0]; var backgroundParallax = Y.one('#background-parallax'); var amount = 0; var lastAmount = 0; var searchField = Y.one('#search-field'); // some browsers prefer scrollTop applied to documentElement, others prefer document.body. var scrollElement = (navigator.userAgent.match(/firefox|trident/i) ? document.documentElement : document.body); // various UA sniffing, mostly for performance or minor UI quirks. var isWebkit = (navigator.userAgent.match(/webkit/i)); var isSafari = (navigator.userAgent.match(/safari/i) && !navigator.userAgent.match(/chrome/i)); var isFirefox = (navigator.userAgent.match(/firefox/i)); var isOldIE = (navigator.userAgent.match(/msie 8/i)); var isIE9 = (navigator.userAgent.match(/msie 9/i)); var isMobile = (navigator.userAgent.match(/iphone|ipad|android|silk|mobile/i)); var isWinXP = (navigator.userAgent.match(/windows nt 5/i)); var allowMobile = (winloc.match(/allowmobile/i)); var useBlur = (!winloc.match(/noblur/i)); var scrollTop; var useParallax; // for now, everybody gets in on the fun; why not. useParallax = true; // allow URL-based overrides if (useParallax && winloc.match(/noparallax/i)) { useParallax = false; } else if (!useParallax && winloc.match(/parallax/i)) { useParallax = true; } var forceScale3D = winloc.match(/scale3d/i); var useIncrementalScroll = (winloc.match(/incrementalscroll/i)); // exclude mobile (iOS, etc.) from zoom as the UI may go haywire. var useZoom = (!isOldIE && !isIE9 && !isMobile && !winloc.match(/nozoom/i)); var useScroll = (!winloc.match(/noscroll/i)); // Webkit scales fonts up rasterized when using transforms (boourns), but Firefox gets it right (and also doesn't support element.style.zoom.) var useTransformZoom = (navigator.userAgent.match(/firefox|msie/i)); var lastZoomScale = 1; var zoomScaleMin = 1; var zoomScaleMax = 2; var lastParallax; var isRetina; var useScale3D; var didFirstScroll; var animationTimer; var videos = document.getElementsByTagName('video'); var enterEvents = { // these fire after the animation has completed, and the new section is in view. 'section-1': function() { playVideo(1); }, 'section-2': function() { playVideo(2); }, 'section-3': function() { /** * show the special overlays for the "stunning" section * ... ensuring we're actually there when this runs, also. */ if (getCurrentSection() === 3) { if (!overlayWrapperVisible) { overlayWrapper.addClass('visible'); overlayWrapperVisible = true; } } playVideo(3); }, 'section-4': function() { playVideo(4); } }; var leaveEvents = { // these fire when the section begins to animate out. 'section-3': function() { // leaving the "stunning" section - hide the overlays. if (overlayWrapperVisible) { overlayWrapper.removeClass('visible'); overlayWrapperVisible = false; } } }; var videoActions = { /** * given a video ID, provide an array of methods to be called when a certain position is reached. * methods fire once until video ends or is otherwise reset. */ //