<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8391488493129870717</id><updated>2026-04-07T14:23:55.954-07:00</updated><category term="photography"/><category term="anecdotes"/><category term="DTLA"/><category term="product reviews"/><category term="cute"/><category term="development"/><category term="blogging"/><category term="@realpigeonsofla"/><category term="fragrances"/><category term="News"/><category term="best practices"/><category term="feeding"/><category term="psychology"/><category term="updating"/><category term="pigeons"/><category term="lifestyle"/><category term="remote sensing"/><category term="folklore"/><category term="recipes"/><category term="funny"/><category term="mental health"/><category term="ad hoc development"/><category term="art"/><category term="artificial intelligence"/><category term="baby pigeon"/><category term="birdwatching"/><category term="iPadOS"/><category term="illustration"/><category term="tobacco"/><category term="COVID-19"/><category term="abnormal psychology"/><category term="advice"/><category term="google local guides"/><category term="ink brush art"/><category term="updates"/><category term="web apps"/><category term="cottage industry"/><category term="perfumery"/><category term="research"/><category term="south Los Angeles"/><category term="Los Angeles"/><category term="aesthetics"/><category term="homeless"/><category term="how-to"/><category term="humor"/><category term="social ecology"/><category term="vibe coding"/><category term="Central Library"/><category term="Fleeing the iPigeon nest of home"/><category term="Grand Park"/><category term="apps"/><category term="audio apps"/><category term="composition"/><category term="mobile best practices"/><category term="pigeon flocks"/><category term="psychosis"/><category term="real pigeons of Los Angeles"/><category term="Christianity"/><category term="Civic aspirations"/><category term="Perfumer’s Apprentice"/><category term="Pershing Square"/><category term="Stalking"/><category term="allegories"/><category term="community"/><category term="heralds of spring"/><category term="machine learning"/><category term="nuclear watershed"/><category term="product development"/><category term="tech and lifestyle"/><category term="training pigeons"/><category term="Accessibility"/><category term="Apple"/><category term="IoT"/><category term="Riots"/><category term="abuse"/><category term="ad hoc"/><category term="aesthetics practice"/><category term="agriculture"/><category term="amazon.com"/><category term="borderline personality disorder"/><category term="crime"/><category term="ethics"/><category term="gig job economy"/><category term="homesteading"/><category term="material design"/><category term="psychologically sound discourse"/><category term="sustainability"/><category term="tourism"/><category term="2019"/><category term="Google"/><category term="Jay Ammon"/><category term="LAPL"/><category term="abnormal"/><category term="ad marketing"/><category term="beliefs establishment"/><category term="bird feeding"/><category term="curing"/><category term="domains.google"/><category term="fashion"/><category term="gang stalking"/><category term="google local guide"/><category term="graphic design"/><category term="health practices"/><category term="intelligence"/><category term="ipad"/><category term="le lycée francais"/><category term="localization"/><category term="logo"/><category term="perfume"/><category term="personal care"/><category term="pigeon carnivaling"/><category term="product launch"/><category term="proximity marketing"/><category term="social work"/><category term="videos"/><category term="12-steps"/><category term="Android"/><category term="Athleisure"/><category term="Branding"/><category term="ChatGPT"/><category term="Google APIs"/><category term="Home exhibition"/><category term="Liberty Natural"/><category term="Perfumer&#39;s World (Thaïlande)"/><category term="Places"/><category term="Retail"/><category term="Stickers"/><category term="USC"/><category term="Unemployment Insurance (money)"/><category term="adulting"/><category term="animal psychology"/><category term="app wishlist"/><category term="aromatherapy"/><category term="art prints"/><category term="babies"/><category term="cartooning"/><category term="charity"/><category term="cooking"/><category term="craigslist"/><category term="cryptocurrency"/><category term="culture"/><category term="domestic life"/><category term="guano"/><category term="hauls"/><category term="history"/><category term="ionic minerals"/><category term="linguistics"/><category term="made with Google"/><category term="mobile kits"/><category term="morals"/><category term="music"/><category term="narcissism"/><category term="opinion"/><category term="parfumerie"/><category term="persona marketing"/><category term="personas"/><category term="pipe organ"/><category term="provençale"/><category term="public relations"/><category term="social media"/><category term="spring cleaning"/><category term="surveillance"/><category term="top lists"/><category term="trading advice"/><category term="trekking"/><category term="urban wildlife"/><category term="vector graphics"/><category term="war crimes"/><category term="watershed"/><category term="work / life balance"/><category term="workflow"/><category term="2018"/><category term="2020"/><category term="2022"/><category term="2023"/><category term="Armed forces"/><category term="Black Lives Matter"/><category term="Broadway District"/><category term="Cyber Monday"/><category term="Dailies"/><category term="Device management"/><category term="Employment Development Department"/><category term="Facebook"/><category term="Generative AI"/><category term="Google Shopping"/><category term="LAPD"/><category term="Lean (development)"/><category term="Line Art"/><category term="Nicotine inhalers"/><category term="Pakistani high flyer"/><category term="Santa Monica"/><category term="Scientology"/><category term="Snooker"/><category term="Spring"/><category term="Sticker Time"/><category term="Transliterator"/><category term="User Interface"/><category term="Valentine’s Day"/><category term="administration"/><category term="apartment"/><category term="audio monitoring"/><category term="beta"/><category term="chemicals"/><category term="civic quandaries"/><category term="design"/><category term="discourse"/><category term="drug use"/><category term="energy"/><category term="foreign exchange"/><category term="forex"/><category term="genetic modification"/><category term="history (personal)"/><category term="hotspots"/><category term="iOS devices"/><category term="iconography"/><category term="interior design"/><category term="liquid ionic minerals"/><category term="macOS"/><category term="manufacturing processes"/><category term="natural products"/><category term="nesting pigeons"/><category term="nightlife"/><category term="novelties"/><category term="nuclear energy"/><category term="nurturing environment"/><category term="parasites"/><category term="production"/><category term="psychological M&amp;Ms"/><category term="racism"/><category term="recyclables"/><category term="religious symbology"/><category term="reviews"/><category term="scrum"/><category term="sobriety"/><category term="sparrows"/><category term="stalkers"/><category term="summer 2025"/><category term="text-to-speech"/><category term="top app lists"/><category term="transliteration"/><category term="trash dives"/><category term="walk-through"/><category term="wild pigeons"/><category term="winter"/><category term="workspace"/><category term=".institute"/><category term=".webp"/><category term="2021"/><category term="2024"/><category term="AIY"/><category term="African American Community"/><category term="App Store"/><category term="Apple Developer Program"/><category term="Bitcoin"/><category term="Broadway"/><category term="CA"/><category term="California wildfires"/><category term="Cantonese"/><category term="Catholicism"/><category term="Celebrity sighting"/><category term="Chinatown"/><category term="Christians outreach"/><category term="Cloud Platform"/><category term="DIY"/><category term="Dating"/><category term="Developer"/><category term="E-commerce"/><category term="Enterprise"/><category term="European history"/><category term="Google Maps"/><category term="Google My Maps"/><category term="Great Britain"/><category term="Halloween"/><category term="Holiday Season"/><category term="IoTpigeons"/><category term="Locale"/><category term="Manchester overpass"/><category term="Metro Development"/><category term="Music Center"/><category term="Nike"/><category term="Pasadena"/><category term="Pinterest"/><category term="Recycling"/><category term="Seminal works"/><category term="Skid Row"/><category term="SmallBusiness"/><category term="Stubs"/><category term="Target"/><category term="Twitter"/><category term="Twitter Rants"/><category term="Wikipedia"/><category term="Xcode"/><category term="activism"/><category term="adobe"/><category term="amusement park notions"/><category term="astute development"/><category term="audio"/><category term="biopic"/><category term="broadcast"/><category term="chemistry"/><category term="child abuse"/><category term="cleanup"/><category term="coding"/><category term="cold war"/><category term="coronavirus"/><category term="crafts"/><category term="dictaphone"/><category term="distros"/><category term="dumpster pigeons (flock)"/><category term="environmentalism"/><category term="evolution"/><category term="government programs"/><category term="hate crime"/><category term="iBeacon"/><category term="iOS App Store"/><category term="iOS accessibility"/><category term="iPigeon.institute"/><category term="identity"/><category term="instructional"/><category term="laundry lists"/><category term="library"/><category term="love"/><category term="materials science"/><category term="mind control"/><category term="miniatures"/><category term="minority reports"/><category term="mystic Christianity"/><category term="nicotiana"/><category term="observation"/><category term="online exhibition"/><category term="orthographic transliteration"/><category term="paranoia"/><category term="physics"/><category term="pigeon lovers"/><category term="pigeons and friends"/><category term="productivity"/><category term="rehabilitation"/><category term="romantic notions thereof"/><category term="schizophrenia"/><category term="search engines"/><category term="short term trading"/><category term="summer 2018"/><category term="web history"/><category term=".ICU"/><category term=".page"/><category term="2025"/><category term="4th St. Underpass Flock"/><category term="90003"/><category term="AI chats"/><category term="AI-assisted"/><category term="Ad serve"/><category term="Adobe Comp"/><category term="Alpine Linux"/><category term="As-ad hoc have you how bout it identification persona"/><category term="Assissi"/><category term="Attribution"/><category term="Aztec Code"/><category term="Barcode Generator"/><category term="Basis"/><category term="Buddhism"/><category term="CCS (Consolidated Chemical Supply"/><category term="Calendar"/><category term="California"/><category term="Christmas lights (USB)"/><category term="Civil defense apparatus"/><category term="Concentrace"/><category term="Content"/><category term="CoreAudio"/><category term="CryptoTab"/><category term="December"/><category term="Echo Park"/><category term="Eddystone"/><category term="English"/><category term="Francis"/><category term="Franciscan Catholicism"/><category term="Françoise"/><category term="French Music Boxes"/><category term="French onion soup"/><category term="Freudian slips"/><category term="Google Actions"/><category term="Google Gemini"/><category term="Google Labs"/><category term="Google My Business"/><category term="Google Publishing Partners"/><category term="Google Registry"/><category term="Google Voice Kit 2.0"/><category term="Google apps"/><category term="Grand Central"/><category term="Green pine cone"/><category term="Housing Authority of the City of Los Angeles"/><category term="Illustrator"/><category term="ImageFX"/><category term="Java"/><category term="Jews"/><category term="LA Times"/><category term="Late night pizza pigeons"/><category term="Lent"/><category term="Logic Pro"/><category term="Lyme disease"/><category term="MacBook Air (2020)"/><category term="Maguire Gardens"/><category term="My Maps"/><category term="N.A. Meetings"/><category term="Narcotics Anonymous"/><category term="Neighborhood Council"/><category term="Nuclear"/><category term="Of on homie"/><category term="Pandemic Unemployment Award (money)"/><category term="PidginKit"/><category term="Programming"/><category term="Public Works"/><category term="Puff Bar"/><category term="QR Code"/><category term="Ralph&#39;s Grocery"/><category term="Russia"/><category term="Safelink"/><category term="Shopify"/><category term="SmartMike+"/><category term="SprightlySparrowSupposin.jar"/><category term="Starbucks"/><category term="Technology"/><category term="Ticks"/><category term="Trace Minerals Research"/><category term="Tumblr"/><category term="Venice Beach"/><category term="West Hollywood"/><category term="YouTube"/><category term="aa"/><category term="absolutes"/><category term="academic citations"/><category term="acknowledgment"/><category term="adversarial development"/><category term="allegory"/><category term="anthropology"/><category term="arrête"/><category term="art history"/><category term="arts and crafts"/><category term="aside:Enterprise"/><category term="audioKit"/><category term="authenticity"/><category term="autonomy"/><category term="bluetooth"/><category term="breakout composition"/><category term="budget"/><category term="bullying"/><category term="camera"/><category term="cathedrals"/><category term="client-driven needs - business"/><category term="climate change"/><category term="code playgrounds"/><category term="coffee table talk"/><category term="commentary"/><category term="conjecture"/><category term="contributions"/><category term="creative cloud"/><category term="culinary"/><category term="decomposition"/><category term="device feedback"/><category term="dialects"/><category term="discretion"/><category term="displays"/><category term="documentation"/><category term="drama"/><category term="eCommerce"/><category term="early modern period"/><category term="education"/><category term="embedded devices"/><category term="essential oils"/><category term="ethnomusicology"/><category term="events"/><category term="extraction methods"/><category term="farming"/><category term="finery"/><category term="flavor and fragrance industry"/><category term="fletch"/><category term="font"/><category term="found objects"/><category term="fracking"/><category term="free"/><category term="full text"/><category term="games"/><category term="gardening"/><category term="golden hour"/><category term="google cloud platform"/><category term="group homes"/><category term="heraldry"/><category term="homed pigeons"/><category term="homeless resources"/><category term="hospitalization"/><category term="iPigeon"/><category term="identity verification"/><category term="imaengine"/><category term="inflammation"/><category term="inspiration"/><category term="interdisciplinaire"/><category term="international"/><category term="interrogation"/><category term="investments"/><category term="ionic fire"/><category term="jaunt"/><category term="juvenile"/><category term="laptops"/><category term="leadership"/><category term="linear continuity"/><category term="marketing materials"/><category term="materials recycling"/><category term="medical advice"/><category term="middle America"/><category term="milling"/><category term="mining"/><category term="modernism"/><category term="monetization"/><category term="music performance"/><category term="musicianship"/><category term="near death experiences"/><category term="online store"/><category term="open letter"/><category term="open-source"/><category term="opensea"/><category term="organic"/><category term="organics"/><category term="parks"/><category term="paying dues"/><category term="personal tote cart"/><category term="pet pigeons"/><category term="pidgin language"/><category term="pigeon intelligence"/><category term="pigeon rescue"/><category term="pigeon tours"/><category term="pigeon whistling"/><category term="platonic ideals"/><category term="politics"/><category term="pornography"/><category term="professionalism"/><category term="profiles"/><category term="pwn"/><category term="race"/><category term="radiation poisoning"/><category term="raw ingredients"/><category term="reblog"/><category term="relationships"/><category term="repositories"/><category term="repressed memories"/><category term="resonance"/><category term="romance"/><category term="scripting"/><category term="seedlings"/><category term="seedlings.ipigeon.institute"/><category term="seismic activity"/><category term="self help"/><category term="selfie"/><category term="serious fluff"/><category term="settings"/><category term="shopping lists"/><category term="shower buddy speaker listening music -esque"/><category term="sideloading"/><category term="sightings"/><category term="smoking"/><category term="soil ecology"/><category term="soundcloud"/><category term="squirrels"/><category term="strange Latin takes on Roman Empire finery in discourse"/><category term="stub"/><category term="suspended claims"/><category term="sustainable"/><category term="sustinability"/><category term="svn subversion) terminal"/><category term="tech diet"/><category term="text to speech"/><category term="things to do in Los Angeles"/><category term="torture"/><category term="tourist spots"/><category term="unicode"/><category term="utilities"/><category term="violence"/><category term="wars of the British"/><category term="welfare"/><category term="whole foods"/><category term=". AIY"/><category term=". webp"/><category term=".farm"/><category term=".pharma"/><category term=".pharmacy"/><category term="1.1 GHz quad-core"/><category term="13.1"/><category term="3D art"/><category term="6th Step"/><category term="90017"/><category term="90071"/><category term="9th District"/><category term="9th Step"/><category term="AR glasses"/><category term="AR2191-012"/><category term="ARM Linux"/><category term="AUM"/><category term="Adobe Capture"/><category term="Adobe Draw"/><category term="Adolf Hitler"/><category term="Alexis"/><category term="AndLocation"/><category term="Android Things"/><category term="App Engine"/><category term="Apple Books"/><category term="Apple Maps"/><category term="Apple News"/><category term="Apple Store"/><category term="April"/><category term="April 2019"/><category term="Asian fusion (cooking)"/><category term="Assistant SDK"/><category term="AudioBus"/><category term="B. F. Skinner"/><category term="BBC"/><category term="BTC"/><category term="Ballona Wetlands"/><category term="Big Sur"/><category term="BitFunds"/><category term="Black Friday"/><category term="Blogger"/><category term="Boxing Day"/><category term="BuJo (bullet journals)"/><category term="Business Page"/><category term="California African American Museum (CAAM)"/><category term="California LifeLine"/><category term="Calliope"/><category term="Cancer (neck)"/><category term="Carnival"/><category term="Carol Twombly"/><category term="Census"/><category term="Cheesemaking"/><category term="China"/><category term="Choetech"/><category term="Christmas"/><category term="Ciggies World"/><category term="Coachella"/><category term="Coinbase"/><category term="Coral"/><category term="Creating Perfume Store"/><category term="Crocker St."/><category term="DJ’ing"/><category term="Department of Transportation"/><category term="Discounts"/><category term="Donald Trump"/><category term="Easter"/><category term="Easter Eggs"/><category term="Eden Botanicals"/><category term="El Sequndo"/><category term="Elevation Terpenes"/><category term="Ernst &amp; Young"/><category term="Ethereum"/><category term="Euclid"/><category term="FAQ"/><category term="FigAt7th"/><category term="Firebase"/><category term="Florence"/><category term="Food4Less"/><category term="François-proto-indus-belarasiusitique"/><category term="French Africa"/><category term="Fuchai 200W"/><category term="Full Service Partnership"/><category term="GIS"/><category term="Geek Bar"/><category term="Gelson&#39;s"/><category term="General Relief"/><category term="Glendale"/><category term="Gnome"/><category term="Google AdSense"/><category term="Google Analytics"/><category term="Google Assistant"/><category term="Google Coral"/><category term="Google Mobile Services"/><category term="Google Partners"/><category term="Google Workspace’s NotebookLM Plus"/><category term="Grecian Urns"/><category term="Green Monday"/><category term="Gsuite"/><category term="HDR"/><category term="HTML"/><category term="HUmineral"/><category term="Halo"/><category term="Harbor Freeway"/><category term="HashNest"/><category term="Hermes (Paris)"/><category term="Hermitage Oils"/><category term="Hindi Russian"/><category term="Homebrew"/><category term="Hong Kong"/><category term="Hot Pepper Poblano"/><category term="Institute Founding Director : (iPigeon)"/><category term="Interim Housing Program (IHP)"/><category term="Ireland"/><category term="Jewish angelic lore figure"/><category term="Jewish folklore"/><category term="Journal Article of the Day"/><category term="Kendall’s"/><category term="KiSS concert"/><category term="Kirsty Godso"/><category term="Kroger Wireless"/><category term="Kunstkamera"/><category term="LA Superior Court LASC"/><category term="LACDMH"/><category term="LGBT"/><category term="LTR"/><category term="Lark"/><category term="LifeLine"/><category term="Linux on iPadOS"/><category term="Los Angeles City Hall"/><category term="Los Angeles River"/><category term="Los Angeles. mayoral race"/><category term="Ltd.)"/><category term="MIA pigeons"/><category term="MIR"/><category term="Mac Catalyst"/><category term="Magenet Corkea"/><category term="Maison Margiela"/><category term="Maps"/><category term="Mark Twain Library"/><category term="May 2"/><category term="Medi-Cal"/><category term="Melrose"/><category term="Minneapolis"/><category term="Monet (artist)"/><category term="Multimine"/><category term="My Places API"/><category term="NCBI"/><category term="NFTs"/><category term="NYE"/><category term="Nano"/><category term="Narayanan"/><category term="Natalie Portman"/><category term="Natural History Museum"/><category term="Neuronify (app)"/><category term="Nick Rout"/><category term="Nordstrom&#39;s"/><category term="Nordstrom’s"/><category term="Normandie"/><category term="North Hollywood Metro Station"/><category term="Notebook"/><category term="Notebook LM Plus"/><category term="NotebookLM"/><category term="Nursery"/><category term="OANDA"/><category term="Olvera Street"/><category term="Osprey"/><category term="Ozempic Face"/><category term="PBS"/><category term="Pandemic"/><category term="Pandemic Unemployment Award"/><category term="Paul Holman"/><category term="Perfumer Supply House"/><category term="Photoshop"/><category term="Pico Station"/><category term="Pigeonetics"/><category term="Piotr"/><category term="Play Store"/><category term="Playlists"/><category term="Pope"/><category term="Poshmark"/><category term="President George Bush"/><category term="Prime Day"/><category term="Privacy policy"/><category term="Renegade Craft Fair"/><category term="Richard Branson"/><category term="SIGINT"/><category term="SPDY"/><category term="STEM"/><category term="San Gabriel Valley"/><category term="San Onofre Power Plant"/><category term="Scotland"/><category term="Scottish"/><category term="Seagulls"/><category term="Section 8 Housing"/><category term="Seed"/><category term="September 11th"/><category term="Server"/><category term="Silicon Beach"/><category term="Sophorxa"/><category term="South Bay"/><category term="Summer 2020"/><category term="Suorin"/><category term="Telecare Service Area 4"/><category term="Temu"/><category term="Terms of Service"/><category term="Tetrachord"/><category term="Texas cedarwood"/><category term="Thanksgiving"/><category term="The Elements"/><category term="Thunderbolt 3"/><category term="Tim Gunn"/><category term="Tovusound"/><category term="Trump Administration"/><category term="Tumblers"/><category term="UI Online"/><category term="UNIX"/><category term="USA Today"/><category term="Ukraine conflict"/><category term="Union Station"/><category term="Universal Apps"/><category term="Universal City / Studio City Metro Station"/><category term="University of Utah"/><category term="Viture"/><category term="WWDC 2019"/><category term="Wal-Mart"/><category term="WalMart.com"/><category term="Wall Street Journal"/><category term="Weather"/><category term="Web Audio API"/><category term="WebFonts"/><category term="Wegovy (semaglutide)"/><category term="Westlake"/><category term="Windrunner"/><category term="XR glasses"/><category term="XiaoLaJiao Technology Co. Ltd. (XLJ)"/><category term="ZIP code"/><category term="a priori"/><category term="accessories"/><category term="addiction"/><category term="admin"/><category term="affirmative action"/><category term="alkaloids"/><category term="alluvial flow"/><category term="alphabet"/><category term="anecdote"/><category term="anniversary"/><category term="anthrozoopology"/><category term="appengine"/><category term="architecture"/><category term="ask iPigeon.institute"/><category term="audio toolbox"/><category term="augmented reality"/><category term="aura cacia"/><category term="auteur"/><category term="authorship"/><category term="autotools"/><category term="baby birds"/><category term="bagpipes"/><category term="barter"/><category term="baseness"/><category term="bash"/><category term="beaconing"/><category term="becture"/><category term="bees"/><category term="beeswax absolute"/><category term="bell-curve statistics"/><category term="big tech"/><category term="bioethics"/><category term="biotech"/><category term="bird baths"/><category term="birthdays"/><category term="biscoff cookie butter"/><category term="blog series"/><category term="bore drilling"/><category term="breeding season"/><category term="brexit"/><category term="buffalo"/><category term="care"/><category term="carnation"/><category term="cars"/><category term="caveat"/><category term="chargers"/><category term="chatbots"/><category term="childrens book"/><category term="cigarettes"/><category term="classroom activities"/><category term="click work"/><category term="clicker"/><category term="cloud-printing"/><category term="coconut oil"/><category term="coconut shells"/><category term="college days"/><category term="command line interface"/><category term="command line interface (CLI) TestFlight"/><category term="commitments"/><category term="confessions"/><category term="confīte"/><category term="convent"/><category term="cookinng"/><category term="cooling stations"/><category term="corporate"/><category term="cosmetics"/><category term="costume ideas"/><category term="cowboy hat pigeon"/><category term="credit cards"/><category term="critical analysis"/><category term="crocheting 🧶"/><category term="currency"/><category term="current events"/><category term="cytokine storm"/><category term="dalliancedujour"/><category term="darpa"/><category term="dashbot.io"/><category term="data science"/><category term="data throttling"/><category term="day trading"/><category term="deaths"/><category term="delusions"/><category term="desktop"/><category term="detoxification"/><category term="developlment"/><category term="dictation"/><category term="digital art"/><category term="dingo and pigeon"/><category term="disasters"/><category term="documentaries"/><category term="drainage"/><category term="délégation"/><category term="ePub"/><category term="easter sunday 2019"/><category term="edits"/><category term="elections"/><category term="end-of-month"/><category term="endless punchline mock-up"/><category term="engineering"/><category term="entropy"/><category term="essentials"/><category term="ether"/><category term="ethnobotany"/><category term="existent persona fletch as-handed: ad hoc to the tête-à-tête a bit of pigeons about it take"/><category term="experiments"/><category term="external monitors"/><category term="fallacies"/><category term="fan art"/><category term="feminism"/><category term="first five"/><category term="fixies"/><category term="flambeaux"/><category term="flavors"/><category term="floral"/><category term="folk art"/><category term="food banks"/><category term="for sale"/><category term="formative cause"/><category term="free phone service"/><category term="gRPC"/><category term="gallery"/><category term="gaming development"/><category term="gas"/><category term="gas chromatography mass spectrometry (GCMS) analysis"/><category term="genetics"/><category term="geotagging"/><category term="git"/><category term="giveaways"/><category term="government phones"/><category term="grammar"/><category term="greatest kicks of futbol"/><category term="greening"/><category term="gucci"/><category term="hacla.org"/><category term="hard freeze"/><category term="harmonics"/><category term="hash"/><category term="headspace fragrances"/><category term="heat wave"/><category term="high-flying"/><category term="highlanders"/><category term="hitler"/><category term="hope"/><category term="horticulture"/><category term="hubs"/><category term="humic and fulvic acid minerals"/><category term="hummingbird"/><category term="iBook Author"/><category term="iBooks Author"/><category term="iMessage"/><category term="iOS"/><category term="iPhone 11 Pro Max"/><category term="iPigeon Aroma Company"/><category term="iPod touch"/><category term="iSH"/><category term="iTunes"/><category term="iTunes Connect"/><category term="icu"/><category term="idiot deluxe"/><category term="idle games"/><category term="incense"/><category term="informational"/><category term="ink brush"/><category term="inner Child"/><category term="integrity"/><category term="interior decoration"/><category term="internationalization"/><category term="involuntary"/><category term="ionic calcium"/><category term="ionization"/><category term="ipigeon.coop"/><category term="isomorphic"/><category term="jackets"/><category term="jealousy"/><category term="jet stream"/><category term="jetstream"/><category term="jogging"/><category term="journaling"/><category term="keyboards"/><category term="late-night"/><category term="late-night crowd"/><category term="lavalier"/><category term="laws of attraction"/><category term="le"/><category term="lenses"/><category term="lesson plans"/><category term="licensure"/><category term="licorice"/><category term="linux"/><category term="literature"/><category term="local business"/><category term="lore"/><category term="lost and found"/><category term="making amends"/><category term="malpractice"/><category term="marijuana dispensary"/><category term="markdown"/><category term="markup"/><category term="maslow&#39;s hierarchy"/><category term="mathematics"/><category term="meddling"/><category term="medieval Renaissance"/><category term="memes"/><category term="men as lovers of men"/><category term="meritocracy"/><category term="met ström"/><category term="metatron"/><category term="microphones"/><category term="microtonality"/><category term="milestones"/><category term="military"/><category term="mission statement"/><category term="mophie (chargers)"/><category term="musical instruments"/><category term="natural cures for Lyme disease"/><category term="natural lighting"/><category term="natural medicine"/><category term="natural order"/><category term="nazis"/><category term="naztech"/><category term="needs-driven"/><category term="neural networks"/><category term="nitrogen cycle"/><category term="node-based (UI; apps)"/><category term="nuclear power"/><category term="object oriented design"/><category term="objectivism"/><category term="oil drilling"/><category term="online"/><category term="outdoor dining"/><category term="outdoors"/><category term="package manager"/><category term="paintings"/><category term="parking lots"/><category term="performances"/><category term="pesticides"/><category term="philosophy"/><category term="phonetics"/><category term="phot"/><category term="pidgin cheese"/><category term="pidginHub.app"/><category term="pigeon arrête"/><category term="pigeon fashion"/><category term="pigeon island"/><category term="pigeon pox"/><category term="pigeon vacations"/><category term="pigeon-checking"/><category term="pigeonHugs.me"/><category term="pigeons on hiatus"/><category term="pine tree"/><category term="placement"/><category term="places API"/><category term="plans"/><category term="plant nurseries"/><category term="podcasts"/><category term="pollution"/><category term="posting"/><category term="power outages"/><category term="previz"/><category term="projects"/><category term="promotions"/><category term="propaganda"/><category term="proximity"/><category term="public health"/><category term="public housing"/><category term="public speaking"/><category term="purification"/><category term="purpose statement"/><category term="qualitative"/><category term="quanta"/><category term="quarreling"/><category term="quotables"/><category term="racing pigeons"/><category term="rainy days"/><category term="rants"/><category term="rational"/><category term="ratios"/><category term="react"/><category term="reclamation"/><category term="reels"/><category term="reference materials"/><category term="reflection"/><category term="rehoming"/><category term="remote work"/><category term="renders"/><category term="rescue birds"/><category term="resins"/><category term="restaurants"/><category term="retrospective"/><category term="return of"/><category term="satellites"/><category term="satire"/><category term="scaling"/><category term="scheduling"/><category term="science"/><category term="sea coal tar"/><category term="self-lighting lightbulb"/><category term="semiotics"/><category term="serialization"/><category term="series"/><category term="shading"/><category term="shell"/><category term="shkirt"/><category term="shoes"/><category term="shutdown"/><category term="sight-seeing"/><category term="signals"/><category term="skin care"/><category term="slow-motion"/><category term="smartphones"/><category term="snacks"/><category term="southlagardens.works"/><category term="speak of"/><category term="speakers"/><category term="specifications"/><category term="standards"/><category term="startup"/><category term="stats"/><category term="status"/><category term="stories"/><category term="street art"/><category term="street scene"/><category term="subsidized phone service"/><category term="summer 2019"/><category term="suppliers"/><category term="survey"/><category term="svp"/><category term="swifts"/><category term="symbols"/><category term="taming pigeons"/><category term="television"/><category term="terrorism"/><category term="tethering"/><category term="the iPigeon.institute brick and walls spot"/><category term="theater"/><category term="therapy"/><category term="threading"/><category term="throwback"/><category term="thrust"/><category term="tiktok"/><category term="to-do’s"/><category term="tonal scales"/><category term="tonality"/><category term="toys"/><category term="traditions"/><category term="transitional living"/><category term="trap house"/><category term="trauma"/><category term="trawling (nomenclature-concurrency)"/><category term="trends"/><category term="tricyclic"/><category term="tropical"/><category term="tutorial"/><category term="typography"/><category term="uncommon"/><category term="unconscious"/><category term="unicorns"/><category term="universal communicative form"/><category term="unnecessary"/><category term="usb-c"/><category term="vanilla"/><category term="vapes"/><category term="visionOS"/><category term="visitors"/><category term="visual media"/><category term="visualization"/><category term="volatility"/><category term="warfare"/><category term="watercolors"/><category term="weight loss"/><category term="weird stuff"/><category term="wildfires"/><category term="windy corridor"/><category term="wish lists"/><category term="zinc"/><category term="№ 2"/><category term="能閑， 句他嶺廿嚟幾油尸， iPad Mini （5th Generation）， Target，Sale， Holiday season，襯魯口及田返問，"/><title type='text'>iPigeon.institute blog</title><subtitle type='html'>Helping make pigeons our friends in Downtown Los Angeles, CA, USA + iPigeon tech, lifestyle, commentary, and art.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>468</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-6020013207870819407</id><published>2026-04-07T09:31:00.000-07:00</published><updated>2026-04-07T14:23:55.871-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="artificial intelligence"/><category scheme="http://www.blogger.com/atom/ns#" term="biotech"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Gemini"/><category scheme="http://www.blogger.com/atom/ns#" term="hauls"/><category scheme="http://www.blogger.com/atom/ns#" term="heralds of spring"/><category scheme="http://www.blogger.com/atom/ns#" term="interior decoration"/><category scheme="http://www.blogger.com/atom/ns#" term="natural medicine"/><category scheme="http://www.blogger.com/atom/ns#" term="photography"/><category scheme="http://www.blogger.com/atom/ns#" term="product development"/><category scheme="http://www.blogger.com/atom/ns#" term="product reviews"/><category scheme="http://www.blogger.com/atom/ns#" term="recipes"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><category scheme="http://www.blogger.com/atom/ns#" term="sparrows"/><title type='text'>Latest Haul: My New Hobby, Woodworking (Product Reviews)</title><content type='html'>&lt;p&gt;&amp;nbsp;So, the last haul that I brought in stirred up some trouble, in the form of a reddening skin condition on my leg. That blog article ended up dovetailing in to the context of this latest haul of mine, the woodworking tools and gear haul for the LED Backlit Sparrow Spiritual Mini Meditation Woodcut Panel project, essentially a reimagined take on a throwback decorative piece that I had in my old apartment and loft.&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz4JdBsBMqmZAACjB96sihOAd-45yR_U-VFKyKJzFO2ewHGb4Yq_7GyQ_IJJRVz4pH4GuvSYVqtNMTvydr-5jmEmcWIEM6Ae-9fUEhZR_13BmkjsXZ9TtPO8l7HL1bx-g4LI42qW-TaTnTkRx70SLP5DaNgub4JLBdGt61fpqSC3FUxCVnSwdNVYCFPjQ/s600/IMG_0560.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;600&quot; data-original-width=&quot;448&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz4JdBsBMqmZAACjB96sihOAd-45yR_U-VFKyKJzFO2ewHGb4Yq_7GyQ_IJJRVz4pH4GuvSYVqtNMTvydr-5jmEmcWIEM6Ae-9fUEhZR_13BmkjsXZ9TtPO8l7HL1bx-g4LI42qW-TaTnTkRx70SLP5DaNgub4JLBdGt61fpqSC3FUxCVnSwdNVYCFPjQ/w478-h640/IMG_0560.jpeg&quot; width=&quot;478&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The original backlit spiritual woodcut panel art piece, which I custom outfitted with a base, glass panel backing, with LED strip lights inside, with stuff from IKEA. The woodcut panel came from Marco Polo Imports, in Santa Monica, now closed. (2011)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4GJJ884wrSHvG_I-womDkiagTkw1QfRN1TtRGFBslW3o-xuG3E4ndiPPZ8OefxUzZhQYu-kaU2VyJH8FdSehzTUu1d9XUKw5F83yASE7AJSwGbu728PN2dzdReS6EIhHI_mxJ3CYdTkVww-AD4HlwIOWUBtb23H9e578DgLhGB4n5l6MOMV8pcKf0b_0/s958/IMG_2589.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;958&quot; data-original-width=&quot;949&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4GJJ884wrSHvG_I-womDkiagTkw1QfRN1TtRGFBslW3o-xuG3E4ndiPPZ8OefxUzZhQYu-kaU2VyJH8FdSehzTUu1d9XUKw5F83yASE7AJSwGbu728PN2dzdReS6EIhHI_mxJ3CYdTkVww-AD4HlwIOWUBtb23H9e578DgLhGB4n5l6MOMV8pcKf0b_0/w634-h640/IMG_2589.jpeg&quot; width=&quot;634&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;My 2026 contextually upcycled new take on a spiritual-themed and decorative meditation backlit wall panel, this time, in miniature form, so that I could accommodate doing the project from within my assisted care living group home housing environment situation.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;The project represents a change of pace, from “whatever” I was doing, previously… I guess it was a bunch of other product hauls and pigeon feeding, for the most part. Anyways, I gave the sparrows a feature part in this concept, as well as the medicinal flower inclusion, symbolizing a transition in to a different hobby, and perhaps some products in development along those lines.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, I initially imagined the mini sparrow woodcut panel, as part of a conceptualized product marketing campaign and branding mockup of ideas and imagery, through consulting heavily with Google Gemini artificial intelligence. I floated the idea of the original woodcut panel, from its origins in Southeast Asia (Indonesia, perhaps), and I wanted the theme to be representative of my friends, the birds, along the way, with a different flower that I’d been heavily researching and studying, over the past several months, leading up to today (early April 2026), the new flower being Michelia alba, a highly fragrant subtropical tree in the Magnolia family, that was found in my mother’s first home country of Hong Kong (Great Britain, China).&amp;nbsp;&lt;/p&gt;&lt;p&gt;My mother and I were both in to gardening, back in my teen years, growing up, and it was my retreat in to a change of pace, and it was something to work on, in between my school studies and getting in to trouble, here and there, myself. Eventually we purchased a Michelia alba tree, after seeing them available at San Gabriel Nursery. The trees were on the higher end of the price range for trees of that size, ostensibly due to the rarity that it was, here in Southern California, and for its prized fragrant flowering blooms, which appear throughout several months out of the year, in the scarce gardening regions 10 and 11, which is basically Southern California, Florida, and perhaps a few other small, scattered locations around America. Prior to purchasing one of the trees, I would commonly visit the trees at the gardening center to smell the flowers.&lt;/p&gt;&lt;p&gt;Here is what Gemini and I came up with, for a reconstitution formulation (a highly valuable feature):&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;### 10-Gram Trial Batch (Weights)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;Since you&#39;re ready to mix, here are the weights for a **10-gram sample**. This is the safest way to test the balance without wasting your precious Orris or Lilytol.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| Ingredient | Amount for 10g Batch |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;|---|---|&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Linalool** | 5.30 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Lilytol** | 0.80 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Phenylethyl Alcohol (PEA)** | 0.70 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Benzyl Alcohol** | 0.60 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Benzyl Acetate** | 0.40 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Beta-Ionone** | 0.30 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Ocimene** | 0.25 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Geranyl Acetate** | 0.20 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Ethyl 2-methylbutyrate** | 0.15 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Indole (10% in DPG)** | 0.15 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Alpha-Terpineol** | 0.15 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Jasminlactone** | 0.12 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Beta-Caryophyllene** | 0.10 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Heliotropin Replacer (10% dil.)** | 0.30 g (This is 3 parts) |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Orris Butter (10% dil.)** | 0.10 g (This is 1 part) |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Methyl Benzoate (10% dil.)** | 0.05 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **DPG (to finish weight)** | 0.33 g |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: Arial; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14.7px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;| **Total** | **10.00 g** |&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-kerning: none; font-size: 14.67px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Perhaps this gives readers a sense of the smell of the flower. It’s described as very sweet and fruity, while having some facets of other white flowers.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, I set out in trying to recreate my favorite visual piece in my loft and in my apartment, in a renewed form, a miniature woodcut panel featuring sparrows and Michelia alba flowers.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To do this, I had to investigate the tools I would use, in order to complete the job. My search happened around the time of Amazon’s Big Spring Sale, and I found some great deals on tools and parts.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;———————&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Break. Taking a break. Here’s some stuff to look at, in the meantime.&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid74zVjhcL6eUbjDXy2EhcvEn20haFm7LHkJdEwnETvJjIs-S3WRXiUgBJU9npvJIP38kl5q6yLCz6SPLuMW65XHLyklLYqsqPBHI9wdMk77ivzerkYxhAusSLKKYX5sHPu0_g03m-Ni15EQ-Y91lJUGAsIMvWfGnLGugdQh34Stlmn3xHzMxSsV5_W2U/s4032/IMG_2672.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid74zVjhcL6eUbjDXy2EhcvEn20haFm7LHkJdEwnETvJjIs-S3WRXiUgBJU9npvJIP38kl5q6yLCz6SPLuMW65XHLyklLYqsqPBHI9wdMk77ivzerkYxhAusSLKKYX5sHPu0_g03m-Ni15EQ-Y91lJUGAsIMvWfGnLGugdQh34Stlmn3xHzMxSsV5_W2U/w640-h480/IMG_2672.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFMjPyl1LJ1EdGdFM2XBY2xMsGlFbbmpJSXu3EtkJejEURjChkbmoc60wl-yJQyeD_kf6Qo7XOLNsHFQ820ZQ3tOr4ajbbz2KqtdDOM6jRFjkDXQ8hEadrle6BQKnqyrAGXiLe_PEOfrrDpntHhlKtpiYeeFsabzbH3coDFqyGoqBTXfWiwq3Qmy0tG0w/s4032/IMG_2665.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFMjPyl1LJ1EdGdFM2XBY2xMsGlFbbmpJSXu3EtkJejEURjChkbmoc60wl-yJQyeD_kf6Qo7XOLNsHFQ820ZQ3tOr4ajbbz2KqtdDOM6jRFjkDXQ8hEadrle6BQKnqyrAGXiLe_PEOfrrDpntHhlKtpiYeeFsabzbH3coDFqyGoqBTXfWiwq3Qmy0tG0w/w640-h480/IMG_2665.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV-g4ZfKzMdSncl7I2NhWjJ0HZiOzNpWclBLVIyciieJKQfc5fqROibkE0XcZBTcH296LZ46OZ1FJO5S8ZyuaPpfZQhube5-l-HvG-gvL5GJZyd7ex5sOr1US3CbnOATXMA3X0fsbCNab9TH62IrqDYlg7WSNxXIx-mSTM5isuXzOzB624q8tvf9E78Y0/s4032/IMG_2666.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV-g4ZfKzMdSncl7I2NhWjJ0HZiOzNpWclBLVIyciieJKQfc5fqROibkE0XcZBTcH296LZ46OZ1FJO5S8ZyuaPpfZQhube5-l-HvG-gvL5GJZyd7ex5sOr1US3CbnOATXMA3X0fsbCNab9TH62IrqDYlg7WSNxXIx-mSTM5isuXzOzB624q8tvf9E78Y0/w640-h480/IMG_2666.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUvyicLqadZKTMdX2VfFnzH0R83DTf8GSgnm0PyEW-7tf4g3FRdBgu3FllA9W9wz-kJB8ZNetd8yVTcrCUUT4Bdyj78KVz-yTl6cn0GWDIfmd-SVsZtTWydA899gMqrk_f6fCdz6eABsIQks0zvVCvE-ypamovORg0R4xOz78ro6vEoahpPujDejt4jco/s4032/IMG_2667.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUvyicLqadZKTMdX2VfFnzH0R83DTf8GSgnm0PyEW-7tf4g3FRdBgu3FllA9W9wz-kJB8ZNetd8yVTcrCUUT4Bdyj78KVz-yTl6cn0GWDIfmd-SVsZtTWydA899gMqrk_f6fCdz6eABsIQks0zvVCvE-ypamovORg0R4xOz78ro6vEoahpPujDejt4jco/w640-h480/IMG_2667.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirdOAlGILPS4i786hEUsLZMRHmJewm6ReZdmiGbmxF0OqSioX4PueRiLnfQk2CaOzKlnGRUsrnwdLw7C0quiziBByU5kfsYgKBurvDna5bPFjlc41rJAC4C1-Cm4UDpvMS_v452s6ygyWBFBQQpH3QOXSseHvj6xEbBf8qkZ9v80BShYxYFGCNq80RqLw/s4032/IMG_2669.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirdOAlGILPS4i786hEUsLZMRHmJewm6ReZdmiGbmxF0OqSioX4PueRiLnfQk2CaOzKlnGRUsrnwdLw7C0quiziBByU5kfsYgKBurvDna5bPFjlc41rJAC4C1-Cm4UDpvMS_v452s6ygyWBFBQQpH3QOXSseHvj6xEbBf8qkZ9v80BShYxYFGCNq80RqLw/w480-h640/IMG_2669.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGEkkeQJ3tlAQYFQGAeG41XAAju-FAcKuB9wOTA1FCI_JJVkBZKT-22xWDbWuaJo4qOX4J-pugdivrMsjWGhycl-_-rmh9xnff0ydrzXllK8nontbWTrwDjt7rLyL66Ldwq4q-LcG824Cd0N4vc7WmEBZO_uZ15zC6rOMfmrHSAJI5X3RJz8K0wxUJnJM/s4032/IMG_2670.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGEkkeQJ3tlAQYFQGAeG41XAAju-FAcKuB9wOTA1FCI_JJVkBZKT-22xWDbWuaJo4qOX4J-pugdivrMsjWGhycl-_-rmh9xnff0ydrzXllK8nontbWTrwDjt7rLyL66Ldwq4q-LcG824Cd0N4vc7WmEBZO_uZ15zC6rOMfmrHSAJI5X3RJz8K0wxUJnJM/w480-h640/IMG_2670.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0YZJjhojEgHm39MBpsvph42a_aNdHQE3EwAi1Gu6JzFc9BOHBfzFI7SHZI7DLPVBL1vqI35Ok4EcJvQWpfndT318GtOBUA4CQz4B97_2ci8JenddWeOOuKttii3x1XVMqD4KLVtsVIbF2-bs0SCstTPUpELl9G7HCbjV9oB7ha6kPVc-rMsgWHnnO4U/s4032/IMG_2673.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0YZJjhojEgHm39MBpsvph42a_aNdHQE3EwAi1Gu6JzFc9BOHBfzFI7SHZI7DLPVBL1vqI35Ok4EcJvQWpfndT318GtOBUA4CQz4B97_2ci8JenddWeOOuKttii3x1XVMqD4KLVtsVIbF2-bs0SCstTPUpELl9G7HCbjV9oB7ha6kPVc-rMsgWHnnO4U/w480-h640/IMG_2673.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWSMqJRUCmhKUBYxXthVyojtW-tA8dfcdD7TiPGzZMPT3eU8rXeOlqX2eU7ohFhoO1WeWf5RYaLoL5iNwimjBGzsMIqb5RnNIGSZOQONUO14bceGSgSdotN1HVn-oiyCzPSJRR_qacENDnfOHx2jZGpc3SByiEP-bFOLBGHO5arl4xS-Mz4O-0w-6bHJk/s4032/IMG_2671.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWSMqJRUCmhKUBYxXthVyojtW-tA8dfcdD7TiPGzZMPT3eU8rXeOlqX2eU7ohFhoO1WeWf5RYaLoL5iNwimjBGzsMIqb5RnNIGSZOQONUO14bceGSgSdotN1HVn-oiyCzPSJRR_qacENDnfOHx2jZGpc3SByiEP-bFOLBGHO5arl4xS-Mz4O-0w-6bHJk/w640-h480/IMG_2671.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjksILO2qj-kTO7fDP__PoMcwynRRpsrvnHW2vcx6upyMabsS0xNTceBFqpmu2KQMHaI7i6yV8M4gVSv-Yz1YJkmDCaJwr4avMior9LyhJ1my9hZ4J5fJ4oWPqdP0enLYvp6-5LkX4KvD0fTnLe9g2i8fCMc-7GmOSMvLOEMaJPo5iyzvTM_lNlnQLNqJo/s4032/IMG_0025.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjksILO2qj-kTO7fDP__PoMcwynRRpsrvnHW2vcx6upyMabsS0xNTceBFqpmu2KQMHaI7i6yV8M4gVSv-Yz1YJkmDCaJwr4avMior9LyhJ1my9hZ4J5fJ4oWPqdP0enLYvp6-5LkX4KvD0fTnLe9g2i8fCMc-7GmOSMvLOEMaJPo5iyzvTM_lNlnQLNqJo/w480-h640/IMG_0025.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCi8n96epuNK2yYQtnlIjI1pjP_WCWC8T7J-sskL71N5NXdn4A8pSzJA0uFJqrrji6HWUTiVUFv_BgZqlxpDqYJ8v7HjHsGMB42fH_BqEnCbGh_pK2ta5-FUv1ThdK_nMV4QPreTqpcWxe_H-4gFb6fAFg4fJJA7QSyVsax4qINUmV8LQmmZU_lR6_wcM/s4032/IMG_2646.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCi8n96epuNK2yYQtnlIjI1pjP_WCWC8T7J-sskL71N5NXdn4A8pSzJA0uFJqrrji6HWUTiVUFv_BgZqlxpDqYJ8v7HjHsGMB42fH_BqEnCbGh_pK2ta5-FUv1ThdK_nMV4QPreTqpcWxe_H-4gFb6fAFg4fJJA7QSyVsax4qINUmV8LQmmZU_lR6_wcM/w480-h640/IMG_2646.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7aDWkB4t4ghyQweEi_Ph1gx9tY3THK-sca_lXEQsGeHXjmEpek_pxfSsXK61de_HO91SRSXQnNU269xC_WSQ5ItLSvbwTTJiE4n31QC513NF-Sa5IId1yA0RBzalUu8SMHzOzThrPaqmdSJEXaFFUx-0uGpqrrPCNOUPaFNsJwYOVii4tOKgq0ocUMk/s4032/IMG_2622.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7aDWkB4t4ghyQweEi_Ph1gx9tY3THK-sca_lXEQsGeHXjmEpek_pxfSsXK61de_HO91SRSXQnNU269xC_WSQ5ItLSvbwTTJiE4n31QC513NF-Sa5IId1yA0RBzalUu8SMHzOzThrPaqmdSJEXaFFUx-0uGpqrrPCNOUPaFNsJwYOVii4tOKgq0ocUMk/w480-h640/IMG_2622.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYt8MRSPVucDdwVsJjwbe-SYkjdlKr1e0zRKL4MPE_gFx-QJz7rTpI3rDR3ut8lcYlTQPMs-trRmsial8Q2-DUl23b3hghqG1UfFoIcTqSM4DnPa7rLv3EU6iYvtpV4bPvQsE9zMA6IbdiqXVfeYlN4s5wfYD6Z55gdlPV3bvOC19Mix3pOmCqRFL66w/s4032/IMG_2621.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYt8MRSPVucDdwVsJjwbe-SYkjdlKr1e0zRKL4MPE_gFx-QJz7rTpI3rDR3ut8lcYlTQPMs-trRmsial8Q2-DUl23b3hghqG1UfFoIcTqSM4DnPa7rLv3EU6iYvtpV4bPvQsE9zMA6IbdiqXVfeYlN4s5wfYD6Z55gdlPV3bvOC19Mix3pOmCqRFL66w/w480-h640/IMG_2621.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh85PuS5lOAsuMYXGtSd6kgE071xZpgWunAjU2Dg1_YWXrTF4fo98dtyJ9s-ENSu05MQclDXK5wVHIP9WdggXb1vQ6IMjSRwYBS-d3Mx2t4rxQ7ey_lYVNcid1xuykb4XVHiBB8pOKc6D3qkvvGWWJaeaTieYUGDETnpD4GaeNJ3Vh9FH4d32nBsbMnz4A/s4032/IMG_0024.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh85PuS5lOAsuMYXGtSd6kgE071xZpgWunAjU2Dg1_YWXrTF4fo98dtyJ9s-ENSu05MQclDXK5wVHIP9WdggXb1vQ6IMjSRwYBS-d3Mx2t4rxQ7ey_lYVNcid1xuykb4XVHiBB8pOKc6D3qkvvGWWJaeaTieYUGDETnpD4GaeNJ3Vh9FH4d32nBsbMnz4A/w480-h640/IMG_0024.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTEf8izFnbPoGigyZfN2M1nVrPMkO4Oox-o6wVbfTvWNVdOiZJFclBvz4tIuNcj0PyPK0QiuhAhUhkgeTNpuZLn8iULpPxVxEa4d1mYcfJO1gWybZekT8wvo3XR_bfhOjAkd1j0Xlea7MlGZvmeG0I6dx1rPSS7DZ8UCbsl2NDc6OcsyeAAC-xrg2rCZg/s3600/IMG_2609.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3600&quot; data-original-width=&quot;3600&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTEf8izFnbPoGigyZfN2M1nVrPMkO4Oox-o6wVbfTvWNVdOiZJFclBvz4tIuNcj0PyPK0QiuhAhUhkgeTNpuZLn8iULpPxVxEa4d1mYcfJO1gWybZekT8wvo3XR_bfhOjAkd1j0Xlea7MlGZvmeG0I6dx1rPSS7DZ8UCbsl2NDc6OcsyeAAC-xrg2rCZg/w640-h640/IMG_2609.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsRx63-Kx1PlqcihbOintC46YOJV58y9a-nGmGysbvA9ijxRS1mDdi1Joo2dpvBXIP80_SoXQ-LJC4So2sXjEp9rtCPqO2MXsagqiyRk8nIsQVBiP2obHsAUD-PqWEDIdWzi663gkAP69Zb5BkJ_EoRzIheGq-VlF32c2LJuktxoIeBEMX1tAw7Fr2So0/s3675/IMG_2604.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3675&quot; data-original-width=&quot;3675&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsRx63-Kx1PlqcihbOintC46YOJV58y9a-nGmGysbvA9ijxRS1mDdi1Joo2dpvBXIP80_SoXQ-LJC4So2sXjEp9rtCPqO2MXsagqiyRk8nIsQVBiP2obHsAUD-PqWEDIdWzi663gkAP69Zb5BkJ_EoRzIheGq-VlF32c2LJuktxoIeBEMX1tAw7Fr2So0/w640-h640/IMG_2604.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9LAoJu1L-0TcEnRb-qIcX3Jk-Ra_q7yqgcaor5CyNX6xQzTNKV26cA-YLYFAXdNdMNhBva8jV9hlLKdQIiYy0qan6jIZ4jZdsw7D1uEzC6Jo030Qz8ay12kmyLcIQy2SHcpi6S8rU-lPKc73FCe7l4A_P6-ps7VAusNxI-LaxBKCiysLXne6b6PU-bkY/s3675/IMG_2604.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3675&quot; data-original-width=&quot;3675&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9LAoJu1L-0TcEnRb-qIcX3Jk-Ra_q7yqgcaor5CyNX6xQzTNKV26cA-YLYFAXdNdMNhBva8jV9hlLKdQIiYy0qan6jIZ4jZdsw7D1uEzC6Jo030Qz8ay12kmyLcIQy2SHcpi6S8rU-lPKc73FCe7l4A_P6-ps7VAusNxI-LaxBKCiysLXne6b6PU-bkY/w640-h640/IMG_2604.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIwwHFAO5dZ4ZU8rmH93L-dfFRSZxtBQBHh-9WC2a_jv6i5YNEN64tCYG4EWtiL-drigZHyMtclnU-KZDsiO_Zi4XSnME-saqo2Qrq1JZK-01kCWF0CPOX1vehd8yDuFOPM2XSk8Gk5ygmBj_pNVDdTNEKcVxwSTfCGS-HHaojXBS_0lcpfYq7pSwZAfs/s2420/IMG_2603.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2420&quot; data-original-width=&quot;1668&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIwwHFAO5dZ4ZU8rmH93L-dfFRSZxtBQBHh-9WC2a_jv6i5YNEN64tCYG4EWtiL-drigZHyMtclnU-KZDsiO_Zi4XSnME-saqo2Qrq1JZK-01kCWF0CPOX1vehd8yDuFOPM2XSk8Gk5ygmBj_pNVDdTNEKcVxwSTfCGS-HHaojXBS_0lcpfYq7pSwZAfs/w442-h640/IMG_2603.png&quot; width=&quot;442&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/6020013207870819407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/6020013207870819407?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6020013207870819407'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6020013207870819407'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/04/latest-haul-my-new-hobby-woodworking.html' title='Latest Haul: My New Hobby, Woodworking (Product Reviews)'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz4JdBsBMqmZAACjB96sihOAd-45yR_U-VFKyKJzFO2ewHGb4Yq_7GyQ_IJJRVz4pH4GuvSYVqtNMTvydr-5jmEmcWIEM6Ae-9fUEhZR_13BmkjsXZ9TtPO8l7HL1bx-g4LI42qW-TaTnTkRx70SLP5DaNgub4JLBdGt61fpqSC3FUxCVnSwdNVYCFPjQ/s72-w478-h640-c/IMG_0560.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>9.7997037729318563 -153.39903139999996 58.287350427068141 -83.086531400000027</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-8956427754760069830</id><published>2026-04-07T08:18:00.000-07:00</published><updated>2026-04-07T10:43:39.179-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aesthetics"/><category scheme="http://www.blogger.com/atom/ns#" term="anecdotes"/><category scheme="http://www.blogger.com/atom/ns#" term="caveat"/><category scheme="http://www.blogger.com/atom/ns#" term="cosmetics"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="fragrances"/><category scheme="http://www.blogger.com/atom/ns#" term="hauls"/><category scheme="http://www.blogger.com/atom/ns#" term="product development"/><category scheme="http://www.blogger.com/atom/ns#" term="product reviews"/><category scheme="http://www.blogger.com/atom/ns#" term="production"/><category scheme="http://www.blogger.com/atom/ns#" term="skin care"/><title type='text'>A forlorn project haul, upon attempting to figure out Gamma Linolenic Acids (GLAs) ex Blackcurrant Seed Oil. </title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;Warning: as an update, I should mention to my readers that it’s possible that something I had applied to my skin, of which pertains to the products I had detailed below, in the blog post, had given me a pretty intense superficial blood vessel rupture skin condition, yet only on my leg(s) - mostly one leg. The condition is exacerbated when I take a hot shower, I’ve learned. The condition is temporary, and I feel that it may go away fully within a week or two, at least that’s what my consultations with Google Gemini have come up with. It’s not painful or itchy. Although I’ve also applied the same formulas to my face and arms, those areas are not affected, only my lower legs, where I did apply the formula, and so, I might think that applying it eventually caused this condition to happen, but I haven’t narrowed down the specific culprit, just yet.&amp;nbsp;&lt;/h3&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglPWUkv0i1L4oPY9FwcrkA0YkBHcvalRfB2pl1S2WLIil1TyyXyXPr9bIjYuKyyeUeW1KBjZVPbf3xBlS_mrrBmrQ9JGCRv6I5s_SrWQeCT367y_FY0mMW7i4QV8Gzb2OWqWpogX2LL4kxjA4MQETVaTO8-u1L4yp3CkPudrFOJoqnw9qkR5ZJWpcjHHI/s4032/image.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglPWUkv0i1L4oPY9FwcrkA0YkBHcvalRfB2pl1S2WLIil1TyyXyXPr9bIjYuKyyeUeW1KBjZVPbf3xBlS_mrrBmrQ9JGCRv6I5s_SrWQeCT367y_FY0mMW7i4QV8Gzb2OWqWpogX2LL4kxjA4MQETVaTO8-u1L4yp3CkPudrFOJoqnw9qkR5ZJWpcjHHI/w480-h640/image.jpg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;An alarming superficial blood vessel rupture, potentially, had surfaced after I took a hot shower, after I had applied some of the products below, in a formulation, in days prior to me noticing it had shown up, after the shower.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;What started off serene and quietly turned frenzied on my iPad, and I’ve spend nearly a whole day’s worth of time on my device, today being Wednesday, out of the week.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnvMhiGA3bWl7E51avZLA0uHLZ7bjBpq08qrRVEnYcCri0fxUFzi2niyep-l_Uc1N2LzgXgPf0rve3Q8aEDOoi5cWPpcr-xu5pumqACwpOmRrjZUeHIo9KWMk0NG12uXsWiM5I3k2yvVSgJNpUy2bXPoX0mpzzma7kbrZIU7btaJ6Ouy83ruQQZbIyUZI/s1070/IMG_2508.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1070&quot; data-original-width=&quot;993&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnvMhiGA3bWl7E51avZLA0uHLZ7bjBpq08qrRVEnYcCri0fxUFzi2niyep-l_Uc1N2LzgXgPf0rve3Q8aEDOoi5cWPpcr-xu5pumqACwpOmRrjZUeHIo9KWMk0NG12uXsWiM5I3k2yvVSgJNpUy2bXPoX0mpzzma7kbrZIU7btaJ6Ouy83ruQQZbIyUZI/w594-h640/IMG_2508.jpeg&quot; width=&quot;594&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I had just received a small haul of materials, from Bulk Apothecary, which I was eager to receive, since it took about a week to receive the shipment, here in LA, coming from Illinois. I purchased 5 pounds of Himalayan pink salt, because I felt like I needed a mineral supplementation of some sort, and I wanted to try out the salt, as an alternative to liquid trace mineral supplements. I’d also been on the fringes of a deep dive product research stint, having become obsessed with formulating a skin care product that contained&amp;nbsp;&lt;span style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(32, 33, 34); color: #202122; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;γ-Linolenic acid as its primary feature. I had, just the prior week, spent 50 hours on my device,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlnvzS5zf33qxKb96_iz6V5Ex799_3bAarHVG8-1vU1RHfZybnZ0z7NrMZ4V6lSw0P5fCH0z7x7hyPKJBuPIDpnDYJHOeP06MGyKbniZ7Pc7Zwea0VuSoq9nM14yROmm5hzaJBHBlrsnz-ZgJzpsDrIA7WYS3n49asTkT8Z8ChYgv8W-DKeNzSR-fB9Qw/s1054/IMG_2509.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1054&quot; data-original-width=&quot;1008&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlnvzS5zf33qxKb96_iz6V5Ex799_3bAarHVG8-1vU1RHfZybnZ0z7NrMZ4V6lSw0P5fCH0z7x7hyPKJBuPIDpnDYJHOeP06MGyKbniZ7Pc7Zwea0VuSoq9nM14yROmm5hzaJBHBlrsnz-ZgJzpsDrIA7WYS3n49asTkT8Z8ChYgv8W-DKeNzSR-fB9Qw/w612-h640/IMG_2509.jpeg&quot; width=&quot;612&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;upon settling with blackcurrant seed oil. I figured that, for having such small seeds, the brambles (berry) plants must produce a precious oil. Gamma linolenic acids are one of the necessary fatty acids that belong in our diet, and the body’s production and usage of the product declines with age, so, being age 44 now, I’d felt that my energy was in decline, and that I was putting on a lot of weight, possibly due to medications. The thing was, though, was that I didn’t want to sacrifice either my meals or my energy supply - I had to somehow find a way to burn those calories, given that I now started exercising again, all while maintaining eating three or more regular meals a day. When isn’t the lack of available fatty acids a primary contributor to less-than-optimal health, and I felt that supplementing the skin could potentially produce viable results in the greater body-at-large, with the concentrated ingredients I purchased from Bulk Apothecary.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJFkFnImYWYMHQwcP48NhSh-gUXfCw9jqJAoN9onr87CUJOf524ibe-BuCIY_LU2_0OaxXpv0RGn6KF814Llg-519SbzO21t7su8p9YfpSp1NR4WRNaYRxDENAvvzN4OHFx_WBT5zlJ8r_80yKoacHYrosZYvaMJk-RcMAmcAkAun7UoFrMULACfzf9hQ/s4032/IMG_2556.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJFkFnImYWYMHQwcP48NhSh-gUXfCw9jqJAoN9onr87CUJOf524ibe-BuCIY_LU2_0OaxXpv0RGn6KF814Llg-519SbzO21t7su8p9YfpSp1NR4WRNaYRxDENAvvzN4OHFx_WBT5zlJ8r_80yKoacHYrosZYvaMJk-RcMAmcAkAun7UoFrMULACfzf9hQ/w480-h640/IMG_2556.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Five pounds of Himalayan pink salt, which, like the blackcurrant seed oil, I’m trying to absorb externally. The salt is reputed to contain trace amounts of a full spectrum of minerals.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;The problem was, upon receiving the oil, the salt, and some polysorbate 20, for solubilizing the oils in to a water based solution, for the skin care product, was that I found that the blackcurrant seed oil had what Gemini referred to as an “earthy” scent. I fancied, moreso, that it was a fishy smell. It reminded me of sea buckthorn oil, another oil high in fatty acids, which I had sampled in previous years. Upon consulting with Gemini about the issue, we settled upon that the smell was an inevitable product of the virgin blackcurrant seed oil, which, (virgin) would feature the highest amount of fatty acids, compared to a refined version of the oil.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;So I went on a product research deep dive on Amazon, and alternately, consulting with Gemini, and it was determined that I could potentially appreciable halt the smell of earthiness or fishiness, by absorbing the smell, in vitro, making use of coconut activated charcoal powder. I was supposed to let it sit in the oil for a couple or a few days. So, I ordered several more products, including a Büchner flask-based hand pumped vacuum chamber that had a draining ceramic container at its top, which would hold the liquid and the charcoal powder, as it was vacuumed in to the flask, with a paper membrane in between the liquid mixture and the drainage holes of the upper receptacle.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX_eZQvghtCvLRtxzBa-vEnIbHWrPgHvauHsZCJHo-RHIKJsw8Y09U-H7LhyfAHibOYVowqRhCzTmPt_wRMVoVkGp71xPEkGe9uONLtF01yjp-i-XANk3Zd8h9YFte7nZWaIAe53F721lOg5jDu0w_jIBkc7QZ5RNxBlRT112Pk9A2jJEklA2PQxzb5Ys/s2420/IMG_2507.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2420&quot; data-original-width=&quot;1668&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX_eZQvghtCvLRtxzBa-vEnIbHWrPgHvauHsZCJHo-RHIKJsw8Y09U-H7LhyfAHibOYVowqRhCzTmPt_wRMVoVkGp71xPEkGe9uONLtF01yjp-i-XANk3Zd8h9YFte7nZWaIAe53F721lOg5jDu0w_jIBkc7QZ5RNxBlRT112Pk9A2jJEklA2PQxzb5Ys/w442-h640/IMG_2507.png&quot; width=&quot;442&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;Unfortunately, I never received the packages that went with this second haul, on a subsequent week that had started. It was disappointing, to say the least, largely because I had formulated a poor-smelling fragrance cover-up for my first trial at masking the blackcurrant seed oil’s scent. It was a rosy scent, which, all in all, ought not be the vibe I should be going for, so I was worried that production and development time would be lost, and I’d have to order the items again, or something, but I chatted with Amazon about the boxes being delivered somewhere else, and they promptly issued a refund, at my request.&amp;nbsp;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6dikZDy1A3eoy_NEoW-_XqnXXwFljgVXMw69ar7DHxvPwZnAy6h88rg_jDpiqkfla5ZYu4MN1_IqFEuzJ9mGe6sJ6Qh76CsyXg3JrCmt8dUrfjP1fmlJ8IcU8P3vrNZ5QZke3WdKVhLFa2pzZTEe3vNaYBHg7dR4grMBqiqF_7DnRZkkBG5jfK9HIX4w/s2420/IMG_2557.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2420&quot; data-original-width=&quot;1668&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6dikZDy1A3eoy_NEoW-_XqnXXwFljgVXMw69ar7DHxvPwZnAy6h88rg_jDpiqkfla5ZYu4MN1_IqFEuzJ9mGe6sJ6Qh76CsyXg3JrCmt8dUrfjP1fmlJ8IcU8P3vrNZ5QZke3WdKVhLFa2pzZTEe3vNaYBHg7dR4grMBqiqF_7DnRZkkBG5jfK9HIX4w/w442-h640/IMG_2557.png&quot; width=&quot;442&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The delivery driver’s photo “proof” of that my packages were delivered, whereas I have no idea where this picture was taken - it obviously, to me, isn’t my home, where I’d sent the packages to.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #202122;&quot;&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34);&quot;&gt;I started hearing things, in my head, about that the whole deodorizing concept was a majorly tweaked out topic to consider, and that I should feel lucky that the packages never arrived, and that I had to get on chat support with Amazon to get a refund, which was painless, by the way. After all, I was about to spend nearly $100 to deodorize a $17 bottle of oil. My rationale, during all of that though, was that I could establish a workflow, and an edge, over competitors, for going the extra mile, by deodorizing the oil that had started to oxidize, for however long it had been sitting out.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;Meanwhile, for this week’s screen time, I did some more consulting with Gemini, and I conceived of that the scent of earthy-fishiness could be better covered up by a sweet tropical type of scent, with coconut, tonka bean, benzoin, and some of my Eau Pigeonoid-recent formulation of a men’s fragrance that I’m currently wearing and chiseling away at, aesthetically speaking. It turned out that tropical was the ticket, and the second formulation ends up smelling quite mild and pleasant - here, I had highlighted a more relatable earthy scent combination, yet the oxidized aroma as the skin care product I fixed up ages, on the skin, still has reminisces of oxidized blackcurrant seed oil, but not so much that I couldn’t forget about it, for a while; so I moved on to the next thing… figuring out what to do, since I had all of that Amazon gift card money that was returned to me, and I settled upon getting back to a project that would have the subject headers as being “LED-backlit mini Indonesian-style wood panel carving decorative art pieces,” a throwback to my old loft apartment, in which I had purchased a lotus woodcut panel set, and I’d set up back lighting for it.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVo900m49bIH8Xc8_OcXysjCT9WWeKGpvxVVFn9LMKKZnJi41LRFSNPg6S5UdNnYu9KHy0RArP9FcXVHvYR55EI3qgpJMtSTv2LRSkOBA6bkblDTbeFpJ-DJi9K0PhjO_YkaEMWa963pJRaubZj6LiH-vzZFzAE_wuIF-dklKzLa7Ha9v4N9ZK9NOqQTM/s1264/IMG_2384.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1264&quot; data-original-width=&quot;848&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVo900m49bIH8Xc8_OcXysjCT9WWeKGpvxVVFn9LMKKZnJi41LRFSNPg6S5UdNnYu9KHy0RArP9FcXVHvYR55EI3qgpJMtSTv2LRSkOBA6bkblDTbeFpJ-DJi9K0PhjO_YkaEMWa963pJRaubZj6LiH-vzZFzAE_wuIF-dklKzLa7Ha9v4N9ZK9NOqQTM/w430-h640/IMG_2384.png&quot; width=&quot;430&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;I felt like going with the sparrows, for this project, because I felt that they suited the floral decoration aspect more neatly than pigeons would. Now I’m considering various options, after having mega-shopped Amazon’s Big Spring Sale, going between a handheld woodworking tool, and laser cutting CNC machines. Whilst in the process of attempting to create assets for the CNC automated cutting of the wood panels, I spent some money on a 2D to 3D model app, for credits for rendering the 3D images. The app didn’t work, now, by this point (I’d used it previously, and it worked quite well), so I settled upon planning to do a 3D print of the model, yet, I had to come up with the 3D model file, in any case - that, or produce a physical model of the woodcut decoration, somehow, by rote, etc. So that’s where I’m at, in all of this. I think I’m going to end up going with a handheld woodworking tool project workflow. I’ll make sure that readers get updated on the progress.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: early a.m., the morning subsequent to this last night’s blog. I ended up going with the hand tool, although I had settled upon getting a rotary tooling setup, rather than the smaller engraving pen options I’d been considering. Apparently, things just aren’t done that way, in such a situation as mine - the engraving pen path, that is. So I ordered some woodworking and carbine burr bits, a Big Spring Sale deal of a $69 rotary tool, that was purportedly 77% off ~$299, supposedly. I thought I’d give it a try - it looked alright, and bargain-y, while being thick enough to hold a reasonably-sized motor inside, for the job, and I ordered some square birch wood panels and some sanding scrubbers. I’ll worry about doing the 3D print a little later on, and I’ll tinker with this woodworking setup, in the meantime.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8O4hyphenhyphensVcFyph_sxQdL5mWKgZxj4alg4fIZoQgZws1D9S8dTR7QqmCR7wt0eSlSEHR0QaZGtkZPuFEV-Es9-6jKPsOmUlffkmS2vMp40UAcVac0cHc3ncbOf7Hg93rSSX8X89BdVuIpo33vfOuXzBmbIeyiYQFGBfROWUk2QoLLs0jSgoQBZIUx5Ma4vE/s1668/IMG_2558.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1379&quot; data-original-width=&quot;1668&quot; height=&quot;530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8O4hyphenhyphensVcFyph_sxQdL5mWKgZxj4alg4fIZoQgZws1D9S8dTR7QqmCR7wt0eSlSEHR0QaZGtkZPuFEV-Es9-6jKPsOmUlffkmS2vMp40UAcVac0cHc3ncbOf7Hg93rSSX8X89BdVuIpo33vfOuXzBmbIeyiYQFGBfROWUk2QoLLs0jSgoQBZIUx5Ma4vE/w640-h530/IMG_2558.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(32, 33, 34); color: #202122; font-family: inherit; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/8956427754760069830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/8956427754760069830?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/8956427754760069830'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/8956427754760069830'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/03/a-forlorn-project-haul-upon-attempting-to-figure-out-gla.html' title='A forlorn project haul, upon attempting to figure out Gamma Linolenic Acids (GLAs) ex Blackcurrant Seed Oil. '/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglPWUkv0i1L4oPY9FwcrkA0YkBHcvalRfB2pl1S2WLIil1TyyXyXPr9bIjYuKyyeUeW1KBjZVPbf3xBlS_mrrBmrQ9JGCRv6I5s_SrWQeCT367y_FY0mMW7i4QV8Gzb2OWqWpogX2LL4kxjA4MQETVaTO8-u1L4yp3CkPudrFOJoqnw9qkR5ZJWpcjHHI/s72-w480-h640-c/image.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Pershing Square, 532 S Olive St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.048569 -118.2528917</georss:point><georss:box>5.738335163821155 -153.40914170000002 62.358802836178846 -83.0966417</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2683955365208990664</id><published>2026-03-29T16:37:00.000-07:00</published><updated>2026-03-29T16:37:57.661-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="homeless"/><category scheme="http://www.blogger.com/atom/ns#" term="humor"/><category scheme="http://www.blogger.com/atom/ns#" term="nesting pigeons"/><category scheme="http://www.blogger.com/atom/ns#" term="News"/><category scheme="http://www.blogger.com/atom/ns#" term="nightlife"/><category scheme="http://www.blogger.com/atom/ns#" term="real pigeons of Los Angeles"/><category scheme="http://www.blogger.com/atom/ns#" term="Skid Row"/><title type='text'>A Skid Row pigeon couple loses their home.</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrimly_ro8P4zZCO6E6pY0g5DrrCYq-vtDWA1CpL5Ms3Jdvyin7G7vpcy7tqDz7MdiwDUTcQwJGlHvuk2GJcBjhsnSoaLiMUzN-SVx6CYMF-M1R0UoSrpKe1sICJK-1g2BezeqyGHKyFIP8qIaxK-hrpYDWZ0aJk2sxcFLOh78eSJdm48iZRGIgVO6gjo/s4032/IMG_1325.jpeg&quot; style=&quot;display: block; margin-left: auto; margin-right: auto; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrimly_ro8P4zZCO6E6pY0g5DrrCYq-vtDWA1CpL5Ms3Jdvyin7G7vpcy7tqDz7MdiwDUTcQwJGlHvuk2GJcBjhsnSoaLiMUzN-SVx6CYMF-M1R0UoSrpKe1sICJK-1g2BezeqyGHKyFIP8qIaxK-hrpYDWZ0aJk2sxcFLOh78eSJdm48iZRGIgVO6gjo/w640-h480/IMG_1325.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Two pigeons perch amidst the wreckage of their home.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Los Angeles’ homeless crisis affects so many, including the wildlife. Last night, two pigeons lost their home when a sidewalk shop’s sign collapsed, leaving the couple’s home roost vulnerable and exposed to the sidewalk on 5th Street, which sees a lot of pedestrian foot traffic at all hours, particularly during the day time. Since the structure collapsed during the nighttime, the birds were forced to stay there, for the night, because other pigeons claim the signs around them. These pigeons seem to not know where they might go, next, but it’s doubtful that they’ll stay here, because of the risk of threats from below. Pigeons usually prefer to have a safe and secure, secluded roosting spot, where they’ll return on a daily basis, typically in the late afternoon. The birds are likely devastated, at the loss of their home, having made grand plans to build a nest and rear some young, behind the shop sign, now that their meals had become regular, on an ongoing basis.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim33KKTW3esskcngxa2DhwMNtxm5Y-k-hUO7zHk97cL3XF8XY3beCjkveYwfcB5qQ1W3L0y0nBu9fs6JsvoCIuQMRnwM5Gmc4GP3hRNiRm9goVRTMNk1kElhGqeSLTzulilxkvk3S53uceSUPmscj_KeDz-aExdcXWIxpsSB3Ak_XeJBKgRyUBfdNW9_w/s5712/IMG_0015.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4284&quot; data-original-width=&quot;5712&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim33KKTW3esskcngxa2DhwMNtxm5Y-k-hUO7zHk97cL3XF8XY3beCjkveYwfcB5qQ1W3L0y0nBu9fs6JsvoCIuQMRnwM5Gmc4GP3hRNiRm9goVRTMNk1kElhGqeSLTzulilxkvk3S53uceSUPmscj_KeDz-aExdcXWIxpsSB3Ak_XeJBKgRyUBfdNW9_w/w640-h480/IMG_0015.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;img height=&quot;160&quot; src=&quot;blob:https://draft.blogger.com/c74b27b0-514c-40a4-9d25-047c4fb11b20&quot; width=&quot;160&quot; /&gt;A pigeon overlooks the street below, from his former home.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2683955365208990664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2683955365208990664?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2683955365208990664'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2683955365208990664'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/09/a-skid-row-pigeon-couple-loses-their-home.html' title='A Skid Row pigeon couple loses their home.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrimly_ro8P4zZCO6E6pY0g5DrrCYq-vtDWA1CpL5Ms3Jdvyin7G7vpcy7tqDz7MdiwDUTcQwJGlHvuk2GJcBjhsnSoaLiMUzN-SVx6CYMF-M1R0UoSrpKe1sICJK-1g2BezeqyGHKyFIP8qIaxK-hrpYDWZ0aJk2sxcFLOh78eSJdm48iZRGIgVO6gjo/s72-w640-h480-c/IMG_1325.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>5th St, Los Angeles, CA 90020, USA</georss:featurename><georss:point>34.0653547 -118.3073853</georss:point><georss:box>5.7551208638211548 -153.46363530000002 62.375588536178846 -83.1511353</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2078664025540973577</id><published>2026-03-21T02:17:33.917-07:00</published><updated>2026-03-21T02:25:38.839-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bird baths"/><category scheme="http://www.blogger.com/atom/ns#" term="cooling stations"/><category scheme="http://www.blogger.com/atom/ns#" term="cute"/><category scheme="http://www.blogger.com/atom/ns#" term="DTLA"/><category scheme="http://www.blogger.com/atom/ns#" term="heat wave"/><category scheme="http://www.blogger.com/atom/ns#" term="heralds of spring"/><category scheme="http://www.blogger.com/atom/ns#" term="Pershing Square"/><category scheme="http://www.blogger.com/atom/ns#" term="photography"/><category scheme="http://www.blogger.com/atom/ns#" term="reels"/><category scheme="http://www.blogger.com/atom/ns#" term="spring cleaning"/><category scheme="http://www.blogger.com/atom/ns#" term="tiktok"/><title type='text'>The pigeons get cooling off stations, during a SoCal heatwave.</title><content type='html'>&lt;p&gt;In a turn of fate, to contrast with recent weeks’ days of rain, we here in DTLA have been getting by, now, through a heat wave. Some of the other feeders at Pershing Square in Downtown LA, along with myself, have been keeping up with providing a refreshing pigeon bird bath cooling station accommodation, especially this past week, given how hot it’s been in Los Angeles, at the cusp of the Spring Equinox. Check out the pigeons enjoying their day in the sun, while some of them take advantage of the cool water pans, splashing around and cleaning themselves.&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote cite=&quot;https://www.tiktok.com/@jay.ammon/video/7618725584289484062&quot; class=&quot;tiktok-embed&quot; data-video-id=&quot;7618725584289484062&quot; style=&quot;max-width: 605px; min-width: 325px;&quot;&gt; &lt;section&gt; &lt;a href=&quot;https://www.tiktok.com/@jay.ammon?refer=embed&quot; target=&quot;_blank&quot; title=&quot;@jay.ammon&quot;&gt;@jay.ammon&lt;/a&gt; Pigeons at Pershing Square in downtown Los Angeles are having a great time after a meal, perching on the bushes, concrete, and railings, and some of the birds cool down in some water pans left out for them. &lt;a href=&quot;https://www.tiktok.com/tag/coolingcenter?refer=embed&quot; target=&quot;_blank&quot; title=&quot;coolingcenter&quot;&gt;#coolingcenter&lt;/a&gt; &lt;a href=&quot;https://www.tiktok.com/tag/spring?refer=embed&quot; target=&quot;_blank&quot; title=&quot;spring&quot;&gt;#spring&lt;/a&gt; &lt;a href=&quot;https://www.tiktok.com/tag/dtla?refer=embed&quot; target=&quot;_blank&quot; title=&quot;dtla&quot;&gt;#dtla&lt;/a&gt; &lt;a href=&quot;https://www.tiktok.com/tag/birdwatching?refer=embed&quot; target=&quot;_blank&quot; title=&quot;birdwatching&quot;&gt;#birdwatching&lt;/a&gt; &lt;a href=&quot;https://www.tiktok.com/tag/cutebirds?refer=embed&quot; target=&quot;_blank&quot; title=&quot;cutebirds&quot;&gt;#cutebirds&lt;/a&gt; &lt;a href=&quot;https://www.tiktok.com/music/Sounds-of-Pigeon-feat-National-Geographic-Soundscapes-Soothing-Sounds-Nature-Sounds-New-Age-Relaxing-Nature-Sound-White-Noise-Sounds-For-Sleep-7071381185046038530?refer=embed&quot; target=&quot;_blank&quot; title=&quot;♬ Sounds of Pigeon (feat. National Geographic Soundscapes, Soothing Sounds, Nature Sounds New Age, Relaxing Nature Sound &amp;amp; White Noise Sounds For Sleep) - Pigeon Sounds &amp;amp; Animals Sounds &amp;amp; White Noise Ambience&quot;&gt;♬ Sounds of Pigeon (feat. National Geographic Soundscapes, Soothing Sounds, Nature Sounds New Age, Relaxing Nature Sound &amp;amp; White Noise Sounds For Sleep) - Pigeon Sounds &amp;amp; Animals Sounds &amp;amp; White Noise Ambience&lt;/a&gt; &lt;/section&gt; &lt;/blockquote&gt; &lt;script async=&quot;&quot; src=&quot;https://www.tiktok.com/embed.js&quot;&gt;&lt;/script&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2078664025540973577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2078664025540973577?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2078664025540973577'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2078664025540973577'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/03/the-pigeons-get-cooling-off-stations-during-socal-heatwave.html' title='The pigeons get cooling off stations, during a SoCal heatwave.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>Pershing Square, 532 S Olive St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.048569 -118.2528917</georss:point><georss:box>5.738335163821155 -153.40914170000002 62.358802836178846 -83.0966417</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-6066060722107112586</id><published>2026-03-10T22:59:00.000-07:00</published><updated>2026-03-11T00:00:50.648-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ask iPigeon.institute"/><category scheme="http://www.blogger.com/atom/ns#" term="biopic"/><category scheme="http://www.blogger.com/atom/ns#" term="bird feeding"/><category scheme="http://www.blogger.com/atom/ns#" term="Dating"/><category scheme="http://www.blogger.com/atom/ns#" term="history (personal)"/><category scheme="http://www.blogger.com/atom/ns#" term="mental health"/><category scheme="http://www.blogger.com/atom/ns#" term="relationships"/><category scheme="http://www.blogger.com/atom/ns#" term="social media"/><title type='text'>Ask iPigeon.institute: is it lonely, being a pigeon feeder?</title><content type='html'>&lt;p&gt;&amp;nbsp;Recently, &lt;a href=&quot;https://www.tiktok.com/@jay.ammon?_r=1&amp;amp;_t=ZP-94afxqdQYPe&quot; target=&quot;_blank&quot;&gt;I got on to TikTok&lt;/a&gt;, after such a long time having done without it.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_SD8uvq9NpQmLWv1o9o0VqGBMmfTKLhIhTgd1XsejYa_SvjR-N3kn1vAPhtPZEWWuIUJo7NOEyanDEIrdyOdvJiPDtIjdjyKJzwHtwhUq4cbPV2_LwEO6ZFf07Lm94CGcBKC46BQviT57FfVLJskRIMoBlYnA1RlUSKtyMYRLy98XispcqXi53GsPZc/s1668/IMG_2364.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1260&quot; data-original-width=&quot;1668&quot; height=&quot;484&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_SD8uvq9NpQmLWv1o9o0VqGBMmfTKLhIhTgd1XsejYa_SvjR-N3kn1vAPhtPZEWWuIUJo7NOEyanDEIrdyOdvJiPDtIjdjyKJzwHtwhUq4cbPV2_LwEO6ZFf07Lm94CGcBKC46BQviT57FfVLJskRIMoBlYnA1RlUSKtyMYRLy98XispcqXi53GsPZc/w640-h484/IMG_2364.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;I hadn’t much really felt like I “needed” TikTok, but my social media life had started to stagnate, somewhat. I found that a lot of social media users had simply migrated over to TikTok (I put out a couple of sample pigeon videos, and I got a generally higher user engagement rate on TikTok, in the little while I’ve been on there).&amp;nbsp;&lt;/p&gt;&lt;p&gt;In the app, I had the option, as all social media apps have, of adding people to my following list. I guess I was kind of mystified by the platform, upon looking around, a bit, and, for figuring out some things about how things work. I don’t really know what it is, but the content creation aspect of the platform just “feels” more engaging and supporting, and thus, more rewarding than some other outsets of joining social media and posting content.&amp;nbsp;&lt;/p&gt;&lt;p&gt;A lot of people who know me know that I’m super-introverted, so I’m kind of at odds with becoming creative, somewhat, in a social media content sort of way, yet, as a generally jobless person, I often fantasize about ways in which I could make money, regardless of how sensible the fantasy might or might not be. Now, that being the case, I’m not completely jobless, and I have some niche ways in which I pull in money. I still have this confounding factor of that the voices in my head would appear to be condemning me, still, on account of the work I used to do, mostly back in 2006-2012, or so, although my therapists have told me to basically set that aside, and their stance is being supportive of a “successful” and prosperous “me,” to which I’m eager to become, having basically lost my entire 30’s to distractions such as (largely being) voices in my head thing. I guess, on one hand, some folks would call it a person’s conscience, but my experience of this thing became much more interactive, superior, and controlling of my thought and decision making process, often blinding me to my own thoughts and personal volition, having taken this prominent place in my mind, whether it’s in the background, or it’s something I can’t ignore.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Why would I have this odd problem, people must wonder, of me? &lt;a href=&quot;https://www.sciencealert.com/50-year-old-theory-on-schizophrenias-voices-confirmed-by-recent-study&quot; target=&quot;_blank&quot;&gt;Recent articles&lt;/a&gt; I’ve looked at have suggested that it’s entirely an “inner” voice, hinting at that it’s an organic disease. Yet, many schizophrenics, such as myself, at various times, would swear that there’s some other novel entity observing and attempting to control them; the subject(s), in interactive real time. The novelty of it is what I would speculate as being the driving factor that would be schizophrenia at its most visible circumstance in life - the troubled, ranting, and yelling person who’d become dangerously isolated and alienated, in their mind, out in public. &lt;a href=&quot;https://www.psychologytoday.com/us/blog/the-leading-edge/202404/when-hearing-voices-is-not-a-symptom-of-mental-illness&quot; target=&quot;_blank&quot;&gt;Some articles have suggested&lt;/a&gt;, moreso recently, perhaps, that interacting with these voices in the mind does not necessarily constitute a mental illness, whether it be a cultural, spiritual, trauma-based, etc. reason for why some folks speak to voices, and are not considered mentally ill - which is oftentimes how my former peers, and family, as well, have appeared to me, as voices in my mind. They appear to be casually and comfortably navigating the same experience, without having the existential dilemma feature of it, that I, and people like me, feel and experience. Although I haven’t spoken to anyone, coherently, at least, who had ever explained to me what it is, and how they experience it - the voices in their mind, there seems to be a prominent subset of these people who experience schizophrenia, of that they believe that it’s some sort of technology that’s infiltrated their lives. Only time can tell, yet the future seems to be embedding itself in the minds of these lost folks, for various, numerous types of explanations as to their origin and purpose in life.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now, let it be known, I feel that speaking to voices in one’s mind, at least, at this point in history, is generally symptomatic of a narcissistic and unsound mind. Even so, this being the case, I still speak to the voices, when the opportunity to do so, in relative privacy (after all, what’s really private, if people are potentially able to also hear what I’m saying “to myself,” in private), for the sake of alleviating the allure of the phenomenon being a novelty of an intriguing nature - that people can, actually, speak to and hear each other, in opportune times, from remote physical distances, and be heard, and speak, completely absent of any technological device that the person has on them. Numerous theories could abound at why this sort of technology is not known, to people, yet it’s so firmly believed, as such, by sufferers; my take on it is that people are not generally and widely responsible enough yet, and this advancement takes place in experimental individuals, at this time, for the sake of gathering data, and perhaps making progress in the subject and study area.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Anyhow, this type of cognizant dilemma has plagued my mind, for nearly 15 years, now, and it traces back much further in my early adulthood. It’s undoubtedly been the crux upon which my relationships in life have regularly failed - this embedded form of paranoid existence. The latest entreaty to my understanding of it is: “hey! Don’t “actually” take this stuff literally, and go about affecting someone else’s life on account of that you had been hearing things, involving them, and then, go on to bring up what you’re experiencing in the mind - this is all for observation and for understanding.” How annoying is it, when someone reveals their paranoid alternate, inner self, to others? It’s a very touchy part of understanding an individual (or not understanding them), and some folks are portrayed as being very natural and gifted in this form of communication, as though, from having known them, and about their intellectual capacities, they speak as internal entities without causing offense, which is imaginably difficult to pull off.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Anyways, that was a huge disclaimer and introduction to that, and why, I feed pigeons, as a large part of my identity. I prefer not to traumatize and alienate people with these strange beliefs that inhabit themselves in my mind, at least, while I’m working things through, although I have the desire to not be so introverted, a lot of the time, which I feel further alienates me, and, on that note, I’m generally healthier when I’m in a relationship, whether it be platonic or romantic, and I feel that I’ve been working on a lot of things, in life, which could have used some correction, insight, and perspective, that comes with the wisdom of age.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, when the subject matter comes up, in my mind, of that “someone” or other isn’t “interested” in me, romantically :(, I just take things in stride, and wait things out. When I’m put on the spot, like that, I scarcely ever would have an appropriate explanation for why I am the way I am - unattractive to “them,” while navigating the creep factor (being called such suggestive types of names can be ruinous, and I feel that I’ve become too accustomed to hearing some of these names being used). I defer, regularly, to the classic notion of that it’s easier to associate with, and be truthful to, someone who’s not been acquainted with me, much (a stranger), yet. Even so, I have to also defer to Brad Pitt’s character, in Fighting Club, for being a single serving companion to people, as also featuring antisocial traits (he ends up blowing up buildings, for example). I’m not interested in anything nearly of that sort of fantastical statement of largesse, in having the drive to be known, to others, while my innate personality traits are also not condescended upon, through my own willing participation in interacting with others. What I do, by feeding the pigeons, is just a fragile, yet hopeful, project, yet I feel that it ought to seem relatable in that people also pay monthly additional rent, for example, for owning a pet in an apartment setting. I’m simply buying food for the pigeons, and, perhaps, leasing their time with me, given that it’s possible that the city might want to do away with the birds, by the time they start becoming sociable with people - I still don’t know, and I’m at odds, with the loss of the Central Library flock in Downtown LA having gone missing, last year, seemingly not to ever return. They had started to become very friendly with me, although I somewhat felt that some of these staff at the library had different designs upon the space I was using, to feed the birds, daily, and, for that, our purposes for and about the birds would be at odds, although this is all just speculation - there could be various explanations for why the birds left, and never came back.&amp;nbsp;&lt;/p&gt;&lt;p&gt;It’s a tough spot to be put on, this notion of that I offer that I feed the local pigeons, as a prominent feature of myself, and I have to consider that my perspective on things might naturally seem biased, although I am getting older, and I have to come to terms with a more mature and well seasoned tasteful representation of myself, being that old solutions stopped “working,” and for that I generally don’t have very much to say, off hand, about why I don’t have a regular job - I’ve had several jobs, in life, in which I was to be taken on, for the long term, but personal failures stood in the way of my longevity with them, and I’ve got to say that I’m at a loss, for what I should have, or could be, doing, otherwise, in life, had I not made some certain path-defining choices for myself, although this generally pertains to the people I’m connected with, on social media, whom I value very much, for their continued networking connections to me, for that many of them are very successful, in their own careers, in life. It puts things in perspective, for me - how much better ought I be doing, if I could - if I stood to learn something from these single serving interactions in my life, and take away something of wisdom, from them? On one hand, I can’t perform on all of the types of lifestyle and tasks that I see people do, yet I feel that I could, once again, live a successful lifestyle, this time, based on more sound and ethical principles. I know, it’s not that attractive, and I might seem to be poor, amongst the poor and afflicted population amongst whom I live, yet things are not quite that superficially set in place, although I am doing things on a mental health diagnoses prognosis, in life.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Maybe, in hindsight, all of this stuff might just be hyperbole, and we’ll live longer lives, to make up for our shortcomings that we’ve lived through. Maybe other people have their own sensitivities and nuances about them that keep them to themselves, on their own merits, and this is just an awkward time, in life, for humility, being that we were brought up in an age of superficial glamour being currency of the day, for some of us. Finding the right niche, in which I can operate, foreseeably in to the future, is my primary concern, and I ought to not listen to such suggestive intimations in my mind about how so, and what for, of that I’m a late bloomer, perhaps, in starting a family life, at this point (I’m currently nearing my 44th birthday).&amp;nbsp;&lt;/p&gt;&lt;p&gt;Aside from all of that, feeding the pigeons daily is a little and attainable joy that I have, for myself. It’s something I can do, where I check in with my friends, the pigeons, and I witness and experience small rewards and little gems of life, itself, for feeding the birds.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/6066060722107112586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/6066060722107112586?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6066060722107112586'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6066060722107112586'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/03/ask-ipigeoninstitute-is-it-lonely-being-a-pigeon-feeder.html' title='Ask iPigeon.institute: is it lonely, being a pigeon feeder?'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_SD8uvq9NpQmLWv1o9o0VqGBMmfTKLhIhTgd1XsejYa_SvjR-N3kn1vAPhtPZEWWuIUJo7NOEyanDEIrdyOdvJiPDtIjdjyKJzwHtwhUq4cbPV2_LwEO6ZFf07Lm94CGcBKC46BQviT57FfVLJskRIMoBlYnA1RlUSKtyMYRLy98XispcqXi53GsPZc/s72-w640-h484-c/IMG_2364.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Pershing Square, 532 S Olive St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.048569 -118.2528917</georss:point><georss:box>5.738335163821155 -153.40914170000002 62.358802836178846 -83.0966417</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-4555904383524498108</id><published>2026-02-21T15:09:00.000-08:00</published><updated>2026-02-21T15:15:19.158-08:00</updated><title type='text'>Some of the Pershing Square, DTLA pigeons are starting to become brave. </title><content type='html'>&lt;p&gt;&amp;nbsp;A few of the birds at Pershing Square in Downtown Los Angeles are warming up to the idea of eating out of my hand. The other day, one of them even jumped up on my arm to stand there and peck at the seeds in my hand.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div style=&quot;position: relative; width: 100%; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; margin: auto;&quot;&gt;
  &lt;iframe 
    src=&quot;https://www.youtube.com/embed/Dv6LN1FCVFs&quot; 
    style=&quot;position: absolute; top: 0; left: 0; width: 100%; height: 100%;&quot; 
    frameborder=&quot;0&quot; 
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; 
    allowfullscreen&gt;
  &lt;/iframe&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/4555904383524498108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/4555904383524498108?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/4555904383524498108'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/4555904383524498108'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/some-of-pershing-square-dtla-pigeons.html' title='Some of the Pershing Square, DTLA pigeons are starting to become brave. '/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Dv6LN1FCVFs/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-8272163758586000619</id><published>2026-02-19T18:14:00.000-08:00</published><updated>2026-02-19T18:14:32.727-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="accessories"/><category scheme="http://www.blogger.com/atom/ns#" term="camera"/><category scheme="http://www.blogger.com/atom/ns#" term="cute"/><category scheme="http://www.blogger.com/atom/ns#" term="funny"/><category scheme="http://www.blogger.com/atom/ns#" term="lenses"/><category scheme="http://www.blogger.com/atom/ns#" term="memes"/><category scheme="http://www.blogger.com/atom/ns#" term="Pershing Square"/><category scheme="http://www.blogger.com/atom/ns#" term="photography"/><category scheme="http://www.blogger.com/atom/ns#" term="product reviews"/><category scheme="http://www.blogger.com/atom/ns#" term="productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="rainy days"/><title type='text'>Wet pigeons are cuter than pigeons that aren’t wet.</title><content type='html'>&lt;p&gt;An atmospheric river storm hit Southern California, this weekend, and it felt like a much-welcomed event, especially looking back, a bit, to this past year’s wildfire season, which claimed much of Pacific Palisades and Altadena homes in those areas. On a lighter note, however, a rain storm is an opportunity to catch photos that are rarer, in other circumstances.&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS86iYu4QF49LU6qL5YSkzxLk7JynJhp7hH8kY-d2fDUM-P54Hv18KdRcuphpl7-EbZADGPrtjz-W7yz8yfdIGTg6R1dCZIAJGs0J1NVctKtuXROO4fKkGAnxPAwnv6-pz14DW0zQB8_hIsGiR-FPscVavrRGfSJzpBBlhaZnXy8YhcItfBJR_mnE7IbQ/s4032/IMG_1517.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS86iYu4QF49LU6qL5YSkzxLk7JynJhp7hH8kY-d2fDUM-P54Hv18KdRcuphpl7-EbZADGPrtjz-W7yz8yfdIGTg6R1dCZIAJGs0J1NVctKtuXROO4fKkGAnxPAwnv6-pz14DW0zQB8_hIsGiR-FPscVavrRGfSJzpBBlhaZnXy8YhcItfBJR_mnE7IbQ/w640-h480/IMG_1517.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Pershing Square, lately, has&amp;nbsp;&lt;span&gt;been seeing impressive numbers of pigeons show up to hang out on the stairway to the main plaza level of the park.&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;I had a great idea come to me, from my Amazon Vine product reviewing gig, in the form of a clip-on &lt;a href=&quot;https://www.amazon.com/dp/B0FRS2F7M5?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_1&amp;amp;th=1&quot; target=&quot;_blank&quot;&gt;telephoto / macro 2x mobile device lens, by Veedzoens&lt;/a&gt;, for this rainy day, seeing as how the birds had been showing up in such large numbers at Pershing Square, almost like they had taken over the place. What better photogenic opportunity could there be, for capturing some of the flock on camera using my telephoto lens?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCrdY4S6QsB_HHxm3-xy2d9NbKvvWjAh2GfGhPNub4wVBCz232v-1IlP2F0MvcdtAIP52FPHokgSGMj6NU59aHaWFDzyJl2NLjAVDyQjzR7O-39zxKqfvs3kPOIrz3tbjcZFv52NPPidbgtoCf6zSGp9xSMIMT9lqH7DdJOa9WbYRgwRhyphenhyphenue8a7fGKz3o/s4032/IMG_1512.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCrdY4S6QsB_HHxm3-xy2d9NbKvvWjAh2GfGhPNub4wVBCz232v-1IlP2F0MvcdtAIP52FPHokgSGMj6NU59aHaWFDzyJl2NLjAVDyQjzR7O-39zxKqfvs3kPOIrz3tbjcZFv52NPPidbgtoCf6zSGp9xSMIMT9lqH7DdJOa9WbYRgwRhyphenhyphenue8a7fGKz3o/w480-h640/IMG_1512.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The sparrows were the gatekeepers, as I approached the pigeons’ daytime roosting and hang out spot at the nearby stairs.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHbPYxYnrsk1lwIooXNxci1RGVi-E7d6DZnoAYvxGxffwh73tgHlkG7UqD9afAaw1Lh6tmRsygNUcSd9g5K2PwfnVnFqRtXKWuAuPlkwAygb2UxSZfvIz1VUByDeC6rV_JE2emyLUruQySI2Q5bbLxdclKQlFi6cCyHFQNQnYt-jHoaWgLYw2eiPhq-7A/s4032/IMG_1511.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHbPYxYnrsk1lwIooXNxci1RGVi-E7d6DZnoAYvxGxffwh73tgHlkG7UqD9afAaw1Lh6tmRsygNUcSd9g5K2PwfnVnFqRtXKWuAuPlkwAygb2UxSZfvIz1VUByDeC6rV_JE2emyLUruQySI2Q5bbLxdclKQlFi6cCyHFQNQnYt-jHoaWgLYw2eiPhq-7A/w480-h640/IMG_1511.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6pgquJjw3hjFhq9QA6zMnpP4s3jOlZ5I6rIx1dTIUn5uyNhj52YsRw3_fekyUXVNYsIyj1_w-PFKSICA9XrUWN3DzyrT4bs96RZIRxheeO1qOSjykpwS_5r7R1P8nTtJNf3p87woacId-XxN3bHdLUuEP-eGfN5Tz3bQCH5RebGCvWTB1O2TrzuIvFQo/s4032/IMG_1513.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6pgquJjw3hjFhq9QA6zMnpP4s3jOlZ5I6rIx1dTIUn5uyNhj52YsRw3_fekyUXVNYsIyj1_w-PFKSICA9XrUWN3DzyrT4bs96RZIRxheeO1qOSjykpwS_5r7R1P8nTtJNf3p87woacId-XxN3bHdLUuEP-eGfN5Tz3bQCH5RebGCvWTB1O2TrzuIvFQo/w480-h640/IMG_1513.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEk0Zf5OrxwK1Z6Z5EugJKaYtevJ6CO_mkIIxgrfZgaG1rwRyNFeWdF7f9uisvUlKymPRvsFuzCI9o7r6TNZW_K1J3qjOAcBUJDvPahVEdJQONZaLEN5PFp6iF0zyAZrFs7qDY61GBhKBQN2cNWmrvf1o86iLCeDCs6UrnzYcvV1-Jkf5bOBmZK5EjWkQ/s4032/IMG_1514.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEk0Zf5OrxwK1Z6Z5EugJKaYtevJ6CO_mkIIxgrfZgaG1rwRyNFeWdF7f9uisvUlKymPRvsFuzCI9o7r6TNZW_K1J3qjOAcBUJDvPahVEdJQONZaLEN5PFp6iF0zyAZrFs7qDY61GBhKBQN2cNWmrvf1o86iLCeDCs6UrnzYcvV1-Jkf5bOBmZK5EjWkQ/w480-h640/IMG_1514.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now, the lens was made specifically for the iPhone, which has a different sized lens, and different on-device lenses, from my iPad Pro, but I was able to adapt it fairly well, to my device. As you can see, there’s some of the inside of the lens that got captured; this happens when the camera is zoomed out. Aside from that, the optical zoom feature of the lens offers a sharper image, and better close-ups than my standard iPad Pro cameras, which max out at 12 megapixels, for the rear camera.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtfkXVSJPK6EDpUcMF-0gmGatugOVOKYdOnDHQQr_zDUdSkdMWfRcDGImaImBzcBqu5P6JhRXXiUtU0uTgGjvgx9uu8R0C4eYI6uiC14IQ70Htgmtd6aa8IvRq73SAp8PqZyhnMLPuVf4ARCKSI7PS74p32lmDuzbLoDK6PkwfRKfa7f2VZnb-dbf95z0/s3024/IMG_1543.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtfkXVSJPK6EDpUcMF-0gmGatugOVOKYdOnDHQQr_zDUdSkdMWfRcDGImaImBzcBqu5P6JhRXXiUtU0uTgGjvgx9uu8R0C4eYI6uiC14IQ70Htgmtd6aa8IvRq73SAp8PqZyhnMLPuVf4ARCKSI7PS74p32lmDuzbLoDK6PkwfRKfa7f2VZnb-dbf95z0/w640-h640/IMG_1543.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;My new 2x telephoto lens. There’s an attachment that goes with it that the lens screws on to, which is a clip for mounting the camera on the rear camera of a mobile device.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I ended up going out, twice, yesterday, in the rain, for the sake of feeding the pigeons, as it was a lot of fun to have a rainy day, with so many photogenic birds present, and I got to make use of my new telephoto lens for most of the photos captured here, from this day.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WTLO1IwehJgmSBUIoHVX-UeUuvRfb56TVuG9WqEQ03mw1hyiiVRo2ni7XShlwgP5YnOEq8-Mv9b4jr8lNYm8Aw8Si4jkADrd7BbGlFILXpbB1TTC9fxhWq6MphwNi6TWZJMd2JvmZjsOYtIMWUIblWroJVytCxwmW6nd_P_tjnO0nE8DOPfmC9VTUMs/s4032/IMG_1504.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WTLO1IwehJgmSBUIoHVX-UeUuvRfb56TVuG9WqEQ03mw1hyiiVRo2ni7XShlwgP5YnOEq8-Mv9b4jr8lNYm8Aw8Si4jkADrd7BbGlFILXpbB1TTC9fxhWq6MphwNi6TWZJMd2JvmZjsOYtIMWUIblWroJVytCxwmW6nd_P_tjnO0nE8DOPfmC9VTUMs/w640-h480/IMG_1504.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1wsEzMSj1XhOXQwLllkkaIA_CQ19gCogZmY1f8hE9hyphenhyphenfWeax5zRGD1BTehc83zoVI5I3OSiMtIGW7TSlzAo5LYmSm54fcd9iCG8vv0U7l9mPX7Ys6SBJiFliZu2ak5P5dAmueRJz0j2hpMnLfgrf9rZdcTWNuXulVFTrGaLXuejKBYlAeySd-eynJ8yk/s4032/IMG_1509.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1wsEzMSj1XhOXQwLllkkaIA_CQ19gCogZmY1f8hE9hyphenhyphenfWeax5zRGD1BTehc83zoVI5I3OSiMtIGW7TSlzAo5LYmSm54fcd9iCG8vv0U7l9mPX7Ys6SBJiFliZu2ak5P5dAmueRJz0j2hpMnLfgrf9rZdcTWNuXulVFTrGaLXuejKBYlAeySd-eynJ8yk/w480-h640/IMG_1509.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNo99IrS6h5JpNB5rZvEMQchyphenhyphenPHAXafqRcVl98qlqXqOJHBJPWccBn5zCHTK9L0LH0xoGN6EUJwbV4M1jAiNrEuHCRiMgrQTlbbJPQQru3vmw9dyGLyYucsDIvXQ6qpcXxU2KXbK0wUxhSmJzLACFYz1rD41ck3Uj4ahY84zSASNa_yzA5XTDFIIiuXXc/s4032/IMG_1523.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNo99IrS6h5JpNB5rZvEMQchyphenhyphenPHAXafqRcVl98qlqXqOJHBJPWccBn5zCHTK9L0LH0xoGN6EUJwbV4M1jAiNrEuHCRiMgrQTlbbJPQQru3vmw9dyGLyYucsDIvXQ6qpcXxU2KXbK0wUxhSmJzLACFYz1rD41ck3Uj4ahY84zSASNa_yzA5XTDFIIiuXXc/w480-h640/IMG_1523.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO7krh3lAvhGTKd9aCCUlmMdqOERA2gAgVW6OKC1eoaQ7womhcMi5IRXrGjt9QFHrEPUbc9GPRdT2mtjNwA-vhYVdCmfzomQ5Z6bn2yCmIP7XKh3I0QclGHb2pnRdPXF7im8AFvRRVKy98Z2VPxkpGaXkxqyEWgaIToaUbsMmn7dlNzhhdcMc3umjrzNg/s4032/IMG_1518.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO7krh3lAvhGTKd9aCCUlmMdqOERA2gAgVW6OKC1eoaQ7womhcMi5IRXrGjt9QFHrEPUbc9GPRdT2mtjNwA-vhYVdCmfzomQ5Z6bn2yCmIP7XKh3I0QclGHb2pnRdPXF7im8AFvRRVKy98Z2VPxkpGaXkxqyEWgaIToaUbsMmn7dlNzhhdcMc3umjrzNg/w480-h640/IMG_1518.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMFTgUDgifaagWkV_zkRYdqoc39ZDRcMpgYWRHvRSoyaZYJ9rIA6NBD3ZTzkRFIdiLropMTdHi-h3J0EidQWottMs9GiX7aH_uQKmDYZcWeZb3UNEZb7v5XUl8lEEIsAYs-l5lAhzpRQ4gf5L1RZqF6mqzDAnZSE4oG9fHFr1y4KOV_kEaG_9r_yCtCjU/s4032/IMG_1521.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMFTgUDgifaagWkV_zkRYdqoc39ZDRcMpgYWRHvRSoyaZYJ9rIA6NBD3ZTzkRFIdiLropMTdHi-h3J0EidQWottMs9GiX7aH_uQKmDYZcWeZb3UNEZb7v5XUl8lEEIsAYs-l5lAhzpRQ4gf5L1RZqF6mqzDAnZSE4oG9fHFr1y4KOV_kEaG_9r_yCtCjU/w480-h640/IMG_1521.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;I was finally able to get some good close-ups of Muffin, one of the new brown-ish colored pigeons of this flock of birds.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXXeAfj32j-dP4pSj9qra_D9XwlTKKz9RH7uqYrwDIW4LrhBE64_J8OGidS5-pHLPctw752GEsHZxizOZu4DgJewCY2-d805eA3zikt7yWnxrI8y7zZ6gX0cBYkgFfDWs8wA8v0gPEYqnusoZqY6E8MwEpgdgEz53xxhlza4Ntzd6KixuZXQaY8FjCM_k/s4032/IMG_1530.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXXeAfj32j-dP4pSj9qra_D9XwlTKKz9RH7uqYrwDIW4LrhBE64_J8OGidS5-pHLPctw752GEsHZxizOZu4DgJewCY2-d805eA3zikt7yWnxrI8y7zZ6gX0cBYkgFfDWs8wA8v0gPEYqnusoZqY6E8MwEpgdgEz53xxhlza4Ntzd6KixuZXQaY8FjCM_k/w480-h640/IMG_1530.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIjfn3X9AptczFU3_IYBkcAyVNaYnyxFjamuNd5zZmBBwGZdhDdRV7q36nDH8_zuV4hoSqn7AUPFAeoCFVtZipbFZw3h_LXmHf9Wl08ObuBBjx0PDYIAswZ0fILOXRJIyZ_C0r_uacdypjL2n78fxSv78GHSSTGUPWR97kunT2NfQIVP4Jr22S3dXRlK0/s4032/IMG_1531.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIjfn3X9AptczFU3_IYBkcAyVNaYnyxFjamuNd5zZmBBwGZdhDdRV7q36nDH8_zuV4hoSqn7AUPFAeoCFVtZipbFZw3h_LXmHf9Wl08ObuBBjx0PDYIAswZ0fILOXRJIyZ_C0r_uacdypjL2n78fxSv78GHSSTGUPWR97kunT2NfQIVP4Jr22S3dXRlK0/w480-h640/IMG_1531.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjStPlftmi6SLb8GrZo6nQp5DE3s3MvPlgSEo-t9fQ26mAFyxa7UkD1tmgF8KfyvbPNEqZ9mPcREWxh7dDusdekvxIws-q8M8Xm-wPdBwe0mTFBlvc3XE0r3rVk8_ZTD_AXtBmLYpEf8-Wlb4AxujRCU5jZcV2vkAXUNK-AZh6AUWb4u_-hFF4vuL1JEeM/s4032/IMG_1528.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjStPlftmi6SLb8GrZo6nQp5DE3s3MvPlgSEo-t9fQ26mAFyxa7UkD1tmgF8KfyvbPNEqZ9mPcREWxh7dDusdekvxIws-q8M8Xm-wPdBwe0mTFBlvc3XE0r3rVk8_ZTD_AXtBmLYpEf8-Wlb4AxujRCU5jZcV2vkAXUNK-AZh6AUWb4u_-hFF4vuL1JEeM/w480-h640/IMG_1528.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The birds are truly a landmark feature of this part of town. At various several times, during the day, such as after a meal, the pigeons will all fly up in to the air, and follow the leader, as they circle around the high rises, sometimes whisking around to the next street over (Broadway), and some of them fly back over some of the buildings, and they end up roosting back at their lofty places, such as on an apartment building’s ledge, or at the traffic signal. This daily ritual, featuring around 150 birds, or so, at a time, is a signal, at times, to other flock members situated on Broadway, who branch off, from there, to check out different feeding and roosting spots on the next street down, while others may recognize me, and they return to the staircase at Pershing Square, awaiting their meal.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The birds are truly in their top form, when they’re out in the rain, and it’s a rich sensory experience to observe the pigeons as they work out eating their meal, as a flock, as well as during their post-meal socialization moment, and their flying in formation is a beautiful sight to behold.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjar-b_XOgR9-U2VlCAMpxH2Q4v6S_yjQF_82jpaiKRTbk5TK-8NMIDkzlLYcGCcwbamhsQQmN-sykQACt-MGsAfHGh3VyZ00vaT5VgG8TnuoMWHP0Cp3_Ap2Q2bZBZyYWk9BJrNdrTBRLGF131SHJKIphyF4EXRX6AekSnRsUo03Vsa1MvOJETfXTiIfA/s4032/IMG_1534.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjar-b_XOgR9-U2VlCAMpxH2Q4v6S_yjQF_82jpaiKRTbk5TK-8NMIDkzlLYcGCcwbamhsQQmN-sykQACt-MGsAfHGh3VyZ00vaT5VgG8TnuoMWHP0Cp3_Ap2Q2bZBZyYWk9BJrNdrTBRLGF131SHJKIphyF4EXRX6AekSnRsUo03Vsa1MvOJETfXTiIfA/w480-h640/IMG_1534.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The pigeons perch on the traffic lights, as it’s one of their favorite spots to wait around for meal time.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-kPaB6W0FNr19YgHFZizpVw4b1jU8dMm1pJYzX-toKfFBP_Kjz-PRX6phlstJdi7PtQ4GrFw4pCjh17n2xAI_kn5UwkblyzB5HkMA7D2h-TiGTe0m2P_EfUrZwoN5ueAFXeadF8D7k9N6RrEVHpwrcz7bbLFWm1fQBqR7qLRjwaijh5faxCQiBB4Q3YM/s1024/IMG_1544.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;747&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-kPaB6W0FNr19YgHFZizpVw4b1jU8dMm1pJYzX-toKfFBP_Kjz-PRX6phlstJdi7PtQ4GrFw4pCjh17n2xAI_kn5UwkblyzB5HkMA7D2h-TiGTe0m2P_EfUrZwoN5ueAFXeadF8D7k9N6RrEVHpwrcz7bbLFWm1fQBqR7qLRjwaijh5faxCQiBB4Q3YM/w466-h640/IMG_1544.jpeg&quot; width=&quot;466&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Muffin, in the Rain (fan art, inspired by Clifford and Rosemary Ellis’ &lt;i&gt;Antiquaries Prefer Shell, &lt;/i&gt;1934)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Vut7g4XMeA11s1kKCS5cIUZ1cwZSQfST-xTOLLVHfqWemsUg4epWPDzdcEUcvV4SiW3pu4E4xy1EXaMY8X5-XYvfm_U5FiWEQDMn7RbWcpBaKUETEnC4fUeB0uwKIIHejKPwrsJYVvS91gkSU5phNDUa53FCHyJ9D-TU4hsvUdVoF18rKBVYZpYWeBY/s1463/IMG_1566.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1374&quot; data-original-width=&quot;1463&quot; height=&quot;602&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Vut7g4XMeA11s1kKCS5cIUZ1cwZSQfST-xTOLLVHfqWemsUg4epWPDzdcEUcvV4SiW3pu4E4xy1EXaMY8X5-XYvfm_U5FiWEQDMn7RbWcpBaKUETEnC4fUeB0uwKIIHejKPwrsJYVvS91gkSU5phNDUa53FCHyJ9D-TU4hsvUdVoF18rKBVYZpYWeBY/w640-h602/IMG_1566.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Lady Gaga and Muffin, from the Beats1 Zane Lowe interview.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Some more wet pigeon photos from mid-February, 2026.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghIoe4cRSLxiVsO3awonFoUCWkBUvmCI6PvnMQkI33cpYgd6haUsTqahY_cd8sI824j27GeIYn-61jcgiUYua6zxXnahtY1_kPLAmQCh9q4o-PlnY4gkVEVJXdm0CwATp8Orxljs_ckIydGHoO7Ocbwk8_yuJdP71gs-3xBy6RZ7zx7s1vREdLKGJ5h90/s4032/IMG_2231.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghIoe4cRSLxiVsO3awonFoUCWkBUvmCI6PvnMQkI33cpYgd6haUsTqahY_cd8sI824j27GeIYn-61jcgiUYua6zxXnahtY1_kPLAmQCh9q4o-PlnY4gkVEVJXdm0CwATp8Orxljs_ckIydGHoO7Ocbwk8_yuJdP71gs-3xBy6RZ7zx7s1vREdLKGJ5h90/w480-h640/IMG_2231.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDDJO-WNR4HM_jk9xm8LIyh5SDTzB6oooxVtu2VEGR3TZXm7iuSVUlugQjQXyP2EVdpiNaS4xsCCjLnP6S5n4lVxiyxju_8sIt16WQoSZNGzzxqiuJh1Jpb6vnAA_ovXUs5L6sUPXuhGtW8YDuSqPRPXIEPU-4cXAbWb-wRydHHY2KTbHhxzzPFe2_u8Y/s4032/IMG_2232.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDDJO-WNR4HM_jk9xm8LIyh5SDTzB6oooxVtu2VEGR3TZXm7iuSVUlugQjQXyP2EVdpiNaS4xsCCjLnP6S5n4lVxiyxju_8sIt16WQoSZNGzzxqiuJh1Jpb6vnAA_ovXUs5L6sUPXuhGtW8YDuSqPRPXIEPU-4cXAbWb-wRydHHY2KTbHhxzzPFe2_u8Y/w640-h480/IMG_2232.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRJlEEB9wbF_52YfKRD4624C6zRT1l0PhY0TYeHk-5Ejam-NGsLoGtvUg20_EHloCi-jEZcnFQfq2t5zD1iiIywhaEdD9QtxMlJNB9dtlUPlH2TPLMj3iulkAc_Id6E1s3J7slIqEZZiButsc_rRLU-yJKS3AY49MoSqKx3T1xds8iQQ5JQBwTVjlGxvc/s4032/IMG_2237.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRJlEEB9wbF_52YfKRD4624C6zRT1l0PhY0TYeHk-5Ejam-NGsLoGtvUg20_EHloCi-jEZcnFQfq2t5zD1iiIywhaEdD9QtxMlJNB9dtlUPlH2TPLMj3iulkAc_Id6E1s3J7slIqEZZiButsc_rRLU-yJKS3AY49MoSqKx3T1xds8iQQ5JQBwTVjlGxvc/w640-h480/IMG_2237.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx2sjOnMUkne-TBm2G1foROlS4UQZ9P20kPXInJagQQyWuQPREy73J64XbC3czENsVYatcXDVUMWjMAI48ydv3dwkR8Wad5qjeQvwFOpYXeiZcDZ6YS2a0pUqIDWg7DGio7LSEiB9DjfUsVftrUL4oe4uG_Kck5yn6EVUMeuCp6_gbXK8FJwPJAbkM83A/s4032/IMG_2241.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx2sjOnMUkne-TBm2G1foROlS4UQZ9P20kPXInJagQQyWuQPREy73J64XbC3czENsVYatcXDVUMWjMAI48ydv3dwkR8Wad5qjeQvwFOpYXeiZcDZ6YS2a0pUqIDWg7DGio7LSEiB9DjfUsVftrUL4oe4uG_Kck5yn6EVUMeuCp6_gbXK8FJwPJAbkM83A/w480-h640/IMG_2241.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/8272163758586000619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/8272163758586000619?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/8272163758586000619'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/8272163758586000619'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/11/wet-pigeons-are-cuter-than-pigeons-that.html' title='Wet pigeons are cuter than pigeons that aren’t wet.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS86iYu4QF49LU6qL5YSkzxLk7JynJhp7hH8kY-d2fDUM-P54Hv18KdRcuphpl7-EbZADGPrtjz-W7yz8yfdIGTg6R1dCZIAJGs0J1NVctKtuXROO4fKkGAnxPAwnv6-pz14DW0zQB8_hIsGiR-FPscVavrRGfSJzpBBlhaZnXy8YhcItfBJR_mnE7IbQ/s72-w640-h480-c/IMG_1517.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Pershing Square, 532 S Olive St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.048569 -118.2528917</georss:point><georss:box>5.738335163821155 -153.40914170000002 62.358802836178846 -83.0966417</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-7746653740603998102</id><published>2026-02-10T19:47:00.000-08:00</published><updated>2026-02-19T17:32:15.559-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DIY"/><category scheme="http://www.blogger.com/atom/ns#" term="fragrances"/><category scheme="http://www.blogger.com/atom/ns#" term="gas chromatography mass spectrometry (GCMS) analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="headspace fragrances"/><category scheme="http://www.blogger.com/atom/ns#" term="heralds of spring"/><category scheme="http://www.blogger.com/atom/ns#" term="perfumery"/><category scheme="http://www.blogger.com/atom/ns#" term="Perfumer’s Apprentice"/><category scheme="http://www.blogger.com/atom/ns#" term="product reviews"/><title type='text'>A double haul of fragrance components - Late January-Early February 2026</title><content type='html'>&lt;p&gt;&amp;nbsp;The past couple of weeks, or so, have been a whirlwind of fragrance sprayer ingredients mixing. I’d found some very affordable (and, authentic) old favorites that I like, on eBay, namely Spicebomb Extreme, which is for men, and Absolutely Blooming, for women (although I’m using it for myself). I decided to dip in to ladies’ perfume, to boost my room’s aesthetic, and to have some features of femininity in my close proximate area (on me). I’ve been reading that the fragrance is apparently discontinued. Despite these fragrances being old favorites, I started to feel a bit limited, in scent choice, when going out, and I was getting tired of layering the same fragrances on top of each other.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I was longing for some novelty and versatility, so I went with a concept of one of my own creations, a very skeletal prototype of a men’s fragrance, which I named Eau Pigeonoid, at least, for the time being, that’s what it’s named. The basic concept was that the fragrance opens with some citrus brightness, and, subsequently, a woodsy, coniferous, sweet resinous scent, over a chocolate and tonka aroma, which was somewhat a tasty gourmand musky effect that helped ground the composition.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I wanted to make some changes to the formula, so, instead of my original 8 ingredients, I consulted with Google Gemini about the fragrance, in intervals, revealing segments of the original Eau Pigeonoid, combined with some features that I wanted to add, such as rum extract, ambrocenide, which I found to be a very popular deep and rich amber fragrance ingredient, and I had some Ultravanil, as well, from an earlier purchase, that I wanted to throw in to a new composition. I hadn’t really used these ingredients in a fragrance composition, just yet.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, in the course of brainstorming the new version of a fragrance, based upon the general themes of the original, given my additions that I wanted to make room for, Gemini and I worked out a fantastic ingredients list, where I could pull out all the stops, in the case of this purchase of fragrance ingredients. Ambranum is one of my favorites out of the list below, with its resinous incense-like character, like a raw copal resin sort of take. Patchouli Fractions was another stand out favorite, and it went well with Ambranum and Benzoin Ollifac (the Benzoin, from the original recipe.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Since I wasn’t too fond of how cloying the original Eau’s citrus opening was, I wanted to have a more ephemeral and fleeting, natural citrus character to the fragrance, so I went with a natural California Lemon and Lime Terpenes. I’d become intrigued by the potential of implementing terpenes in to my fragrance compositions, rather than trying to sort through a bunch of synthetic or altered aroma chemicals, of which there are many available. As I said, the citrus was initially a bit too much, in the original fragrance composition, and it stuck around a long time, and it made the composition take on sort of a smeared mix mash of fragrance components, whereas I envisioned differently, using terpenes, as they were reputed to have generally the same, or desired, type of effect in a fragrance composition, yet, being that they’re natural and not particularly oily (terpenes can be extracted from essential oils, as one of the components of the oil). With the citrus accord I had, including yuzu, petitgrain, and bergamot, I attained a fresh citrusy opening to the fragrance, as the initial highlight of the scent experience, which, now, starts to settle down and really fade, after about 5 minutes, or so.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I made a couple of different mockups of the new version of Eau Pigeonoid, since I felt that the first one had become too muddy, and it smelled like old men’s aftershave, which is okay, sort of, although I wanted something more cutting edge, and more well-defined. I made a second bottle, which I was happier about, and this time around, I knew the formula better, by memory, so I spent less time conceiving of the number of parts that ought to go in to the fragrance, what order they’re put in, and, I had hoped, with the addition of BHT crystals, the citrus would keep its definition and character, while fading away to allow room for the subsequent woods and sweet musky effect.&lt;/p&gt;&lt;p&gt;I found it surprising, after having made these batches of the remake of Eau Pigeonoid, that Gemini could function so adeptly in the world of fragrance, being that it’s machine based, and, for the fact of that, in general, machines aren’t made to have a sense of smell. For the rum extract component, for example, Gemini recommended giving the rum a new life, with the addition of an oak wood component. I had the choice of trying the absolute, or the CO2, and Gemini recommended the Oakwood CO2, since it had a better character and consistency, within a formulation. I had forgotten what sort of reference I could have, prior to purchasing these ingredients, of a memory of Oak wood’s scent profile, and, upon receiving the product, and sampling Oakwood CO2, I was immediately reminded of the rich, boozy sort of scent of oak casks, for storing and aging rum, for example. The character of oak wood would be a prominent feature, that is to say, in a concept of a true rum aroma.&lt;/p&gt;&lt;p&gt;I bought a few musks, this time around; not the most expensive ones, but, a variety of cheaper and mid-grade musks, since I wanted the dry down of the fragrance to be somewhat light, yet distinct and ethereal. Ethyl Maltol and Ethyl Cyclopentenolone were used in very trace amounts, to achieve a distinct sweet and caramel character to it. I knew that these ingredients were intriguing novelties of this fragrance formulation, yet, also, I imagined that any more than a couple of drops, or a mini scoop of crystals, ought to suffice, since I didn’t want it to smell cheaply sweet. In my original formula, I used Benzoin Ollifac and Tonka Bean Absolute or Key Accord for sweetness.&amp;nbsp;&lt;/p&gt;&lt;p&gt;5-Methyl-2-Phenyl-2-Hexenal took some getting used to, as a cocoa/chocolate component, as it seemed quite bitter, on first impression. Now, it seems more like natural roasted, ground cocoa bean powder, rather, which is good. I was looking for a cheap alternative for a colorless cocoa component, and I tried out Perfumer’s Apprentice’s Cocoa Essence (Natural), which I found to be very cost effective, and, unlike cocoa absolute, which makes the fragrance liquid milky and thickly colored, I was able to implement cocoa notes without compromising the color of the fragrance composition using these two ingredients.&lt;/p&gt;&lt;p&gt;I added some smokiness to the composition, with some Guaiacwood oil, which comes with a pasty consistency. Part of the reason I reformulated my second try at doing this fragrance was that the second original formulation had a bit too much smokiness to it, although I liked the effect of the smokiness in the mix. Other woods that I implemented were Operanide, Iso E Super, Palo Santo Key Accord, Coniferan Pure, Prismantol, and Patchouli Fractions. I truly was fond of the classic, lighter effect of the patchouli fractions, and I applied it fairly liberally and regularly to the formulation, since I didn’t want it to get buried and left behind. I used Cashmeran somewhat like Ambranum, both of which ended up being primary components of the fragrance mix. I threw in a bit of frankincense and myrrh, to complement the resinous aroma that I was going for, here.&amp;nbsp;&lt;/p&gt;&lt;p&gt;There were probably just several other ingredients I used, in addition to the ones mentioned, although likely in much smaller, trace quantities.&amp;nbsp;&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;-webkit-text-size-adjust: auto; border-color: rgb(49, 49, 49); color: #313131; font-family: -apple-system, sans-serif; font-variant-caps: normal; padding-bottom: 10px; padding-top: 10px; width: 630px;&quot;&gt;&lt;tbody style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold;&quot; width=&quot;10%&quot;&gt;SKU:&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; padding-left: 1em;&quot; width=&quot;50%&quot;&gt;Product&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: center;&quot; width=&quot;10%&quot;&gt;Quantity&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: center;&quot; width=&quot;10%&quot;&gt;Price&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right;&quot; width=&quot;20%&quot;&gt;Ext. Price&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1098-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;5-Methyl-2-Phenyl-2-Hexenal-&lt;wbr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/wbr&gt;4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$7.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$7.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;fr-1-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Almond Fragrance Oil **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;bl-155_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Ambranum-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$17.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$17.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1104-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;BHT Crystals-8g (0.28 oz)&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;eo-108_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Blackcurrant Absolute **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$25.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$25.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-720-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Cashmeran® (IFF) **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$16.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$16.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;fr-20-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Cassis (Black Currant) Fragrance Oil **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;bl-212-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Cassis 345F (Firmenich) **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$11.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$11.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;na-6436-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Cocoa Essence (Natural) **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$12.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$12.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1059_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Coniferan Pure **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-920-sz4&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Coumarin (crystalline powder) **-30g (1.05 oz)&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$9.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$9.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-9862-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Ethyl Cyclopentenolone 50% in PG (Firmenich)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$8.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$8.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1200-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Ethyl Linalool-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-501_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Ethyl Maltol crystals-8g (0.28 oz)&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$5.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$5.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-421-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Galaxolide (Musk G)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;eo-7310_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Guaiacwood (Multi-Origin)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-6000-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Habanolide® (Firmenich)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;eo-6505-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Lemon - California **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$14.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$14.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-2424-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Lime Terpenes (Natural) **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$12.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$12.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1194-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Limediene (Bedoukian) **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$21.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$21.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1222-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Muscone (Firmenich) **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$14.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$14.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;eo-217-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Oakwood CO2 Extract **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$9.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$9.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1284_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Operanide (IFF) **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$9.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$9.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-9851_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Patchouli Fractions-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$9.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$9.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-27421-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Precyclemone B (IFF)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1185-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Prismantol (IFF) **-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$15.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$15.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style=&quot;-webkit-text-size-adjust: auto; border-color: rgb(0, 0, 0) rgb(49, 49, 49) rgb(49, 49, 49); border-top-style: solid; border-top-width: 1px; color: #313131; font-family: -apple-system, sans-serif; font-variant-caps: normal; width: 630px;&quot;&gt;&lt;tbody style=&quot;border-color: rgb(0, 0, 0) rgb(49, 49, 49) rgb(49, 49, 49);&quot;&gt;&lt;tr style=&quot;border-color: rgb(0, 0, 0) rgb(49, 49, 49) rgb(49, 49, 49);&quot;&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); vertical-align: top; width: 310px;&quot;&gt;&lt;div style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold;&quot;&gt;Order Notes:&lt;/span&gt;&lt;/div&gt;&lt;div data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;None&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); vertical-align: top; width: 310px;&quot;&gt;&lt;table style=&quot;border-color: rgb(49, 49, 49); color: #313131; width: 100%;&quot;&gt;&lt;tbody style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 118.8125px;&quot;&gt;SubTotal:&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em; vertical-align: top; width: 73.609375px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 88.609375px;&quot;&gt;$277.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 118.8125px;&quot;&gt;Shipping:&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-left: 1em; vertical-align: top; width: 73.609375px;&quot;&gt;UPS Ground&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 88.609375px;&quot;&gt;$13.03&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 118.8125px;&quot;&gt;Tax:&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em; vertical-align: top; width: 73.609375px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 88.609375px;&quot;&gt;$25.89&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 118.8125px;&quot;&gt;Total:&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em; vertical-align: top; width: 73.609375px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 88.609375px;&quot;&gt;$316.67&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;-webkit-text-size-adjust: auto; border-color: rgb(49, 49, 49); color: #313131; font-family: -apple-system, sans-serif; text-align: center;&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7lgcr8U03KPJotcsUwCbQ2iNo03nXJg9el4Og3_oY5NSkUePlqDBJ9_HgY8wSln51zrkajKDCDLJVordAxMpNEEiyZ5vBpVmcIMiBt5VMB6jE-QgbjZQO3aiio4Ysk0NXN0jjB2NbH1mGeqJAXg4Icc6gq9fnDFgIgSkuqejamOeQgeHOaPSI4yNa1AM/s4032/IMG_2137.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7lgcr8U03KPJotcsUwCbQ2iNo03nXJg9el4Og3_oY5NSkUePlqDBJ9_HgY8wSln51zrkajKDCDLJVordAxMpNEEiyZ5vBpVmcIMiBt5VMB6jE-QgbjZQO3aiio4Ysk0NXN0jjB2NbH1mGeqJAXg4Icc6gq9fnDFgIgSkuqejamOeQgeHOaPSI4yNa1AM/w480-h640/IMG_2137.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Some of my current fragrance mixing components, at home.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Later, in early February, I got an inkling, probably from my lengthy discussions with Google Gemini, and, also, for going through most of my ingredients collections I’ve acquired, again, so far, of that the narcissus flower could be done much more justice than could be had, with trying out narcissus and jonquil absolute, both of which I tried out, in small quantities, and, which left me disappointed, being that they both smelled very green, somewhat spicy, and stemmy. I don’t recommend, at all, trying out narcissus and jonquil absolute, this being the case. As it turns out, there is no essential oil in narcissus flowers, which is sometimes the case, with some of the fragrant flowers that are used for their fragrance, so, gas chromatography mass spectrometry analyses much more suitably suffice for recreating the fragrances of such flowers that don’t have essential oils to them. After all, narcissus is known, by and large, for its attractive flowers and richly fragrant scent, of which, paperwhite narcissus have a particular character about its fragrance that immediately sparked nostalgia and longing, the moment Gemini had mentioned it, as our discussions went along, during the course of development.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Although Gemini had neglected, initially, to mention para-cresyl acetate and Para Cresyl Phenyl Acetate (PCPA), one a liquid, the other, powdery crystals, I uncovered that these two components were not only available, from Perfumer’s Apprentice, but that they are also largely considered to be integral in the formulation of a narcissus flowers reconstruction. Indeed, PCPA has a very characteristic floral scent that lends itself strongly to the scent of narcissus flowers. Gemini did not provide the perfect formulation, right off hand, that is to say, but, in the end, it took on my research item additions (PCPA + para-cresyl acetate), and it successfully worked out a beautiful formulation recipe for reconstruction the natural, live fragrance of paperwhite narcissus flowers.&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;-webkit-text-size-adjust: auto; border-color: rgb(49, 49, 49); color: #313131; font-family: -apple-system, sans-serif; font-variant-caps: normal; padding-bottom: 10px; padding-top: 10px; width: 630px;&quot;&gt;&lt;tbody style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold;&quot; width=&quot;10%&quot;&gt;SKU:&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; padding-left: 1em;&quot; width=&quot;50%&quot;&gt;Product&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: center;&quot; width=&quot;10%&quot;&gt;Quantity&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: center;&quot; width=&quot;10%&quot;&gt;Price&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right;&quot; width=&quot;20%&quot;&gt;Ext. Price&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-814-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Benzyl Acetate (Natural)-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$14.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$14.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-580-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Benzyl Alcohol FCC-15ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$11.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$11.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1106-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;&lt;strike&gt;Cedarwood Terpenes-4ml&lt;/strike&gt;&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$7.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$7.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1250-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Eucalyptol (Natural) **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1035-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Indole (Pure) Crystals **-8g (0.28 oz)&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.75&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.75&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;na-6699_sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Linalool (Natural)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1129-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Methyl Benzoate (Natural)-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$9.50&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$9.50&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-2240-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Methyl Isoeugenol-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$7.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$7.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-2143-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Ocimene **-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$8.00&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$8.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-1036-sz2&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Para Cresyl Phenyl Acetate Crystals-8g (0.28 oz)&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$16.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$16.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot; width=&quot;10%&quot;&gt;ac-2551-sz1&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em;&quot; width=&quot;50%&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;Para-cresyl acetate-4ml&lt;/span&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: center;&quot; width=&quot;10%&quot;&gt;1&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-right: 1em; text-align: right;&quot; width=&quot;10%&quot;&gt;$6.25&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right;&quot; width=&quot;20%&quot;&gt;$6.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;6&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style=&quot;-webkit-text-size-adjust: auto; border-color: rgb(0, 0, 0) rgb(49, 49, 49) rgb(49, 49, 49); border-top-style: solid; border-top-width: 1px; color: #313131; font-family: -apple-system, sans-serif; font-variant-caps: normal; width: 630px;&quot;&gt;&lt;tbody style=&quot;border-color: rgb(0, 0, 0) rgb(49, 49, 49) rgb(49, 49, 49);&quot;&gt;&lt;tr style=&quot;border-color: rgb(0, 0, 0) rgb(49, 49, 49) rgb(49, 49, 49);&quot;&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); vertical-align: top; width: 310px;&quot;&gt;&lt;div style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;span data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold;&quot;&gt;Order Notes:&lt;/span&gt;&lt;/div&gt;&lt;div data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem;&quot;&gt;None&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); vertical-align: top; width: 310px;&quot;&gt;&lt;table style=&quot;border-color: rgb(49, 49, 49); color: #313131; width: 100%;&quot;&gt;&lt;tbody style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 105.34375px;&quot;&gt;SubTotal:&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em; vertical-align: top; width: 97.890625px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 77.78125px;&quot;&gt;$99.25&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 105.34375px;&quot;&gt;Shipping:&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-left: 1em; vertical-align: top; width: 97.890625px;&quot;&gt;UPS Ground&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 77.78125px;&quot;&gt;$13.06&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 105.34375px;&quot;&gt;Tax:&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em; vertical-align: top; width: 97.890625px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 77.78125px;&quot;&gt;$9.68&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 105.34375px;&quot;&gt;Total:&lt;/td&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); padding-left: 1em; vertical-align: top; width: 97.890625px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 77.78125px;&quot;&gt;$121.99&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td colspan=&quot;3&quot; style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; font-weight: bold; text-align: right; vertical-align: top; width: 105.34375px;&quot;&gt;Payments:&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-left: 1em; vertical-align: top; width: 97.890625px;&quot;&gt;Gift Card&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 77.78125px;&quot;&gt;$100.00&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-color: rgb(49, 49, 49);&quot;&gt;&lt;td style=&quot;border-color: rgb(49, 49, 49); font-weight: bold; text-align: right; vertical-align: top; width: 105.34375px;&quot;&gt;&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; padding-left: 1em; vertical-align: top; width: 97.890625px;&quot;&gt;CREDITCARD&lt;/td&gt;&lt;td data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; style=&quot;border-color: rgb(49, 49, 49); font-size: 1rem; text-align: right; vertical-align: top; width: 77.78125px;&quot;&gt;$21.99&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;border-color: rgb(49, 49, 49); text-align: center;&quot;&gt;&lt;p style=&quot;color: #313131; font-family: -apple-system, sans-serif;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(49, 49, 49); color: #313131;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(49, 49, 49); color: #313131;&quot;&gt;The final formulation recipe for the reconstitution of paperwhite narcissus flowers, obtained via Gas Chromatography Mass Spectroscopy headspace analysis of the air surrounding the fresh flowers. I made only 10% of the listed parts, for my batch of paperwhite narcissus fragrance oil, since I was just experimenting with creating a headspace flower reconstruction.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(49, 49, 49); color: #313131;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Ingredient&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Parts&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Note&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;(E) -beta-Ocimene&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;500&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat (Pure)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;PCPA (10% Solution in&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;IPM)&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;400&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&amp;lt;-- This delivers 40 parts of scent&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Benzyl Acetate&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;200&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;1,8-Cineole&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;80&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Indole (10% dil.)&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;60&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;(Already diluted)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Linalool&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;50&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Benzy Alcohol&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;30&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Methyl Benzoate&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;20&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Para-Cresyl Acetate&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;10&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Methyl Isoeugenol&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;10&lt;/p&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Neat&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(49, 49, 49); color: #313131;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;In truth, the recipe turned out fantastic, as &lt;span style=&quot;-webkit-text-size-adjust: auto;&quot;&gt;a powerfully diffusive&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;authentic replication of the smell of paperwhite narcissus flowers, with no unnecessary components kept in the formula. I highly recommend this project, which costs about $100 to do, from Perfumer’s Apprentice, for DIY and aspiring fragrance makers. It came out very strong, and one spray of the concentrate, diluted at 25%, at minimum, ends up lasting about 2 hours, or so, on the skin. It smells great, and it’s a suitable season-themed project to do, being that flowering plant bulbs are being sold in gardening stores, around this time of year, paperwhite narcissus bulbs, amongst them.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;color: #313131;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkFE0s76MCJ4LM97qI08TBmwYnJtA3qz3aQHMAUX48tUUaszwqueR9zXj5p1Fro8Of2dQlcud9bcXFh-bOGkD5Lj_mgdukru9RCWXM-nz9EEPLYaP639FhiR-SCdrgVZnu-qs-YP-uhpn1-jtbea-81OVbm525Hxa9iNaQHiw2LM2hwZE_VUCosNdgCs/s2816/IMG_2124.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2816&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkFE0s76MCJ4LM97qI08TBmwYnJtA3qz3aQHMAUX48tUUaszwqueR9zXj5p1Fro8Of2dQlcud9bcXFh-bOGkD5Lj_mgdukru9RCWXM-nz9EEPLYaP639FhiR-SCdrgVZnu-qs-YP-uhpn1-jtbea-81OVbm525Hxa9iNaQHiw2LM2hwZE_VUCosNdgCs/w640-h350/IMG_2124.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A line art illustration of paperwhite narcissus flowers.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;-apple-system, sans-serif&quot; style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;Update: more instructions and tips for making your own reconstitution of paperwhite narcissus.&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;One thing that I should mention is that you’ll need a solvent to keep the oils (and powder - para cresyl phenyl acetate is a powder) diluted in, especially the para cresyl phenyl acetate. One thing to note is that para cresyl phenyl acetate powder is tough to work with - it won’t dissolve easily, at room temperature. I read that putting a glass container in a hot water bath will help the PCPA become diluted, but I didn’t have a glass container like that handy, so I tried plastic. It didn’t work all that well, so I tried diluting the PCPA is more &lt;a href=&quot;ISOPROPYL Myristate Cosmetic... https://www.amazon.com/dp/B084YY8R5Q?ref=ppx_pop_mob_ap_share&quot; target=&quot;_blank&quot;&gt;isopropyl myristate&lt;/a&gt;, a &lt;u&gt;scentless&lt;/u&gt; solvent, related to isopropyl alcohol, somewhat, and it also has the capability to allow dissolved materials to permeate the skin - you could notice some warming effects from some oils, and I found that the paperwhite narcissus oil’s “feel” is somewhat cool, surely on account of the Eucalyptol (1,8-cineole) being present in a kind of small amount. The skin permeation feature of it isn’t too powerful, though. The isopropyl myristate also feels fairly emollient, not quickly evaporative, like isopropyl alcohol.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;So, anyways, I tried diluting the PCPA in more isopropyl myristate, and I didn’t have much success getting the crystalline powder to become diluted in the solvent, although shaking it up in a closed small plastic container did work better, and I got a fair amount of the powder dissolved. I only made 10% of the recipe listed, and I did it as drops being one part. You might want to have a &lt;a href=&quot;MAXUS Digital Pocket Gram Scale... https://www.amazon.com/dp/B07DJBDL6L?ref=ppx_pop_mob_ap_share&quot; target=&quot;_blank&quot;&gt;0.00 scale&lt;/a&gt; handy to measure out your portion of PCPA, which I roughly calculated, for a 10% by drops equivalent weight ratio for the ingredient, to be about half a gram, although I had to account for undissolved crystals that were left in my dilution container, so I added about 1/10th to 1/4 gram more, and the base amount for the formula, which worked out well, was about 1/2 a gram, so up to 0.6g-0.75g of PCPA for the 10% reconstitution formula. The amount of isopropyl myristate I used was pretty heavy handed, at 4 mL. I somewhat wrongly estimated how much workspace I was allowing myself, given that I was working with 5mL spray bottles, as my workspace.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgePiQmZPOV0T_-ZIOqHzugvG25XXId4Um-LNlZux6ycKOXjCq5_abGrzfiQkSkO8o6L9u22ELU76kMqMriu9zm_m0e-zhvfviDx7BDYQ1munlas7nblZn17KCSS_Fizc13LFgcbbi9WgAlBnWPZDEdFe5oOvs14HSOBB32JhuEkQ-OMg8-W8XZ69BzitI/s4032/image.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgePiQmZPOV0T_-ZIOqHzugvG25XXId4Um-LNlZux6ycKOXjCq5_abGrzfiQkSkO8o6L9u22ELU76kMqMriu9zm_m0e-zhvfviDx7BDYQ1munlas7nblZn17KCSS_Fizc13LFgcbbi9WgAlBnWPZDEdFe5oOvs14HSOBB32JhuEkQ-OMg8-W8XZ69BzitI/w640-h480/image.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Para cresyl phenyl acetate crystal powder, and a 5mL spray bottle.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;Giving myself 4mL of isopropyl myristate made it so my container would be overfilled, given the other oils that need to be mixed in, so I ended up splitting the contents between two containers, and, at the end, when I was done mixing the ingredients together, I just poured the contents out of and back in to one another, to mix it easily. So, if you have 4mL of isopropyl myristate to 0.5-0.75g para cresyl phenyl acetate, that’s plenty to dissolve the crystals in, although you have to consider your workspace bottle’s own particular volume capacity. The thing is, is that, &lt;u&gt;shaking the crystals up&lt;/u&gt;, in the solvent, &lt;u&gt;helped to dilute the crystals more than putting my plastic spray bottle in a hot water bath&lt;/u&gt;. This dissolving step is important, because the solubility of the crystals affects the diffusion of the ingredient, when sprayed. It’s quite a powerful ingredient, when sprayed. You have to make sure that the crystals are dissolved well, or else your spray bottle will become clogged with solids, and you would have a hard time measuring out equal portions of concentrate in to separate containers, which is how I did my process - with multiple containers.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtcLr_mpEYFUNeCiUhSeL-RFYroCnGTOgINiwra77HuUGuF-LBt2VDcSq2cbKo70Bak7inweMlogcjxooNyWUecvdG5VUWkB85plPA-dXO59avlnTuBqHc4NoZiKsTKZmLpgiyJf0c3ANpr9xO1h40kBovWVy92ytCZ0mIaKovm_lJJds37Bbkp-rAR-M/s4032/image.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtcLr_mpEYFUNeCiUhSeL-RFYroCnGTOgINiwra77HuUGuF-LBt2VDcSq2cbKo70Bak7inweMlogcjxooNyWUecvdG5VUWkB85plPA-dXO59avlnTuBqHc4NoZiKsTKZmLpgiyJf0c3ANpr9xO1h40kBovWVy92ytCZ0mIaKovm_lJJds37Bbkp-rAR-M/w480-h640/image.jpg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;About half a gram of para cresyl phenyl acetate - a suitable amount for making 10% of the above described formula, which is plenty, to last you several weeks, to several months or more, even if you sprayed it all the time, when you go out.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;Aside from dissolving the crystals, following the recipe is fairly easy and straightforward. You’ll want to have some kind of plastic or glass dropper, to count out the drops per part you’re putting in to your container, and it’s simple to follow the recipe, using 10% of the numbers listed, to create a small amount of fragrance concentrate, which will happen to be a very powerful concentrate, with enough of it to suffice making anywhere from 16 oz. to a half gallon, or so, of dilute hydrosol water. I left my concentrate very powerful, at a 25% dilution, but Gemini advised me of that 1mL of this concentrate would make 16 oz. of hydrosol water.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;If you’ve never mixed fragrances with professional ingredients, you might find some of the ingredients to smell strange, some of them powerfully diffuse and fragrant. Don’t worry, though, the recipe makes an authentic portrayal of paperwhite narcissus flowers, and I’d say that all of the components are necessary, even if you only use 5 drops, 1 drop, etc. for some of them, and 4mL is the minimum you can purchase, from Perfumer’s Apprentice. Note that if you’ve never mixed wanted to make this formula in huge bulk, there’s &lt;a href=&quot;https://consolidated-chemical.com/product/ocimene-high-purity-monoterpene-for-fragrance/?attribute_size=30mL+(1+Fl+Oz)&amp;amp;srsltid=AfmBOorcxlcA8jZwtMT4uRzNr2Oltn_AYeORqorLxePL9qFOPNXolh80xUo&quot; target=&quot;_blank&quot;&gt;Consolidated Chemicals and Solvents’ Ocimene&lt;/a&gt;, being offered in 250mL-1 liter sizes, for cheap prices. You would only require the minimum sized 4mL bottles of each ingredient, to do this project. You definitely should not use the fragrance concentrate undiluted, be sure to mix it in to 4 parts solvent for each 1 part concentrate, at the very minimum. A larger set of &lt;a href=&quot;DNSEN 5 Pack 3.4 oz Travel Spray... https://www.amazon.com/dp/B0FQJZLZSZ?ref=ppx_pop_mob_ap_share&quot; target=&quot;_blank&quot;&gt;travel-sized spray bottles&lt;/a&gt; might make more sense, if you don’t like to go heavy on the fragrance.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;If you wanted to, just for fun, you could compare the fragrance concentrate to the real flowers, ideally in fall or winter, although &lt;a href=&quot;https://www.whiteflowerfarm.com/paperwhites?srsltid=AfmBOorQlfvcKtod1cY8blpvq1loZzpKduUGILvBW4lUe-SNVbqbNJH3&quot; target=&quot;_blank&quot;&gt;some shops may offer the bulbs year-round&lt;/a&gt;. The bulbs are very easy to grow.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;&lt;span style=&quot;caret-color: rgb(49, 49, 49);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiUlObc9iT3wk5ZGgncQpLpZ6LMSru-AaDdpDZ6D_F7DN-m7zG1v_rZgeLPyCLVPl9l6sICkxyapRbmdRzjAHD4l1qInYtSR6_YTX9-RZAEhNavp73f06skA8tEP-VC10NZW2WWVWha4FlfPAdpy_ebsnuJwA9Ak2EYWG41klJjGPhj1p4KvJM-xkvxHQ/s1408/IMG_2248.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;768&quot; data-original-width=&quot;1408&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiUlObc9iT3wk5ZGgncQpLpZ6LMSru-AaDdpDZ6D_F7DN-m7zG1v_rZgeLPyCLVPl9l6sICkxyapRbmdRzjAHD4l1qInYtSR6_YTX9-RZAEhNavp73f06skA8tEP-VC10NZW2WWVWha4FlfPAdpy_ebsnuJwA9Ak2EYWG41klJjGPhj1p4KvJM-xkvxHQ/w640-h350/IMG_2248.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Paperwhite Narcissus flowers in bloom.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #313131;&quot;&gt;Oh! I forgot about indole, which also comes as a powder, for this formula. This powder is much easier to dissolve, and it will dissolve easily, without any hurdles or obstacles in the way. 1 part indole powder (1/10th of a gram) to 9 parts isopropyl myristate. You could also opt for perfumers alcohol, or 190 proof alcohol, for the solvent, instead of isopropyl myristate, but, in general, the initial investment for starting out with a small amount is much higher with the alcohol, and you might also only find large amounts of alcohol (relatively) available.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/7746653740603998102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/7746653740603998102?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/7746653740603998102'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/7746653740603998102'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/a-double-haul-of-fragrance-components.html' title='A double haul of fragrance components - Late January-Early February 2026'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7lgcr8U03KPJotcsUwCbQ2iNo03nXJg9el4Og3_oY5NSkUePlqDBJ9_HgY8wSln51zrkajKDCDLJVordAxMpNEEiyZ5vBpVmcIMiBt5VMB6jE-QgbjZQO3aiio4Ysk0NXN0jjB2NbH1mGeqJAXg4Icc6gq9fnDFgIgSkuqejamOeQgeHOaPSI4yNa1AM/s72-w480-h640-c/IMG_2137.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2083819107372612856</id><published>2026-02-10T04:55:12.106-08:00</published><updated>2026-03-05T04:07:09.011-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio Sweep App V11.1 The Siren</title><content type='html'>&lt;div id=&quot;audio-morph-v11&quot;&gt;
    &lt;style&gt;
        /* --- 1. ISOLATION &amp; RESET --- */
        #audio-morph-v11 {
            all: unset;
            display: block;
            --v11-bg: #1a1a1d;
            --v11-panel: #222225;
            --v11-accent: #ff2a6d; /* Neon Pink/Red */
            --v11-text: #eee;
            --v11-input: #333336;
            
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, monospace;
            background-color: var(--v11-bg) !important;
            color: var(--v11-text) !important;
            width: 100%;
            max-width: 650px;
            margin: 30px auto;
            border-radius: 12px;
            box-shadow: 0 0 60px rgba(255, 42, 109, 0.15);
            box-sizing: border-box;
            text-align: center;
            overflow: hidden;
            border: 1px solid #444;
            line-height: 1.4;
        }

        #audio-morph-v11 * { box-sizing: border-box; font-family: inherit; }
        
        #audio-morph-v11 .v11-inner { 
            padding: 25px; 
            background-color: var(--v11-panel) !important; 
        }

        #audio-morph-v11 h2 {
            margin: 0 0 5px 0 !important;
            color: var(--v11-accent) !important;
            font-size: 24px !important;
            font-weight: 800 !important;
            text-transform: uppercase;
            letter-spacing: 3px;
        }

        /* --- 2. LAYOUT --- */
        #audio-morph-v11 .section-box {
            background: rgba(255,255,255,0.03);
            border-left: 3px solid var(--v11-accent);
            padding: 15px;
            margin-bottom: 15px;
            text-align: left;
            border-radius: 0 6px 6px 0;
            position: relative; 
        }
        
        #audio-morph-v11 .sec-head {
            display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;
        }
        #audio-morph-v11 .sec-title {
            font-size: 11px; font-weight: bold; text-transform: uppercase; color: #888; letter-spacing: 1px;
        }
        
        #audio-morph-v11 .v11-grid { 
            display: grid; grid-template-columns: 1fr 1fr; gap: 20px; 
        }

        /* --- 3. INPUTS --- */
        #audio-morph-v11 label {
            display: block; 
            font-size: 10px; color: #8899a6; text-transform: uppercase; margin-bottom: 4px;
        }

        #audio-morph-v11 input[type=number] {
            width: 100%;
            background: var(--v11-input);
            border: 1px solid #444;
            color: var(--v11-accent);
            padding: 6px 8px;
            border-radius: 4px;
            font-family: monospace;
            font-size: 13px;
            margin-bottom: 5px;
            font-weight: bold;
        }
        
        #audio-morph-v11 input[type=range] {
            width: 100%; margin: 0; height: 6px;
            -webkit-appearance: none; background: #333; border-radius: 3px; cursor: pointer;
        }
        #audio-morph-v11 input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none; height: 16px; width: 16px; border-radius: 50%;
            background: var(--v11-accent); margin-top: -5px; 
            box-shadow: 0 2px 5px rgba(0,0,0,0.5);
        }
        
        #audio-morph-v11 input[type=checkbox] {
            accent-color: var(--v11-accent); width: 14px; height: 14px; cursor: pointer; margin: 0; vertical-align: middle;
        }
        #audio-morph-v11 .chk-label { font-size: 11px; color: #ccc; cursor: pointer; }

        /* --- 4. VISUALS --- */
        #audio-morph-v11 canvas {
            display: block; width: 100%; height: 100px; 
            background: #000; border: 1px solid #333; margin-bottom: 15px; border-radius: 4px;
        }

        #audio-morph-v11 .main-btn {
            width: 100%; padding: 18px; background: transparent;
            border: 1px solid var(--v11-accent); color: var(--v11-accent);
            font-weight: bold; text-transform: uppercase; border-radius: 4px;
            cursor: pointer; transition: 0.1s; font-size: 14px; letter-spacing: 1px;
        }
        #audio-morph-v11 .main-btn:hover { background: rgba(255, 42, 109, 0.1); }
        #audio-morph-v11 .main-btn.active { background: var(--v11-accent); color: #1a1a1d; }
    &lt;/style&gt;

    &lt;div class=&quot;v11-inner&quot;&gt;
        &lt;h2&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;App not working? Go to the direct link&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a data-originalcomputedfontsize=&quot;16&quot; data-removefontsize=&quot;true&quot; data-saferedirecturl=&quot;https://www.google.com/url?q=https://www.ipigeon.institute/2026/02/audio-sweep-app-v111-siren.html&amp;amp;source=gmail&amp;amp;ust=1772798689467000&amp;amp;usg=AOvVaw1hTklpbWuQFmUDn_sWc7Ur&quot; href=&quot;https://www.ipigeon.institute/2026/02/audio-sweep-app-v111-siren.html&quot; rel=&quot;noreferrer&quot; style=&quot;-webkit-tap-highlight-color: rgba(255, 255, 255, 0.25); -webkit-text-size-adjust: auto; border-color: rgb(66, 133, 244); color: #4285f4; font-family: -apple-system, sans-serif; font-size: 1rem; font-weight: 400; word-spacing: 1px;&quot; target=&quot;_blank&quot;&gt;https://www.ipigeon.institute/&lt;wbr style=&quot;border-color: rgb(66, 133, 244);&quot;&gt;&lt;/wbr&gt;2026/02/audio-sweep-app-v111-s&lt;wbr style=&quot;border-color: rgb(66, 133, 244);&quot;&gt;&lt;/wbr&gt;iren.html&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;Siren Engine V11&lt;/h2&gt;
        &lt;p style=&quot;color: #666666; font-size: 11px; margin: 0px 0px 15px;&quot;&gt;Whoop + Rise Generator&lt;/p&gt;
        
        &lt;canvas id=&quot;v11-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;&lt;span class=&quot;sec-title&quot;&gt;1. Pitch Range (The Rise)&lt;/span&gt;&lt;/div&gt;
            &lt;div class=&quot;v11-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Start Freq (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v11-start-in&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
                    &lt;input id=&quot;v11-start-sl&quot; max=&quot;20000&quot; type=&quot;range&quot; value=&quot;100&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;End Freq (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v11-end-in&quot; type=&quot;number&quot; value=&quot;2000&quot; /&gt;
                    &lt;input id=&quot;v11-end-sl&quot; max=&quot;20000&quot; type=&quot;range&quot; value=&quot;2000&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-top: 10px;&quot;&gt;
                &lt;label&gt;Rise Duration (Seconds)&lt;/label&gt;
                &lt;div style=&quot;display: flex; gap: 10px;&quot;&gt;
                    &lt;input id=&quot;v11-dur-in&quot; style=&quot;width: 80px;&quot; type=&quot;number&quot; value=&quot;10&quot; /&gt;
                    &lt;input id=&quot;v11-dur-sl&quot; max=&quot;60&quot; type=&quot;range&quot; value=&quot;10&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;2. Whoop Generator (Volume LFO)&lt;/span&gt;
                &lt;label class=&quot;chk-label&quot;&gt;&lt;input checked=&quot;&quot; id=&quot;v11-whoop-on&quot; type=&quot;checkbox&quot; /&gt; Active&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v11-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Whoop Speed (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v11-whoop-rate-in&quot; type=&quot;number&quot; value=&quot;4.0&quot; /&gt;
                    &lt;input id=&quot;v11-whoop-rate-sl&quot; max=&quot;20&quot; type=&quot;range&quot; value=&quot;4.0&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Choppiness (%)&lt;/label&gt;
                    &lt;input id=&quot;v11-whoop-depth-in&quot; type=&quot;number&quot; value=&quot;80&quot; /&gt;
                    &lt;input id=&quot;v11-whoop-depth-sl&quot; max=&quot;100&quot; type=&quot;range&quot; value=&quot;80&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
             &lt;p style=&quot;color: #555555; font-size: 10px; margin-top: 8px;&quot;&gt;
                *Controls volume pulsation independent of pitch.
            &lt;/p&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;3. Texture (Grit / FM)&lt;/span&gt;
                &lt;label class=&quot;chk-label&quot;&gt;&lt;input id=&quot;v11-tex-on&quot; type=&quot;checkbox&quot; /&gt; Active&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v11-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Texture Rate (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v11-tex-rate-in&quot; type=&quot;number&quot; value=&quot;50&quot; /&gt;
                    &lt;input id=&quot;v11-tex-rate-sl&quot; max=&quot;200&quot; type=&quot;range&quot; value=&quot;50&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Depth (%)&lt;/label&gt;
                    &lt;input id=&quot;v11-tex-depth-in&quot; type=&quot;number&quot; value=&quot;20&quot; /&gt;
                    &lt;input id=&quot;v11-tex-depth-sl&quot; max=&quot;100&quot; type=&quot;range&quot; value=&quot;20&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;main-btn&quot; id=&quot;v11-play&quot;&gt;Initialize Siren&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    // --- 1. STATE ---
    const s = {
        start: 100, end: 2000, dur: 10,
        whoopOn: true, whoopRate: 4.0, whoopDepth: 0.8,
        texOn: false, texRate: 50, texDepth: 0.2,
        playing: false
    };

    let phasePitch = 0.0, phaseWhoop = 0.0, phaseTex = 0.0, lastTime = 0;
    let ac, osc, ampGain, masterGain, ana, loopTmr;

    // --- 2. DOM ---
    const root = document.getElementById(&#39;audio-morph-v11&#39;);
    const el = (id) =&gt; root.querySelector(id);
    
    const cvs = el(&#39;#v11-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);
    const dpr = window.devicePixelRatio || 1;
    cvs.width = cvs.offsetWidth * dpr;
    cvs.height = cvs.offsetHeight * dpr;
    ctx.scale(dpr, dpr);

    // --- 3. SYNC HELPERS ---
    function sync(inId, slId, key, scale=1) {
        const i = el(inId);
        const sl = el(slId);
        i.oninput = e =&gt; {
            let v = parseFloat(e.target.value);
            if(!isNaN(v)) { s[key] = v * scale; sl.value = v; }
        };
        sl.oninput = e =&gt; {
            let v = parseFloat(e.target.value);
            s[key] = v * scale; i.value = v;
        };
    }

    // Wiring inputs
    sync(&#39;#v11-start-in&#39;, &#39;#v11-start-sl&#39;, &#39;start&#39;);
    sync(&#39;#v11-end-in&#39;, &#39;#v11-end-sl&#39;, &#39;end&#39;);
    sync(&#39;#v11-dur-in&#39;, &#39;#v11-dur-sl&#39;, &#39;dur&#39;);
    
    sync(&#39;#v11-whoop-rate-in&#39;, &#39;#v11-whoop-rate-sl&#39;, &#39;whoopRate&#39;);
    sync(&#39;#v11-whoop-depth-in&#39;, &#39;#v11-whoop-depth-sl&#39;, &#39;whoopDepth&#39;, 0.01);
    
    sync(&#39;#v11-tex-rate-in&#39;, &#39;#v11-tex-rate-sl&#39;, &#39;texRate&#39;);
    sync(&#39;#v11-tex-depth-in&#39;, &#39;#v11-tex-depth-sl&#39;, &#39;texDepth&#39;, 0.01);

    el(&#39;#v11-whoop-on&#39;).onchange = e =&gt; s.whoopOn = e.target.checked;
    el(&#39;#v11-tex-on&#39;).onchange = e =&gt; s.texOn = e.target.checked;

    // --- 4. AUDIO ENGINE ---
    function init() {
        const AC = window.AudioContext || window.webkitAudioContext;
        ac = new AC();
        ana = ac.createAnalyser();
        ana.fftSize = 2048;
        ana.smoothingTimeConstant = 0.6;
        
        // Signal Chain: Osc -&gt; AmpGain (Whoop) -&gt; MasterGain -&gt; Analyser -&gt; Dest
        masterGain = ac.createGain();
        masterGain.gain.value = 0.1; // Master Volume
        
        ampGain = ac.createGain();
        ampGain.gain.value = 1.0; 

        ampGain.connect(masterGain);
        masterGain.connect(ana);
        ana.connect(ac.destination);
    }

    function loop() {
        if(!s.playing) return;
        
        const now = ac.currentTime;
        let dt = now - lastTime;
        if(dt &gt; 0.1) dt = 0.1; 
        lastTime = now;

        // --- A. PITCH CALCULATION (THE RISE) ---
        // Sawtooth LFO for Pitch Rise (0 to 1 over &#39;dur&#39; seconds)
        phasePitch += dt * (1 / s.dur);
        if(phasePitch &gt; 1.0) phasePitch -= 1.0;
        
        // Current Base Pitch
        // Linear Interpolation: Start + (Range * Phase)
        let currentPitch = s.start + ((s.end - s.start) * phasePitch);

        // --- B. TEXTURE MODULATION (FM) ---
        // Adds &quot;grit&quot; to the pitch
        if(s.texOn) {
            phaseTex += dt * s.texRate;
            if(phaseTex &gt; 1.0) phaseTex -= 1.0;
            const modTex = Math.sin(phaseTex * Math.PI * 2);
            // +/- deviation based on depth (e.g. +/- 20% of current pitch)
            const deviation = currentPitch * s.texDepth; 
            currentPitch += (deviation * modTex);
        }

        // Apply Pitch
        osc.frequency.setTargetAtTime(currentPitch, now, 0.02);

        // --- C. WHOOP CALCULATION (AM) ---
        // Sine wave for Volume
        if(s.whoopOn) {
            phaseWhoop += dt * s.whoopRate;
            if(phaseWhoop &gt; 1.0) phaseWhoop -= 1.0;
            
            // Standard Sine (-1 to 1) -&gt; (0 to 1)
            const sine = (Math.sin(phaseWhoop * Math.PI * 2) + 1) / 2;
            
            // Apply Depth: 
            // If Depth is 0, volume stays at 1. 
            // If Depth is 1, volume oscillates 0 to 1.
            const vol = 1.0 - (s.whoopDepth * (1.0 - sine));
            
            ampGain.gain.setTargetAtTime(vol, now, 0.02);
        } else {
            ampGain.gain.setTargetAtTime(1.0, now, 0.05);
        }

        loopTmr = setTimeout(loop, 20); // 50fps update loop
    }

    el(&#39;#v11-play&#39;).onclick = () =&gt; {
        if(!ac) init();
        
        if(s.playing) {
            s.playing = false;
            el(&#39;#v11-play&#39;).textContent = &quot;Initialize Siren&quot;;
            el(&#39;#v11-play&#39;).classList.remove(&#39;active&#39;);
            clearTimeout(loopTmr);
            if(osc) { osc.stop(); osc.disconnect(); }
        } else {
            if(ac.state === &#39;suspended&#39;) ac.resume();
            s.playing = true;
            lastTime = ac.currentTime;
            
            // Reset Phases
            phasePitch = 0.0; phaseWhoop = 0.0; phaseTex = 0.0;

            el(&#39;#v11-play&#39;).textContent = &quot;Stop Siren&quot;;
            el(&#39;#v11-play&#39;).classList.add(&#39;active&#39;);

            osc = ac.createOscillator();
            osc.type = &#39;sawtooth&#39;; // Sawtooth cuts through better for sirens
            osc.connect(ampGain);
            osc.start();
            loop();
            draw();
        }
    };

    // VISUALIZER
    function draw() {
        if(!s.playing) return;
        requestAnimationFrame(draw);
        const len = ana.frequencyBinCount;
        const dat = new Uint8Array(len);
        ana.getByteTimeDomainData(dat);

        const w = cvs.width / dpr;
        const h = cvs.height / dpr;
        
        ctx.fillStyle = &#39;#1a1a1d&#39;;
        ctx.fillRect(0,0,w,h);
        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#ff2a6d&#39;;
        ctx.beginPath();
        
        let x = 0; 
        const slice = w * 1.0 / len;
        for(let i=0; i&lt;len; i++) {
            const v = dat[i]/128.0;
            const y = v * h/2;
            i===0 ? ctx.moveTo(x,y) : ctx.lineTo(x,y);
            x+=slice;
        }
        ctx.stroke();
    }
})();
&lt;/script&gt;

</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2083819107372612856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2083819107372612856?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2083819107372612856'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2083819107372612856'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/audio-sweep-app-v111-siren.html' title='Audio Sweep App V11.1 The Siren'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-5613190754554115929</id><published>2026-02-10T04:26:00.000-08:00</published><updated>2026-02-10T04:29:49.502-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio Sweep App V11</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
This version is made to emulate the Black Cat Systems iSweep app, completely, which I produced because the former versions weren&#39;t playing back the sweeps like I remembered them. This one, as you can see, from the default settings, gives an example of an infinite sweep.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;div id=&quot;isweep-replica&quot;&gt;
    &lt;style&gt;
        /* --- 1. ISOLATION &amp; RESET --- */
        #isweep-replica {
            all: unset;
            display: block;
            /* Theme Variables - mimicking the clean look */
            --iso-bg: #f2f2f7; /* iOS Light Gray */
            --iso-panel: #ffffff;
            --iso-text: #000000;
            --iso-accent: #34c759; /* iOS Green for toggle */
            --iso-blue: #007aff; /* iOS Blue for sliders */
            --iso-border: #d1d1d6;
            
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif;
            background-color: var(--iso-bg) !important;
            color: var(--iso-text) !important;
            width: 100%;
            max-width: 450px;
            margin: 30px auto;
            border-radius: 20px;
            box-shadow: 0 10px 40px rgba(0,0,0,0.15);
            box-sizing: border-box;
            overflow: hidden;
            border: 1px solid #ccc;
            line-height: 1.4;
            text-align: left; /* Reset alignment */
        }

        #isweep-replica * { box-sizing: border-box; font-family: inherit; }
        
        #isweep-replica .app-header {
            padding: 20px;
            background: #fff;
            border-bottom: 1px solid var(--iso-border);
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        #isweep-replica h2 {
            margin: 0 !important;
            font-size: 22px !important;
            font-weight: 700 !important;
            color: #000;
        }

        /* ENABLE SWITCH (iOS Style) */
        #isweep-replica .toggle-switch {
            position: relative;
            display: inline-block;
            width: 50px;
            height: 30px;
        }
        #isweep-replica .toggle-switch input { opacity: 0; width: 0; height: 0; }
        #isweep-replica .slider-round {
            position: absolute; cursor: pointer;
            top: 0; left: 0; right: 0; bottom: 0;
            background-color: #e9e9ea;
            transition: .4s;
            border-radius: 34px;
            border: 1px solid #d1d1d6;
        }
        #isweep-replica .slider-round:before {
            position: absolute; content: &quot;&quot;;
            height: 26px; width: 26px;
            left: 1px; bottom: 1px;
            background-color: white;
            transition: .4s;
            border-radius: 50%;
            box-shadow: 0 2px 4px rgba(0,0,0,0.2);
        }
        #isweep-replica input:checked + .slider-round {
            background-color: var(--iso-accent);
            border-color: var(--iso-accent);
        }
        #isweep-replica input:checked + .slider-round:before {
            transform: translateX(20px);
        }

        /* --- CONTENT BODY --- */
        #isweep-replica .app-body {
            padding: 20px;
            background-color: var(--iso-panel);
        }

        /* SLIDERS */
        #isweep-replica .control-row {
            display: flex;
            align-items: center;
            margin-bottom: 25px;
        }
        #isweep-replica .label-col {
            width: 80px;
            font-size: 17px;
            font-weight: 500;
            color: #000;
        }
        #isweep-replica .input-col {
            flex-grow: 1;
            display: flex;
            align-items: center;
        }

        #isweep-replica input[type=range] {
            width: 100%;
            -webkit-appearance: none;
            background: transparent;
        }
        #isweep-replica input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none;
            height: 28px; width: 28px;
            border-radius: 50%;
            background: #ffffff;
            box-shadow: 0 2px 6px rgba(0,0,0,0.3);
            border: 0.5px solid #ddd;
            cursor: pointer;
            margin-top: -12px;
        }
        #isweep-replica input[type=range]::-webkit-slider-runnable-track {
            width: 100%;
            height: 4px;
            background: var(--iso-blue);
            border-radius: 2px;
        }

        /* INPUT BOXES */
        #isweep-replica .input-group {
            display: flex;
            align-items: center;
            margin-bottom: 15px;
        }
        #isweep-replica .input-group label {
            width: 80px;
            font-size: 17px;
            font-weight: 500;
        }
        #isweep-replica input[type=number] {
            flex-grow: 1;
            padding: 10px;
            font-size: 17px;
            border: 1px solid var(--iso-border);
            border-radius: 8px;
            background: #f2f2f7;
            margin-right: 10px;
            font-weight: 600;
        }
        #isweep-replica .unit {
            font-size: 17px;
            font-weight: 500;
            width: 60px;
        }

        /* TOGGLES ROW */
        #isweep-replica .toggle-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-top: 25px;
            border-top: 1px solid #eee;
            padding-top: 15px;
        }
        #isweep-replica .toggle-label {
            font-size: 17px;
            font-weight: 500;
        }

        /* INFO DISPLAY */
        #isweep-replica .info-bar {
            margin-top: 20px;
            font-size: 13px;
            color: #888;
            text-align: center;
            background: #f9f9f9;
            padding: 10px;
            border-radius: 8px;
        }

        #isweep-replica canvas {
            width: 100%;
            height: 60px;
            background: #000;
            border-radius: 8px;
            margin-bottom: 20px;
            display: block;
        }

    &lt;/style&gt;

    &lt;div class=&quot;app-header&quot;&gt;
        &lt;h2&gt;iSweep Clone&lt;/h2&gt;
        &lt;label class=&quot;toggle-switch&quot;&gt;
            &lt;input type=&quot;checkbox&quot; id=&quot;sw-enable&quot;&gt;
            &lt;span class=&quot;slider-round&quot;&gt;&lt;/span&gt;
        &lt;/label&gt;
    &lt;/div&gt;

    &lt;div class=&quot;app-body&quot;&gt;
        
        &lt;canvas id=&quot;sw-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;control-row&quot;&gt;
            &lt;div class=&quot;label-col&quot;&gt;Left:&lt;/div&gt;
            &lt;div class=&quot;input-col&quot;&gt;
                &lt;input type=&quot;range&quot; id=&quot;sw-vol-l&quot; min=&quot;0&quot; max=&quot;1&quot; step=&quot;0.01&quot; value=&quot;0.8&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;control-row&quot;&gt;
            &lt;div class=&quot;label-col&quot;&gt;Right:&lt;/div&gt;
            &lt;div class=&quot;input-col&quot;&gt;
                &lt;input type=&quot;range&quot; id=&quot;sw-vol-r&quot; min=&quot;0&quot; max=&quot;1&quot; step=&quot;0.01&quot; value=&quot;0.8&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label&gt;Start:&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;sw-start&quot; value=&quot;8.1&quot; step=&quot;0.1&quot;&gt;
            &lt;span class=&quot;unit&quot;&gt;Hz&lt;/span&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label&gt;End:&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;sw-end&quot; value=&quot;124.4&quot; step=&quot;0.1&quot;&gt;
            &lt;span class=&quot;unit&quot;&gt;Hz&lt;/span&gt;
        &lt;/div&gt;

        &lt;div class=&quot;input-group&quot;&gt;
            &lt;label&gt;Rate:&lt;/label&gt;
            &lt;input type=&quot;number&quot; id=&quot;sw-rate&quot; value=&quot;1.24184&quot; step=&quot;0.00001&quot;&gt;
            &lt;span class=&quot;unit&quot;&gt;Hz/sec&lt;/span&gt;
        &lt;/div&gt;

        &lt;div class=&quot;info-bar&quot; id=&quot;sw-info&quot;&gt;
            Calculated Duration: -- s
        &lt;/div&gt;

        &lt;div class=&quot;toggle-row&quot;&gt;
            &lt;span class=&quot;toggle-label&quot;&gt;Reverse:&lt;/span&gt;
            &lt;label class=&quot;toggle-switch&quot;&gt;
                &lt;input type=&quot;checkbox&quot; id=&quot;sw-rev&quot;&gt;
                &lt;span class=&quot;slider-round&quot;&gt;&lt;/span&gt;
            &lt;/label&gt;
        &lt;/div&gt;

        &lt;div class=&quot;toggle-row&quot;&gt;
            &lt;span class=&quot;toggle-label&quot;&gt;Logarithmic:&lt;/span&gt;
            &lt;label class=&quot;toggle-switch&quot;&gt;
                &lt;input type=&quot;checkbox&quot; id=&quot;sw-log&quot;&gt;
                &lt;span class=&quot;slider-round&quot;&gt;&lt;/span&gt;
            &lt;/label&gt;
        &lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function(){
    // --- 1. STATE ---
    const s = {
        enabled: false,
        volL: 0.8, volR: 0.8,
        start: 8.1, end: 124.4, rate: 1.24184, // Hz per sec
        reverse: false, log: false
    };

    let ac, osc, merger, gainL, gainR, analyser, loopTimer;
    
    // --- 2. DOM ---
    const root = document.getElementById(&#39;isweep-replica&#39;);
    const el = (sel) =&gt; root.querySelector(sel);
    const cvs = el(&#39;#sw-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);

    // --- 3. LOGIC ---
    function updateCalc() {
        const diff = Math.abs(s.end - s.start);
        const dur = diff / s.rate;
        el(&#39;#sw-info&#39;).textContent = &quot;Loop Duration: &quot; + dur.toFixed(2) + &quot; seconds&quot;;
    }

    // Input Listeners
    el(&#39;#sw-enable&#39;).onchange = e =&gt; { s.enabled = e.target.checked; toggleAudio(); };
    el(&#39;#sw-vol-l&#39;).oninput = e =&gt; { s.volL = +e.target.value; updateVols(); };
    el(&#39;#sw-vol-r&#39;).oninput = e =&gt; { s.volR = +e.target.value; updateVols(); };
    
    el(&#39;#sw-start&#39;).oninput = e =&gt; { s.start = +e.target.value; updateCalc(); };
    el(&#39;#sw-end&#39;).oninput = e =&gt; { s.end = +e.target.value; updateCalc(); };
    el(&#39;#sw-rate&#39;).oninput = e =&gt; { s.rate = +e.target.value; updateCalc(); };

    el(&#39;#sw-rev&#39;).onchange = e =&gt; s.reverse = e.target.checked;
    el(&#39;#sw-log&#39;).onchange = e =&gt; s.log = e.target.checked;

    // --- 4. AUDIO ENGINE ---
    function init() {
        const AC = window.AudioContext || window.webkitAudioContext;
        ac = new AC();
        
        // Signal Path: Osc -&gt; Split to 2 Gains -&gt; Merger -&gt; Destination
        // This allows independent L/R volume control of the same mono signal
        merger = ac.createChannelMerger(2);
        analyser = ac.createAnalyser();
        analyser.fftSize = 2048;

        gainL = ac.createGain();
        gainR = ac.createGain();

        // Connect Gains to Merger (Channel 0=Left, Channel 1=Right)
        gainL.connect(merger, 0, 0);
        gainR.connect(merger, 0, 1);

        merger.connect(analyser);
        analyser.connect(ac.destination);
        
        updateVols();
        draw();
    }

    function updateVols() {
        if(gainL &amp;&amp; gainR) {
            gainL.gain.value = s.volL;
            gainR.gain.value = s.volR;
        }
    }

    function playSweep() {
        if(!s.enabled) return;

        const now = ac.currentTime;

        // 1. Calculate Duration
        // Duration = TotalHzChange / HzPerSec
        let bottom = s.start;
        let top = s.end;
        
        // Handle logic if user types start &gt; end
        if(bottom &gt; top) { let t=bottom; bottom=top; top=t; }

        let range = top - bottom;
        if(range &lt; 0.1) range = 0.1; // safety
        
        let rate = s.rate; 
        if(rate &lt; 0.0001) rate = 0.0001; // safety

        const dur = range / rate;

        // 2. Determine Direction
        let fromFreq = s.reverse ? top : bottom;
        let toFreq = s.reverse ? bottom : top;

        // Log Safety
        if(s.log) {
            if(fromFreq &lt; 0.1) fromFreq = 0.1;
            if(toFreq &lt; 0.1) toFreq = 0.1;
        }

        // 3. Schedule Sweep
        osc.frequency.cancelScheduledValues(now);
        osc.frequency.setValueAtTime(fromFreq, now);

        if(s.log) {
            osc.frequency.exponentialRampToValueAtTime(toFreq, now + dur);
        } else {
            osc.frequency.linearRampToValueAtTime(toFreq, now + dur);
        }

        // 4. Schedule Loop
        // We use setTimeout to trigger the next sweep exactly when this one ends
        loopTimer = setTimeout(playSweep, dur * 1000);
    }

    function toggleAudio() {
        if(!ac) init();

        if(s.enabled) {
            if(ac.state === &#39;suspended&#39;) ac.resume();
            
            osc = ac.createOscillator();
            osc.type = &#39;sine&#39;;
            
            // Connect osc to both L and R gains
            osc.connect(gainL);
            osc.connect(gainR);
            
            osc.start();
            playSweep(); // Start the loop logic

        } else {
            clearTimeout(loopTimer);
            if(osc) {
                try { osc.stop(); osc.disconnect(); } catch(e){}
            }
        }
    }

    // --- 5. VISUALIZER ---
    function draw() {
        requestAnimationFrame(draw);
        if(!s.enabled || !analyser) {
            // Clear canvas if off
            if(ctx) {
                ctx.fillStyle = &#39;#000&#39;;
                ctx.fillRect(0,0,cvs.width,cvs.height);
            }
            return;
        }

        const len = analyser.frequencyBinCount;
        const data = new Uint8Array(len);
        analyser.getByteTimeDomainData(data);

        ctx.fillStyle = &#39;#000&#39;;
        ctx.fillRect(0,0,cvs.width,cvs.height);

        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#34c759&#39;; // Green trace
        ctx.beginPath();
        
        let x = 0; 
        const slice = cvs.width * 1.0 / len;
        
        for(let i=0; i&lt;len; i++) {
            const v = data[i]/128.0;
            const y = v * cvs.height/2;
            i===0 ? ctx.moveTo(x,y) : ctx.lineTo(x,y);
            x+=slice;
        }
        ctx.stroke();
    }
    
    // Initial Calc
    updateCalc();

})();
&lt;/script&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/5613190754554115929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/5613190754554115929?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/5613190754554115929'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/5613190754554115929'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/audio-sweep-app-v11.html' title='Audio Sweep App V11'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-5681659321074323493</id><published>2026-02-03T18:35:00.000-08:00</published><updated>2026-02-03T19:13:25.443-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio Sweep App V10</title><content type='html'>&lt;div id=&quot;audio-morph-v10&quot;&gt;
    &lt;style&gt;
        /* --- 1. ISOLATION &amp; RESET --- */
        #audio-morph-v10 {
            all: unset;
            display: block;
            /* Theme Variables */
            --v10-bg: #0b0f19;
            --v10-panel: #141a26;
            --v10-accent: #00e5ff; /* Cyan for V10 */
            --v10-text: #e0e6ed;
            --v10-input: #1c2536;
            
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, monospace;
            background-color: var(--v10-bg) !important;
            color: var(--v10-text) !important;
            width: 100%;
            max-width: 650px;
            margin: 30px auto;
            border-radius: 12px;
            box-shadow: 0 0 60px rgba(0, 229, 255, 0.1);
            box-sizing: border-box;
            text-align: center;
            overflow: hidden;
            border: 1px solid #2a3b55;
            line-height: 1.4;
        }

        #audio-morph-v10 * { box-sizing: border-box; font-family: inherit; }
        
        #audio-morph-v10 .v10-inner { 
            padding: 25px; 
            background-color: var(--v10-panel) !important; 
        }

        #audio-morph-v10 h2 {
            margin: 0 0 5px 0 !important;
            color: var(--v10-accent) !important;
            font-size: 24px !important;
            font-weight: 800 !important;
            text-transform: uppercase;
            letter-spacing: 3px;
        }

        /* --- 2. LAYOUT --- */
        #audio-morph-v10 .section-box {
            background: rgba(255,255,255,0.02);
            border-left: 3px solid var(--v10-accent);
            padding: 15px;
            margin-bottom: 15px;
            text-align: left;
            border-radius: 0 6px 6px 0;
            position: relative; 
        }
        
        #audio-morph-v10 .sec-head {
            display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;
        }
        #audio-morph-v10 .sec-title {
            font-size: 11px; font-weight: bold; text-transform: uppercase; color: #888; letter-spacing: 1px;
        }
        
        #audio-morph-v10 .sec-opts {
            display: flex; gap: 10px; align-items: center;
        }

        /* GRID for Inputs */
        #audio-morph-v10 .v10-grid { 
            display: grid; grid-template-columns: 1fr 1fr; gap: 20px; 
        }

        /* --- 3. INPUTS &amp; FORMS --- */
        #audio-morph-v10 label {
            display: block; 
            font-size: 10px; color: #8899a6; text-transform: uppercase; margin-bottom: 4px;
        }

        /* Number Inputs */
        #audio-morph-v10 input[type=number] {
            width: 100%;
            background: var(--v10-input);
            border: 1px solid #334;
            color: var(--v10-accent);
            padding: 6px 8px;
            border-radius: 4px;
            font-family: monospace;
            font-size: 13px;
            margin-bottom: 5px;
            font-weight: bold;
        }
        #audio-morph-v10 input[type=number]:focus {
            outline: none; border-color: var(--v10-accent);
        }

        /* Range Sliders */
        #audio-morph-v10 input[type=range] {
            width: 100%; margin: 0; height: 6px;
            -webkit-appearance: none; background: #334; border-radius: 3px; cursor: pointer;
        }
        #audio-morph-v10 input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none; height: 16px; width: 16px; border-radius: 50%;
            background: var(--v10-accent); margin-top: -5px; 
            box-shadow: 0 2px 5px rgba(0,0,0,0.5);
        }
        
        /* Checkbox */
        #audio-morph-v10 input[type=checkbox] {
            accent-color: var(--v10-accent); width: 14px; height: 14px; cursor: pointer; margin: 0; vertical-align: middle;
        }
        #audio-morph-v10 .chk-label { font-size: 11px; color: #ccc; cursor: pointer; }

        /* --- 4. GLOBAL CONTROLS --- */
        #audio-morph-v10 .global-ctrls {
            display: flex; gap: 10px; margin-bottom: 20px;
        }
        
        #audio-morph-v10 .toggle-btn {
            flex: 1; padding: 10px; background: transparent;
            border: 1px solid #445; color: #889;
            font-weight: bold; text-transform: uppercase; border-radius: 4px;
            cursor: pointer; font-size: 11px; transition: 0.2s;
        }
        #audio-morph-v10 .toggle-btn:hover { border-color: var(--v10-accent); color: var(--v10-text); }
        
        #audio-morph-v10 .toggle-btn.active { 
            background: var(--v10-accent); color: #0b0f19; border-color: var(--v10-accent);
        }
        
        /* --- 5. VISUALS --- */
        #audio-morph-v10 canvas {
            display: block; width: 100%; height: 100px; 
            background: #000; border: 1px solid #2a3b55; margin-bottom: 15px; border-radius: 4px;
        }

        #audio-morph-v10 .main-btn {
            width: 100%; padding: 18px; background: transparent;
            border: 1px solid var(--v10-accent); color: var(--v10-accent);
            font-weight: bold; text-transform: uppercase; border-radius: 4px;
            cursor: pointer; transition: 0.1s; font-size: 14px; letter-spacing: 1px;
        }
        #audio-morph-v10 .main-btn:hover { background: rgba(0, 229, 255, 0.1); }
        #audio-morph-v10 .main-btn.active { background: var(--v10-accent); color: #0b0f19; }
    &lt;/style&gt;

    &lt;div class=&quot;v10-inner&quot;&gt;
        &lt;h2&gt;Precision Morph V10&lt;/h2&gt;
        &lt;p style=&quot;color: #666666; font-size: 11px; margin: 0px 0px 15px;&quot;&gt;Range-Based Modulation System&lt;/p&gt;
        
        &lt;canvas id=&quot;v10-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;global-ctrls&quot;&gt;
            &lt;button class=&quot;toggle-btn&quot; id=&quot;v10-log&quot;&gt;Mode: Linear&lt;/button&gt;
            &lt;button class=&quot;toggle-btn&quot; id=&quot;v10-rev&quot;&gt;Reverse Range&lt;/button&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;&lt;span class=&quot;sec-title&quot;&gt;1. Frequency Range &amp;amp; Texture&lt;/span&gt;&lt;/div&gt;
            &lt;div class=&quot;v10-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Start Frequency (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v10-start-in&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
                    &lt;input id=&quot;v10-start-sl&quot; max=&quot;20000&quot; type=&quot;range&quot; value=&quot;100&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;End Frequency (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v10-end-in&quot; type=&quot;number&quot; value=&quot;5000&quot; /&gt;
                    &lt;input id=&quot;v10-end-sl&quot; max=&quot;20000&quot; type=&quot;range&quot; value=&quot;5000&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div style=&quot;margin-top: 15px;&quot;&gt;
                &lt;label&gt;Loop Rate (Grit Texture)&lt;/label&gt;
                &lt;div style=&quot;display: flex; gap: 10px;&quot;&gt;
                    &lt;input id=&quot;v10-rate-in&quot; style=&quot;width: 80px;&quot; type=&quot;number&quot; value=&quot;60&quot; /&gt;
                    &lt;input id=&quot;v10-rate-sl&quot; max=&quot;200&quot; type=&quot;range&quot; value=&quot;60&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;2. Slow Morph (Sine)&lt;/span&gt;
                &lt;label class=&quot;chk-label&quot;&gt;&lt;input checked=&quot;&quot; id=&quot;v10-slow-on&quot; type=&quot;checkbox&quot; /&gt; Active&lt;/label&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v10-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Cycle Time (Sec)&lt;/label&gt;
                    &lt;input id=&quot;v10-slow-time-in&quot; type=&quot;number&quot; value=&quot;30&quot; /&gt;
                    &lt;input id=&quot;v10-slow-time-sl&quot; max=&quot;120&quot; type=&quot;range&quot; value=&quot;30&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Influence (%)&lt;/label&gt;
                    &lt;input id=&quot;v10-slow-mix-in&quot; type=&quot;number&quot; value=&quot;50&quot; /&gt;
                    &lt;input id=&quot;v10-slow-mix-sl&quot; max=&quot;100&quot; type=&quot;range&quot; value=&quot;50&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;3. The Sweeper&lt;/span&gt;
                &lt;div class=&quot;sec-opts&quot;&gt;
                    &lt;label class=&quot;chk-label&quot;&gt;&lt;input id=&quot;v10-bounce&quot; type=&quot;checkbox&quot; /&gt; Bounce&lt;/label&gt;
                    &lt;label class=&quot;chk-label&quot;&gt;&lt;input checked=&quot;&quot; id=&quot;v10-fast-on&quot; type=&quot;checkbox&quot; /&gt; Active&lt;/label&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v10-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Sweep Speed (Hz)&lt;/label&gt;
                    &lt;input id=&quot;v10-fast-rate-in&quot; type=&quot;number&quot; value=&quot;0.2&quot; /&gt;
                    &lt;input id=&quot;v10-fast-rate-sl&quot; max=&quot;5&quot; type=&quot;range&quot; value=&quot;0.2&quot; /&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Influence (%)&lt;/label&gt;
                    &lt;input id=&quot;v10-fast-mix-in&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
                    &lt;input id=&quot;v10-fast-mix-sl&quot; max=&quot;100&quot; type=&quot;range&quot; value=&quot;100&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button class=&quot;main-btn&quot; id=&quot;v10-play&quot;&gt;Initialize System&lt;/button&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    // --- 1. STATE ---
    const s = {
        start: 100, end: 5000, rate: 60,
        isLog: false, isRev: false,
        slowOn: true, slowTime: 30, slowMix: 0.5,
        fastOn: true, fastRate: 0.2, fastMix: 1.0, fastBounce: false,
        playing: false
    };

    let phaseSlow = 0.0, phaseFast = 0.0, lastTime = 0;
    let ac, osc, gain, ana, loopTmr;

    // --- 2. DOM ---
    const root = document.getElementById(&#39;audio-morph-v10&#39;);
    const el = (id) =&gt; root.querySelector(id);
    
    const cvs = el(&#39;#v10-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);
    const dpr = window.devicePixelRatio || 1;
    cvs.width = cvs.offsetWidth * dpr;
    cvs.height = cvs.offsetHeight * dpr;
    ctx.scale(dpr, dpr);

    // --- 3. SYNC HELPERS ---
    // Links Input Box &lt;-&gt; Slider
    function sync(inId, slId, key, scale=1) {
        const i = el(inId);
        const sl = el(slId);
        i.oninput = e =&gt; {
            let v = parseFloat(e.target.value);
            if(!isNaN(v)) { 
                s[key] = v * scale; 
                sl.value = v; 
            }
        };
        sl.oninput = e =&gt; {
            let v = parseFloat(e.target.value);
            s[key] = v * scale; 
            i.value = v;
        };
    }

    // Wiring up the inputs
    sync(&#39;#v10-start-in&#39;, &#39;#v10-start-sl&#39;, &#39;start&#39;);
    sync(&#39;#v10-end-in&#39;, &#39;#v10-end-sl&#39;, &#39;end&#39;);
    sync(&#39;#v10-rate-in&#39;, &#39;#v10-rate-sl&#39;, &#39;rate&#39;);
    sync(&#39;#v10-slow-time-in&#39;, &#39;#v10-slow-time-sl&#39;, &#39;slowTime&#39;);
    sync(&#39;#v10-slow-mix-in&#39;, &#39;#v10-slow-mix-sl&#39;, &#39;slowMix&#39;, 0.01); // % to decimal
    sync(&#39;#v10-fast-rate-in&#39;, &#39;#v10-fast-rate-sl&#39;, &#39;fastRate&#39;);
    sync(&#39;#v10-fast-mix-in&#39;, &#39;#v10-fast-mix-sl&#39;, &#39;fastMix&#39;, 0.01); // % to decimal

    // Toggles
    el(&#39;#v10-slow-on&#39;).onchange = e =&gt; s.slowOn = e.target.checked;
    el(&#39;#v10-fast-on&#39;).onchange = e =&gt; s.fastOn = e.target.checked;
    el(&#39;#v10-bounce&#39;).onchange = e =&gt; s.fastBounce = e.target.checked;

    // Global Buttons
    el(&#39;#v10-log&#39;).onclick = function() {
        s.isLog = !s.isLog;
        this.textContent = s.isLog ? &quot;Mode: Logarithmic&quot; : &quot;Mode: Linear&quot;;
        this.classList.toggle(&#39;active&#39;);
    };
    el(&#39;#v10-rev&#39;).onclick = function() {
        s.isRev = !s.isRev;
        this.classList.toggle(&#39;active&#39;);
    };

    // --- 4. AUDIO ENGINE ---
    function init() {
        const AC = window.AudioContext || window.webkitAudioContext;
        ac = new AC();
        ana = ac.createAnalyser();
        ana.fftSize = 2048;
        ana.smoothingTimeConstant = 0.6;
        gain = ac.createGain();
        gain.gain.value = 0.1;
        gain.connect(ana);
        ana.connect(ac.destination);
    }

    function loop() {
        if(!s.playing) return;
        
        const now = ac.currentTime;
        let dt = now - lastTime;
        if(dt &gt; 0.1) dt = 0.1; 
        lastTime = now;

        const dur = 1 / s.rate; 

        // --- A. CALCULATE MODULATION (0.0 to 1.0) ---
        
        // 1. Slow Sine
        if(s.slowOn) {
            phaseSlow += dt * (1 / s.slowTime);
            if(phaseSlow &gt; 1.0) phaseSlow -= 1.0;
        }
        const valSlow = (Math.sin(phaseSlow * Math.PI * 2) + 1) / 2;

        // 2. Fast Sweeper
        if(s.fastOn) {
            phaseFast += dt * s.fastRate;
            if(phaseFast &gt; 1.0) phaseFast -= 1.0;
        }
        let valFast = phaseFast; // Sawtooth Default
        if(s.fastBounce) {
            // Triangle logic
            valFast = (phaseFast &lt; 0.5) ? (phaseFast * 2) : ((1.0 - phaseFast) * 2);
        }

        // 3. Mix Modulators
        // We average the active modulators based on their Influence %
        let totalMod = 0;
        let totalWeight = 0;

        if(s.slowOn) {
            totalMod += valSlow * s.slowMix;
            totalWeight += s.slowMix;
        }
        if(s.fastOn) {
            totalMod += valFast * s.fastMix;
            totalWeight += s.fastMix;
        }

        // Normalize (0.0 to 1.0)
        let finalPos = 0;
        if(totalWeight &gt; 0) {
            // If weights are maxed, this keeps it 0-1.
            // We clamp at 1 to prevent overshooting.
            finalPos = totalMod; 
            if(finalPos &gt; 1) finalPos = 1;
        }

        // --- B. APPLY REVERSE ---
        if(s.isRev) {
            finalPos = 1.0 - finalPos;
        }

        // --- C. MAP TO FREQUENCY ---
        let targetFreq = 0;

        if(s.isLog) {
            // Logarithmic Interpolation (Music-like)
            // F = Start * ( (End/Start) ^ Position )
            // Safety: Start cannot be 0
            let safeStart = s.start &lt; 1 ? 1 : s.start;
            let safeEnd = s.end &lt; 1 ? 1 : s.end;
            targetFreq = safeStart * Math.pow((safeEnd / safeStart), finalPos);
        } else {
            // Linear Interpolation (Machine-like)
            // F = Start + (Range * Position)
            targetFreq = s.start + ((s.end - s.start) * finalPos);
        }

        // --- D. SYNTHESIZE ---
        osc.frequency.cancelScheduledValues(now);
        osc.frequency.setValueAtTime(s.start, now); // Anchor at start (creates the texture)
        osc.frequency.linearRampToValueAtTime(targetFreq, now + dur);

        loopTmr = setTimeout(loop, dur * 1000);
    }

    el(&#39;#v10-play&#39;).onclick = () =&gt; {
        if(!ac) init();
        
        if(s.playing) {
            s.playing = false;
            el(&#39;#v10-play&#39;).textContent = &quot;Initialize System&quot;;
            el(&#39;#v10-play&#39;).classList.remove(&#39;active&#39;);
            clearTimeout(loopTmr);
            if(osc) { osc.stop(); osc.disconnect(); }
        } else {
            if(ac.state === &#39;suspended&#39;) ac.resume();
            s.playing = true;
            lastTime = ac.currentTime;
            el(&#39;#v10-play&#39;).textContent = &quot;Stop System&quot;;
            el(&#39;#v10-play&#39;).classList.add(&#39;active&#39;);

            osc = ac.createOscillator();
            osc.connect(gain);
            osc.start();
            loop();
            draw();
        }
    };

    // VISUALIZER
    function draw() {
        if(!s.playing) return;
        requestAnimationFrame(draw);
        const len = ana.frequencyBinCount;
        const dat = new Uint8Array(len);
        ana.getByteTimeDomainData(dat);

        const w = cvs.width / dpr;
        const h = cvs.height / dpr;
        
        ctx.fillStyle = &#39;#0b0f19&#39;;
        ctx.fillRect(0,0,w,h);
        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#00e5ff&#39;;
        ctx.beginPath();
        
        let x = 0; 
        const slice = w * 1.0 / len;
        for(let i=0; i&lt;len; i++) {
            const v = dat[i]/128.0;
            const y = v * h/2;
            i===0 ? ctx.moveTo(x,y) : ctx.lineTo(x,y);
            x+=slice;
        }
        ctx.stroke();
    }
})();
&lt;/script&gt;
&lt;br /&gt;Some interesting values to enter in:&lt;br /&gt;&lt;br /&gt;
&lt;span&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;5&quot; style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;background-color: #f2f2f2; text-align: left;&quot;&gt;
      &lt;th&gt;Image&lt;/th&gt;
      &lt;th&gt;Start (Hz)&lt;/th&gt;
      &lt;th&gt;End (Hz)&lt;/th&gt;
      &lt;th&gt;Rate (Hz/sec)&lt;/th&gt;
      &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1.32645&lt;/td&gt;&lt;td&gt;13225.8&lt;/td&gt;&lt;td&gt;2.14546&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3.32&lt;/td&gt;&lt;td&gt;91.64&lt;/td&gt;&lt;td&gt;121607296&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1.481e+02&lt;/td&gt;&lt;td&gt;4.32e+03&lt;/td&gt;&lt;td&gt;5.65229e+04&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1.4810e+07&lt;/td&gt;&lt;td&gt;432e+03&lt;/td&gt;&lt;td&gt;1.652288e+02&lt;/td&gt;&lt;td&gt;Keyboard visible&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;138.24&lt;/td&gt;&lt;td&gt;1.24164e+05&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;8.1&lt;/td&gt;&lt;td&gt;124.4&lt;/td&gt;&lt;td&gt;1.24164e+05&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;11.75&lt;/td&gt;&lt;td&gt;95.73&lt;/td&gt;&lt;td&gt;1.2212142...&lt;/td&gt;&lt;td&gt;Rate text cutoff&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;11.75&lt;/td&gt;&lt;td&gt;95.73&lt;/td&gt;&lt;td&gt;727.4258e+07&lt;/td&gt;&lt;td&gt;Keyboard visible&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;94.747&lt;/td&gt;&lt;td&gt;123624&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;3.858&lt;/td&gt;&lt;td&gt;94.747&lt;/td&gt;&lt;td&gt;1.22625e+07&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;1.13234&lt;/td&gt;&lt;td&gt;223.877&lt;/td&gt;&lt;td&gt;1.23203e+07&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;1.2345&lt;/td&gt;&lt;td&gt;9.8765&lt;/td&gt;&lt;td&gt;312.3&lt;/td&gt;&lt;td&gt;Reverse: On&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;213.674&lt;/td&gt;&lt;td&gt;22.397&lt;/td&gt;&lt;td&gt;234324&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;90.001&lt;/td&gt;&lt;td&gt;17.017&lt;/td&gt;&lt;td&gt;2.03235e+07&lt;/td&gt;&lt;td&gt;Reverse: On&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;83&lt;/td&gt;&lt;td&gt;92667&lt;/td&gt;&lt;td&gt;Reverse: On&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;203.235&lt;/td&gt;&lt;td&gt;2348.67&lt;/td&gt;&lt;td&gt;120324&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;20.15&lt;/td&gt;&lt;td&gt;323.48&lt;/td&gt;&lt;td&gt;2.03235e+07&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;20.323&lt;/td&gt;&lt;td&gt;23.48&lt;/td&gt;&lt;td&gt;203235&lt;/td&gt;&lt;td&gt;Log Sweep: Off&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;199&lt;/td&gt;&lt;td&gt;136&lt;/td&gt;&lt;td&gt;91356&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;20, 21&lt;/td&gt;&lt;td&gt;118&lt;/td&gt;&lt;td&gt;351&lt;/td&gt;&lt;td&gt;85755&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;22, 23&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;84784&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;24, 25&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;124&lt;/td&gt;&lt;td&gt;64195&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;216&lt;/td&gt;&lt;td&gt;81631&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;132&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;3424&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;216&lt;/td&gt;&lt;td&gt;2678&lt;/td&gt;&lt;td&gt;Log Sweep: Off&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/5681659321074323493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/5681659321074323493?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/5681659321074323493'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/5681659321074323493'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/audio-sweep-app-v10.html' title='Audio Sweep App V10'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>6454 Van Nuys Blvd Ste 100, Van Nuys, CA 91401, USA</georss:featurename><georss:point>34.1878736 -118.4481941</georss:point><georss:box>5.8776397638211577 -153.6044441 62.498107436178849 -83.2919441</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-6899227472629058682</id><published>2026-02-02T07:08:00.000-08:00</published><updated>2026-02-02T07:08:29.135-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio Sweep App V9</title><content type='html'>&lt;div id=&quot;audio-morph-v9&quot;&gt;
    &lt;style&gt;
        /* --- 1. ISOLATION &amp; RESET --- */
        #audio-morph-v9 {
            all: unset;
            display: block;
            /* Theme Variables */
            --v9-bg: #080808;
            --v9-panel: #161616;
            --v9-accent: #ff3d00; /* Red/Orange for V9 */
            --v9-text: #eee;
            
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, monospace;
            background-color: var(--v9-bg) !important;
            color: var(--v9-text) !important;
            width: 100%;
            max-width: 600px;
            margin: 30px auto;
            border-radius: 12px;
            box-shadow: 0 0 60px rgba(255, 61, 0, 0.15);
            box-sizing: border-box;
            text-align: center;
            overflow: hidden;
            border: 1px solid #333;
            line-height: 1.4;
        }

        #audio-morph-v9 * { box-sizing: border-box; font-family: inherit; }
        
        #audio-morph-v9 .v9-inner { 
            padding: 25px; 
            background-color: var(--v9-panel) !important; 
        }

        #audio-morph-v9 h2 {
            margin: 0 0 5px 0 !important;
            color: var(--v9-accent) !important;
            font-size: 24px !important;
            font-weight: 800 !important;
            text-transform: uppercase;
            letter-spacing: 3px;
        }

        /* --- 2. LAYOUT --- */
        #audio-morph-v9 .section-box {
            background: rgba(255,255,255,0.03);
            border-left: 3px solid var(--v9-accent);
            padding: 15px;
            margin-bottom: 15px;
            text-align: left;
            border-radius: 0 6px 6px 0;
            position: relative; 
        }
        
        #audio-morph-v9 .sec-head {
            display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;
        }
        #audio-morph-v9 .sec-title {
            font-size: 11px; font-weight: bold; text-transform: uppercase; color: #888; letter-spacing: 1px;
        }
        
        /* Options Row (Right side of header) */
        #audio-morph-v9 .sec-opts {
            display: flex; gap: 15px; align-items: center;
        }
        #audio-morph-v9 .opt-label {
            font-size: 10px; color: #aaa; text-transform: uppercase; display: flex; align-items: center; gap: 5px;
        }

        #audio-morph-v9 .v9-grid { 
            display: grid; grid-template-columns: 1fr 1fr; gap: 20px; 
        }

        /* --- 3. INPUTS --- */
        #audio-morph-v9 label {
            display: flex; justify-content: space-between; 
            font-size: 10px; color: #aaa; text-transform: uppercase; margin-bottom: 6px;
        }
        #audio-morph-v9 .val { color: var(--v9-accent); font-weight: bold; }

        /* Sliders */
        #audio-morph-v9 input[type=range] {
            position: relative; z-index: 10; width: 100%; margin: 0; height: 20px;
            -webkit-appearance: none; background: transparent; cursor: pointer;
        }
        #audio-morph-v9 input[type=range]::-webkit-slider-runnable-track {
            width: 100%; height: 4px; background: #333; border-radius: 2px; pointer-events: none;
        }
        #audio-morph-v9 input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none; height: 18px; width: 18px; border-radius: 50%;
            background: var(--v9-accent); margin-top: -7px; pointer-events: auto;
            box-shadow: 0 2px 5px rgba(0,0,0,0.5);
        }
        
        /* Checkbox */
        #audio-morph-v9 input[type=checkbox] {
            accent-color: var(--v9-accent); width: 14px; height: 14px; cursor: pointer; margin: 0;
        }

        /* --- 4. VISUALS --- */
        #audio-morph-v9 canvas {
            display: block; width: 100%; height: 100px; 
            background: #000; border: 1px solid #222; margin-bottom: 20px; border-radius: 4px;
        }

        #audio-morph-v9 button {
            width: 100%; padding: 18px; background: transparent;
            border: 1px solid var(--v9-accent); color: var(--v9-accent);
            font-weight: bold; text-transform: uppercase; border-radius: 4px;
            cursor: pointer; transition: 0.1s; font-size: 14px; letter-spacing: 1px;
        }
        #audio-morph-v9 button:hover { background: rgba(255, 61, 0, 0.1); }
        #audio-morph-v9 button.active { background: var(--v9-accent); color: #000; }
    &lt;/style&gt;

    &lt;div class=&quot;v9-inner&quot;&gt;
        &lt;h2&gt;The Shapeshifter&lt;/h2&gt;
        &lt;p style=&quot;font-size:11px; color:#666; margin:0 0 20px 0;&quot;&gt;Selectable Waveform Modulation (V9)&lt;/p&gt;
        
        &lt;canvas id=&quot;v9-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;&lt;span class=&quot;sec-title&quot;&gt;1. Carrier (The Buzz)&lt;/span&gt;&lt;/div&gt;
            &lt;div class=&quot;v9-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Base Freq &lt;span class=&quot;val&quot; id=&quot;v9-base-val&quot;&gt;100 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v9-base&quot; min=&quot;40&quot; max=&quot;400&quot; value=&quot;100&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Loop Rate &lt;span class=&quot;val&quot; id=&quot;v9-rate-val&quot;&gt;60 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v9-rate&quot; min=&quot;20&quot; max=&quot;200&quot; value=&quot;60&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;2. Slow Morph&lt;/span&gt;
                &lt;div class=&quot;sec-opts&quot;&gt;
                    &lt;label class=&quot;opt-label&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;v9-slow-on&quot; checked&gt; Enable&lt;/label&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v9-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Depth &lt;span class=&quot;val&quot; id=&quot;v9-slow-depth-val&quot;&gt;3000 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v9-slow-depth&quot; min=&quot;0&quot; max=&quot;5000&quot; value=&quot;3000&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Cycle Time &lt;span class=&quot;val&quot; id=&quot;v9-slow-time-val&quot;&gt;30 s&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v9-slow-time&quot; min=&quot;5&quot; max=&quot;120&quot; value=&quot;30&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;3. The Sweeper&lt;/span&gt;
                &lt;div class=&quot;sec-opts&quot;&gt;
                     &lt;label class=&quot;opt-label&quot; style=&quot;color: #fff;&quot;&gt;
                        &lt;input type=&quot;checkbox&quot; id=&quot;v9-bounce&quot;&gt; Bounce Mode
                    &lt;/label&gt;
                    &lt;label class=&quot;opt-label&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;v9-fast-on&quot; checked&gt; Enable&lt;/label&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v9-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Sweep Range &lt;span class=&quot;val&quot; id=&quot;v9-fast-depth-val&quot;&gt;8000 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v9-fast-depth&quot; min=&quot;0&quot; max=&quot;20000&quot; value=&quot;8000&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Sweep Speed &lt;span class=&quot;val&quot; id=&quot;v9-fast-rate-val&quot;&gt;0.2 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v9-fast-rate&quot; min=&quot;0.05&quot; max=&quot;5&quot; step=&quot;0.05&quot; value=&quot;0.2&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
             &lt;p style=&quot;font-size: 10px; color: #555; margin-top: 8px; line-height: 1.2;&quot;&gt;
                *Bounce Mode OFF: Rises then resets (Sawtooth).&lt;br&gt;
                *Bounce Mode ON: Rises and Falls (Triangle).
            &lt;/p&gt;
        &lt;/div&gt;

        &lt;button id=&quot;v9-play&quot;&gt;Initialize System&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    // --- 1. STATE ---
    const s = {
        base: 100, rate: 60,
        slowOn: true, slowDepth: 3000, slowTime: 30,
        fastOn: true, fastDepth: 8000, fastRate: 0.2, fastBounce: false, // New Boolean
        playing: false
    };

    let phaseSlow = 0.0;
    let phaseFast = 0.0;
    let lastTime = 0;
    let ac, osc, gain, ana, loopTmr;

    // --- 2. DOM ---
    const root = document.getElementById(&#39;audio-morph-v9&#39;);
    const el = (id) =&gt; root.querySelector(id);
    const txt = (id, v) =&gt; el(id).textContent = v;
    
    // Canvas
    const cvs = el(&#39;#v9-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);
    const dpr = window.devicePixelRatio || 1;
    cvs.width = cvs.offsetWidth * dpr;
    cvs.height = cvs.offsetHeight * dpr;
    ctx.scale(dpr, dpr);

    // --- 3. UI HANDLERS ---
    const updateUI = () =&gt; {
        txt(&#39;#v9-base-val&#39;, s.base + &quot; Hz&quot;);
        txt(&#39;#v9-rate-val&#39;, s.rate + &quot; Hz&quot;);
        txt(&#39;#v9-slow-depth-val&#39;, s.slowDepth + &quot; Hz&quot;);
        txt(&#39;#v9-slow-time-val&#39;, s.slowTime + &quot; s&quot;);
        txt(&#39;#v9-fast-depth-val&#39;, s.fastDepth + &quot; Hz&quot;);
        txt(&#39;#v9-fast-rate-val&#39;, s.fastRate.toFixed(2) + &quot; Hz&quot;);
    };

    el(&#39;#v9-base&#39;).oninput = e =&gt; { s.base = +e.target.value; updateUI(); };
    el(&#39;#v9-rate&#39;).oninput = e =&gt; { s.rate = +e.target.value; updateUI(); };
    
    el(&#39;#v9-slow-on&#39;).onchange = e =&gt; s.slowOn = e.target.checked;
    el(&#39;#v9-slow-depth&#39;).oninput = e =&gt; { s.slowDepth = +e.target.value; updateUI(); };
    el(&#39;#v9-slow-time&#39;).oninput = e =&gt; { s.slowTime = +e.target.value; updateUI(); };

    el(&#39;#v9-fast-on&#39;).onchange = e =&gt; s.fastOn = e.target.checked;
    // New Bounce Toggle
    el(&#39;#v9-bounce&#39;).onchange = e =&gt; s.fastBounce = e.target.checked;
    el(&#39;#v9-fast-depth&#39;).oninput = e =&gt; { s.fastDepth = +e.target.value; updateUI(); };
    el(&#39;#v9-fast-rate&#39;).oninput = e =&gt; { s.fastRate = +e.target.value; updateUI(); };

    // --- 4. AUDIO ENGINE ---
    function init() {
        const AC = window.AudioContext || window.webkitAudioContext;
        ac = new AC();
        ana = ac.createAnalyser();
        ana.fftSize = 2048;
        ana.smoothingTimeConstant = 0.6;
        gain = ac.createGain();
        gain.gain.value = 0.1;
        gain.connect(ana);
        ana.connect(ac.destination);
    }

    function loop() {
        if(!s.playing) return;
        
        const now = ac.currentTime;
        let dt = now - lastTime;
        if(dt &gt; 0.1) dt = 0.1; 
        lastTime = now;

        const dur = 1 / s.rate; 

        // --- MATH ---
        
        // 1. Slow Morph (Sine)
        if(s.slowOn) {
            phaseSlow += dt * (1 / s.slowTime);
            if(phaseSlow &gt; 1.0) phaseSlow -= 1.0;
        }
        const modSlow = (Math.sin(phaseSlow * Math.PI * 2) + 1) / 2;

        // 2. The Sweeper (Sawtooth OR Triangle)
        if(s.fastOn) {
            phaseFast += dt * s.fastRate;
            if(phaseFast &gt; 1.0) phaseFast -= 1.0;
        }

        let modFast = 0;
        
        if(s.fastBounce) {
            // TRIANGLE LOGIC (Rise and Fall)
            // If phase is 0.0 to 0.5 -&gt; Go Up (0 to 1)
            // If phase is 0.5 to 1.0 -&gt; Go Down (1 to 0)
            if(phaseFast &lt; 0.5) {
                modFast = phaseFast * 2; // Map 0.0-0.5 to 0.0-1.0
            } else {
                modFast = (1.0 - phaseFast) * 2; // Map 0.5-1.0 to 1.0-0.0
            }
        } else {
            // SAWTOOTH LOGIC (Rise and Reset)
            modFast = phaseFast;
        }

        // 3. Combine
        let targetFreq = s.base 
                       + (s.slowOn ? (s.slowDepth * modSlow) : 0) 
                       + (s.fastOn ? (s.fastDepth * modFast) : 0);
        
        if(targetFreq &lt; 20) targetFreq = 20;
        if(targetFreq &gt; 22000) targetFreq = 22000;

        // 4. Synthesize
        osc.frequency.cancelScheduledValues(now);
        osc.frequency.setValueAtTime(s.base, now);
        osc.frequency.linearRampToValueAtTime(targetFreq, now + dur);

        loopTmr = setTimeout(loop, dur * 1000);
    }

    el(&#39;#v9-play&#39;).onclick = () =&gt; {
        if(!ac) init();
        
        if(s.playing) {
            s.playing = false;
            el(&#39;#v9-play&#39;).textContent = &quot;Initialize System&quot;;
            el(&#39;#v9-play&#39;).classList.remove(&#39;active&#39;);
            clearTimeout(loopTmr);
            if(osc) { osc.stop(); osc.disconnect(); }
        } else {
            if(ac.state === &#39;suspended&#39;) ac.resume();
            s.playing = true;
            lastTime = ac.currentTime;
            el(&#39;#v9-play&#39;).textContent = &quot;Stop System&quot;;
            el(&#39;#v9-play&#39;).classList.add(&#39;active&#39;);

            osc = ac.createOscillator();
            osc.connect(gain);
            osc.start();
            loop();
            draw();
        }
    };

    // --- 5. VISUALIZER ---
    function draw() {
        if(!s.playing) return;
        requestAnimationFrame(draw);
        const len = ana.frequencyBinCount;
        const dat = new Uint8Array(len);
        ana.getByteTimeDomainData(dat);

        const w = cvs.width / dpr;
        const h = cvs.height / dpr;
        
        ctx.fillStyle = &#39;#080808&#39;;
        ctx.fillRect(0,0,w,h);
        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#ff3d00&#39;;
        ctx.beginPath();
        
        let x = 0; 
        const slice = w * 1.0 / len;
        for(let i=0; i&lt;len; i++) {
            const v = dat[i]/128.0;
            const y = v * h/2;
            i===0 ? ctx.moveTo(x,y) : ctx.lineTo(x,y);
            x+=slice;
        }
        ctx.stroke();
    }
    
    updateUI();
})();
&lt;/script&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/6899227472629058682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/6899227472629058682?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6899227472629058682'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6899227472629058682'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/audio-sweep-app-v9.html' title='Audio Sweep App V9'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-351004522843040700</id><published>2026-02-02T07:02:00.346-08:00</published><updated>2026-02-02T07:02:56.618-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio Sweep App V8</title><content type='html'>&lt;div id=&quot;audio-morph-v8&quot;&gt;
    &lt;style&gt;
        /* --- 1. ISOLATION &amp; RESET --- */
        #audio-morph-v8 {
            all: unset;
            display: block;
            /* Theme Variables */
            --v8-bg: #050505;
            --v8-panel: #111;
            --v8-accent: #ffae00; /* Amber/Gold for V8 */
            --v8-text: #ddd;
            
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, monospace;
            background-color: var(--v8-bg) !important;
            color: var(--v8-text) !important;
            width: 100%;
            max-width: 600px;
            margin: 30px auto;
            border-radius: 12px;
            box-shadow: 0 0 50px rgba(255, 174, 0, 0.15);
            box-sizing: border-box;
            text-align: center;
            overflow: hidden;
            border: 1px solid #333;
            line-height: 1.4;
        }

        /* Force internal box-sizing */
        #audio-morph-v8 * { box-sizing: border-box; font-family: inherit; }
        
        #audio-morph-v8 .v8-inner { 
            padding: 25px; 
            background-color: var(--v8-panel) !important; 
        }

        #audio-morph-v8 h2 {
            margin: 0 0 5px 0 !important;
            color: var(--v8-accent) !important;
            font-size: 24px !important;
            font-weight: 800 !important;
            text-transform: uppercase;
            letter-spacing: 3px;
        }

        /* --- 2. LAYOUT --- */
        #audio-morph-v8 .section-box {
            background: rgba(255,255,255,0.03);
            border-left: 3px solid var(--v8-accent);
            padding: 15px;
            margin-bottom: 15px;
            text-align: left;
            border-radius: 0 6px 6px 0;
            position: relative; /* Context for Z-index */
        }
        
        #audio-morph-v8 .sec-head {
            display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;
        }
        #audio-morph-v8 .sec-title {
            font-size: 11px; font-weight: bold; text-transform: uppercase; color: #888; letter-spacing: 1px;
        }

        #audio-morph-v8 .v8-grid { 
            display: grid; grid-template-columns: 1fr 1fr; gap: 20px; 
        }

        /* --- 3. INPUTS (FIXED Z-INDEX) --- */
        #audio-morph-v8 label {
            display: flex; justify-content: space-between; 
            font-size: 10px; color: #aaa; text-transform: uppercase; margin-bottom: 6px;
        }
        #audio-morph-v8 .val { color: var(--v8-accent); font-weight: bold; }

        /* Range Slider Styling */
        #audio-morph-v8 input[type=range] {
            position: relative; 
            z-index: 10; /* Fixes &quot;unclickable&quot; issue */
            width: 100%; 
            margin: 0; 
            height: 20px; /* Bigger hit area */
            -webkit-appearance: none; 
            background: transparent;
            cursor: pointer;
        }
        
        /* Track */
        #audio-morph-v8 input[type=range]::-webkit-slider-runnable-track {
            width: 100%; height: 4px; background: #333; border-radius: 2px;
            pointer-events: none; /* Let clicks pass to input */
        }
        
        /* Thumb */
        #audio-morph-v8 input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none; 
            height: 18px; width: 18px; 
            border-radius: 50%;
            background: var(--v8-accent); 
            margin-top: -7px;
            pointer-events: auto; /* Re-enable clicks */
            box-shadow: 0 2px 5px rgba(0,0,0,0.5);
        }
        
        #audio-morph-v8 input[type=checkbox] {
            accent-color: var(--v8-accent); 
            width: 16px; height: 16px; 
            cursor: pointer;
        }

        /* --- 4. VISUALS --- */
        #audio-morph-v8 canvas {
            display: block;
            width: 100%; height: 100px; 
            background: #000; 
            border: 1px solid #222; 
            margin-bottom: 20px; 
            border-radius: 4px;
        }

        #audio-morph-v8 button {
            width: 100%; padding: 18px; background: transparent;
            border: 1px solid var(--v8-accent); color: var(--v8-accent);
            font-weight: bold; text-transform: uppercase; border-radius: 4px;
            cursor: pointer; transition: 0.1s; font-size: 14px; letter-spacing: 1px;
        }
        #audio-morph-v8 button:hover { background: rgba(255, 174, 0, 0.1); }
        #audio-morph-v8 button.active { background: var(--v8-accent); color: #000; }
    &lt;/style&gt;

    &lt;div class=&quot;v8-inner&quot;&gt;
        &lt;h2&gt;Smooth Operator&lt;/h2&gt;
        &lt;p style=&quot;font-size:11px; color:#666; margin:0 0 20px 0;&quot;&gt;Phasor-Based Modulation Engine (V8)&lt;/p&gt;
        
        &lt;canvas id=&quot;v8-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;&lt;span class=&quot;sec-title&quot;&gt;1. Carrier (The Buzz)&lt;/span&gt;&lt;/div&gt;
            &lt;div class=&quot;v8-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Base Freq &lt;span class=&quot;val&quot; id=&quot;v8-base-val&quot;&gt;100 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v8-base&quot; min=&quot;40&quot; max=&quot;400&quot; value=&quot;100&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Loop Rate &lt;span class=&quot;val&quot; id=&quot;v8-rate-val&quot;&gt;60 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v8-rate&quot; min=&quot;20&quot; max=&quot;200&quot; value=&quot;60&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;2. Slow Morph (Sine)&lt;/span&gt;
                &lt;input type=&quot;checkbox&quot; id=&quot;v8-slow-on&quot; checked&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v8-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Depth &lt;span class=&quot;val&quot; id=&quot;v8-slow-depth-val&quot;&gt;3000 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v8-slow-depth&quot; min=&quot;0&quot; max=&quot;5000&quot; value=&quot;3000&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Cycle Time &lt;span class=&quot;val&quot; id=&quot;v8-slow-time-val&quot;&gt;30 s&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v8-slow-time&quot; min=&quot;5&quot; max=&quot;120&quot; value=&quot;30&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;3. Infinite Riser (Saw)&lt;/span&gt;
                &lt;input type=&quot;checkbox&quot; id=&quot;v8-fast-on&quot; checked&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v8-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Rise Range &lt;span class=&quot;val&quot; id=&quot;v8-fast-depth-val&quot;&gt;8000 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v8-fast-depth&quot; min=&quot;0&quot; max=&quot;20000&quot; value=&quot;8000&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Rise Speed &lt;span class=&quot;val&quot; id=&quot;v8-fast-rate-val&quot;&gt;0.2 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v8-fast-rate&quot; min=&quot;0.05&quot; max=&quot;5&quot; step=&quot;0.05&quot; value=&quot;0.2&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
             &lt;p style=&quot;font-size: 10px; color: #555; margin-top: 8px; line-height: 1.2;&quot;&gt;
                *Sawtooth Phase: Smoothly accelerates or brakes without resetting position.
            &lt;/p&gt;
        &lt;/div&gt;

        &lt;button id=&quot;v8-play&quot;&gt;Initialize System&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    // --- 1. STATE ---
    const s = {
        base: 100, rate: 60,
        slowOn: true, slowDepth: 3000, slowTime: 30,
        fastOn: true, fastDepth: 8000, fastRate: 0.2,
        playing: false
    };

    // --- 2. PHASORS (The Secret Sauce) ---
    // Instead of time elapsed, we store the current &quot;Phase&quot; (0.0 to 1.0)
    // This allows us to change speed smoothly without jumping.
    let phaseSlow = 0.0;
    let phaseFast = 0.0;
    let lastTime = 0;

    let ac, osc, gain, ana, loopTmr;

    // --- 3. DOM SETUP ---
    const root = document.getElementById(&#39;audio-morph-v8&#39;);
    const el = (id) =&gt; root.querySelector(id);
    const txt = (id, v) =&gt; el(id).textContent = v;
    
    // Canvas
    const cvs = el(&#39;#v8-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);
    const dpr = window.devicePixelRatio || 1;
    cvs.width = cvs.offsetWidth * dpr;
    cvs.height = cvs.offsetHeight * dpr;
    ctx.scale(dpr, dpr);

    // --- 4. UI HANDLERS ---
    const updateUI = () =&gt; {
        txt(&#39;#v8-base-val&#39;, s.base + &quot; Hz&quot;);
        txt(&#39;#v8-rate-val&#39;, s.rate + &quot; Hz&quot;);
        txt(&#39;#v8-slow-depth-val&#39;, s.slowDepth + &quot; Hz&quot;);
        txt(&#39;#v8-slow-time-val&#39;, s.slowTime + &quot; s&quot;);
        txt(&#39;#v8-fast-depth-val&#39;, s.fastDepth + &quot; Hz&quot;);
        txt(&#39;#v8-fast-rate-val&#39;, s.fastRate.toFixed(2) + &quot; Hz&quot;);
    };

    el(&#39;#v8-base&#39;).oninput = e =&gt; { s.base = +e.target.value; updateUI(); };
    el(&#39;#v8-rate&#39;).oninput = e =&gt; { s.rate = +e.target.value; updateUI(); };
    
    el(&#39;#v8-slow-on&#39;).onchange = e =&gt; s.slowOn = e.target.checked;
    el(&#39;#v8-slow-depth&#39;).oninput = e =&gt; { s.slowDepth = +e.target.value; updateUI(); };
    el(&#39;#v8-slow-time&#39;).oninput = e =&gt; { s.slowTime = +e.target.value; updateUI(); };

    el(&#39;#v8-fast-on&#39;).onchange = e =&gt; s.fastOn = e.target.checked;
    el(&#39;#v8-fast-depth&#39;).oninput = e =&gt; { s.fastDepth = +e.target.value; updateUI(); };
    el(&#39;#v8-fast-rate&#39;).oninput = e =&gt; { s.fastRate = +e.target.value; updateUI(); };

    // --- 5. AUDIO ENGINE ---
    function init() {
        const AC = window.AudioContext || window.webkitAudioContext;
        ac = new AC();
        ana = ac.createAnalyser();
        ana.fftSize = 2048;
        ana.smoothingTimeConstant = 0.6;
        gain = ac.createGain();
        gain.gain.value = 0.1;
        gain.connect(ana);
        ana.connect(ac.destination);
    }

    function loop() {
        if(!s.playing) return;
        
        const now = ac.currentTime;
        // Delta Time: How much time passed since last frame?
        // We cap it at 0.1s to prevent huge jumps if tab was backgrounded
        let dt = now - lastTime;
        if(dt &gt; 0.1) dt = 0.1; 
        lastTime = now;

        const dur = 1 / s.rate; 

        // --- PHASOR MATH ---
        
        // 1. Update Slow Phase (Sine)
        // Rate = 1 / Period. So if Time is 60s, rate is 1/60 per second.
        if(s.slowOn) {
            phaseSlow += dt * (1 / s.slowTime);
            if(phaseSlow &gt; 1.0) phaseSlow -= 1.0;
        }
        // Map Phase (0-1) to Sine (-1 to 1) -&gt; scaled to 0 to 1 for Unipolar
        // Actually, for morphing, Up/Down (0 -&gt; 1 -&gt; 0) is usually best.
        // Let&#39;s use Standard Sine: 0 at start, 1 at top, 0 at end.
        const modSlow = (Math.sin(phaseSlow * Math.PI * 2) + 1) / 2;


        // 2. Update Fast Phase (Sawtooth Riser)
        // Rate is simply Hz. 0.2 Hz means it adds 0.2 per second.
        if(s.fastOn) {
            phaseFast += dt * s.fastRate;
            if(phaseFast &gt; 1.0) phaseFast -= 1.0;
        }
        const modFast = phaseFast; // Sawtooth is just the raw phase 0-&gt;1

        // 3. Combine
        // Target = Base + (Slow * Depth) + (Fast * Depth)
        let targetFreq = s.base 
                       + (s.slowOn ? (s.slowDepth * modSlow) : 0) 
                       + (s.fastOn ? (s.fastDepth * modFast) : 0);
        
        if(targetFreq &lt; 20) targetFreq = 20;
        if(targetFreq &gt; 22000) targetFreq = 22000; // Ear safety cap

        // 4. Synthesize
        osc.frequency.cancelScheduledValues(now);
        osc.frequency.setValueAtTime(s.base, now);
        osc.frequency.linearRampToValueAtTime(targetFreq, now + dur);

        // Schedule next
        loopTmr = setTimeout(loop, dur * 1000);
    }

    el(&#39;#v8-play&#39;).onclick = () =&gt; {
        if(!ac) init();
        
        if(s.playing) {
            s.playing = false;
            el(&#39;#v8-play&#39;).textContent = &quot;Initialize System&quot;;
            el(&#39;#v8-play&#39;).classList.remove(&#39;active&#39;);
            clearTimeout(loopTmr);
            if(osc) { osc.stop(); osc.disconnect(); }
        } else {
            if(ac.state === &#39;suspended&#39;) ac.resume();
            s.playing = true;
            
            // Reset Timing
            lastTime = ac.currentTime;
            // Note: We DO NOT reset phaseSlow/phaseFast here. 
            // This allows you to stop/start and resume the &quot;shape&quot; where it left off!
            
            el(&#39;#v8-play&#39;).textContent = &quot;Stop System&quot;;
            el(&#39;#v8-play&#39;).classList.add(&#39;active&#39;);

            osc = ac.createOscillator();
            osc.connect(gain);
            osc.start();
            loop();
            draw();
        }
    };

    // --- 6. VISUALIZER ---
    function draw() {
        if(!s.playing) return;
        requestAnimationFrame(draw);
        const len = ana.frequencyBinCount;
        const dat = new Uint8Array(len);
        ana.getByteTimeDomainData(dat);

        const w = cvs.width / dpr;
        const h = cvs.height / dpr;
        
        ctx.fillStyle = &#39;#050505&#39;;
        ctx.fillRect(0,0,w,h);
        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#ffae00&#39;;
        ctx.beginPath();
        
        let x = 0; 
        const slice = w * 1.0 / len;
        for(let i=0; i&lt;len; i++) {
            const v = dat[i]/128.0;
            const y = v * h/2;
            i===0 ? ctx.moveTo(x,y) : ctx.lineTo(x,y);
            x+=slice;
        }
        ctx.stroke();
    }
    
    updateUI();
})();
&lt;/script&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/351004522843040700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/351004522843040700?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/351004522843040700'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/351004522843040700'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/audio-sweep-app-v8.html' title='Audio Sweep App V8'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-1055767780407453807</id><published>2026-02-02T06:35:00.000-08:00</published><updated>2026-02-02T06:48:23.024-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio Sweep App V5</title><content type='html'>

&lt;div id=&quot;audio-morph-v6&quot;&gt;
    &lt;style&gt;
        /* NUCLEAR CSS RESET */
        #audio-morph-v6 {
            all: unset;
            display: block;
            --v6-bg: #121212;
            --v6-panel: #1a1a1a;
            --v6-accent: #00d4ff; /* Cyan for V6 */
            --v6-text: #ffffff;
            
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, monospace;
            background-color: var(--v6-bg) !important;
            color: var(--v6-text) !important;
            width: 100%;
            max-width: 600px;
            margin: 30px auto;
            border-radius: 12px;
            box-shadow: 0 20px 60px rgba(0,0,0,0.7);
            box-sizing: border-box;
            text-align: center;
            overflow: hidden;
            border: 1px solid #333;
        }

        #audio-morph-v6 * { box-sizing: border-box; font-family: inherit; }
        #audio-morph-v6 .v6-inner { padding: 25px; background-color: var(--v6-panel) !important; }

        #audio-morph-v6 h2 {
            margin: 0 0 5px 0 !important;
            color: var(--v6-accent) !important;
            font-size: 22px !important;
            font-weight: 800 !important;
            text-transform: uppercase;
            letter-spacing: 2px;
        }

        /* SECTIONS */
        #audio-morph-v6 .section-box {
            background: rgba(255,255,255,0.03);
            border-left: 3px solid var(--v6-accent);
            padding: 15px;
            margin-bottom: 15px;
            text-align: left;
            border-radius: 0 4px 4px 0;
        }
        
        #audio-morph-v6 .sec-head {
            display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;
        }
        #audio-morph-v6 .sec-title {
            font-size: 11px; font-weight: bold; text-transform: uppercase; color: #888; letter-spacing: 1px;
        }

        /* GRID &amp; INPUTS */
        #audio-morph-v6 .v6-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
        
        #audio-morph-v6 label {
            display: flex; justify-content: space-between; font-size: 10px; color: #aaa; text-transform: uppercase; margin-bottom: 5px;
        }
        #audio-morph-v6 .val { color: var(--v6-accent); font-weight: bold; }

        #audio-morph-v6 input[type=range] {
            width: 100%; margin: 0; -webkit-appearance: none; background: transparent;
        }
        #audio-morph-v6 input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none; height: 14px; width: 14px; border-radius: 50%;
            background: var(--v6-accent); cursor: pointer; margin-top: -5px;
        }
        #audio-morph-v6 input[type=range]::-webkit-slider-runnable-track {
            width: 100%; height: 4px; background: #444; border-radius: 2px;
        }
        
        /* CHECKBOX */
        #audio-morph-v6 input[type=checkbox] {
            accent-color: var(--v6-accent); transform: scale(1.1); cursor: pointer;
        }

        /* SCOPE */
        #audio-morph-v6 canvas {
            width: 100%; height: 80px; background: #000; border: 1px solid #333; margin-bottom: 20px; border-radius: 4px; display: block;
        }

        /* MASTER BUTTON */
        #audio-morph-v6 button {
            width: 100%; padding: 15px; background: transparent;
            border: 1px solid var(--v6-accent); color: var(--v6-accent);
            font-weight: bold; text-transform: uppercase; border-radius: 4px;
            cursor: pointer; transition: 0.2s; font-size: 14px;
        }
        #audio-morph-v6 button:hover { background: rgba(0, 212, 255, 0.1); }
        #audio-morph-v6 button.active { background: var(--v6-accent); color: #000; }
    &lt;/style&gt;

    &lt;div class=&quot;v6-inner&quot;&gt;
        &lt;h2&gt;Tri-Modulator&lt;/h2&gt;
        &lt;p style=&quot;font-size:11px; color:#666; margin:0 0 20px 0;&quot;&gt;Complex Spectral Synthesis&lt;/p&gt;
        
        &lt;canvas id=&quot;v6-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;1. Carrier (Fast Loop)&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v6-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Base Tone &lt;span class=&quot;val&quot; id=&quot;v6-base-val&quot;&gt;80 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v6-base&quot; min=&quot;40&quot; max=&quot;300&quot; value=&quot;80&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Grit (Rate) &lt;span class=&quot;val&quot; id=&quot;v6-rate-val&quot;&gt;40 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v6-rate&quot; min=&quot;10&quot; max=&quot;150&quot; value=&quot;40&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;2. Slow Morph&lt;/span&gt;
                &lt;input type=&quot;checkbox&quot; id=&quot;v6-slow-on&quot; checked&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v6-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Depth &lt;span class=&quot;val&quot; id=&quot;v6-slow-depth-val&quot;&gt;2000 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v6-slow-depth&quot; min=&quot;0&quot; max=&quot;4000&quot; value=&quot;2000&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Duration &lt;span class=&quot;val&quot; id=&quot;v6-slow-time-val&quot;&gt;20 s&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v6-slow-time&quot; min=&quot;5&quot; max=&quot;60&quot; value=&quot;20&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;section-box&quot;&gt;
            &lt;div class=&quot;sec-head&quot;&gt;
                &lt;span class=&quot;sec-title&quot;&gt;3. Rapid Wobble&lt;/span&gt;
                &lt;input type=&quot;checkbox&quot; id=&quot;v6-fast-on&quot; checked&gt;
            &lt;/div&gt;
            &lt;div class=&quot;v6-grid&quot;&gt;
                &lt;div&gt;
                    &lt;label&gt;Wobble Amt &lt;span class=&quot;val&quot; id=&quot;v6-fast-depth-val&quot;&gt;500 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v6-fast-depth&quot; min=&quot;0&quot; max=&quot;2000&quot; value=&quot;500&quot;&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;label&gt;Wobble Speed &lt;span class=&quot;val&quot; id=&quot;v6-fast-rate-val&quot;&gt;4 Hz&lt;/span&gt;&lt;/label&gt;
                    &lt;input type=&quot;range&quot; id=&quot;v6-fast-rate&quot; min=&quot;1&quot; max=&quot;20&quot; step=&quot;0.5&quot; value=&quot;4&quot;&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button id=&quot;v6-play&quot;&gt;Start System&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    // --- STATE ---
    const s = {
        base: 80,
        rate: 40,
        slowOn: true, slowDepth: 2000, slowTime: 20,
        fastOn: true, fastDepth: 500, fastRate: 4,
        playing: false
    };

    let ac, osc, gain, ana, loopTmr;
    let startTime = 0;

    // --- DOM HELPERS ---
    const root = document.getElementById(&#39;audio-morph-v6&#39;);
    const el = (id) =&gt; root.querySelector(id);
    const txt = (id, v) =&gt; el(id).textContent = v;
    
    // Canvas
    const cvs = el(&#39;#v6-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);
    const dpr = window.devicePixelRatio || 1;
    cvs.width = cvs.offsetWidth * dpr;
    cvs.height = cvs.offsetHeight * dpr;
    ctx.scale(dpr, dpr);

    // --- SYNC UI ---
    const updateUI = () =&gt; {
        txt(&#39;#v6-base-val&#39;, s.base + &quot; Hz&quot;);
        txt(&#39;#v6-rate-val&#39;, s.rate + &quot; Hz&quot;);
        txt(&#39;#v6-slow-depth-val&#39;, s.slowDepth + &quot; Hz&quot;);
        txt(&#39;#v6-slow-time-val&#39;, s.slowTime + &quot; s&quot;);
        txt(&#39;#v6-fast-depth-val&#39;, s.fastDepth + &quot; Hz&quot;);
        txt(&#39;#v6-fast-rate-val&#39;, s.fastRate + &quot; Hz&quot;);
    };

    // --- EVENT LISTENERS ---
    el(&#39;#v6-base&#39;).oninput = e =&gt; { s.base = +e.target.value; updateUI(); };
    el(&#39;#v6-rate&#39;).oninput = e =&gt; { s.rate = +e.target.value; updateUI(); };
    
    el(&#39;#v6-slow-on&#39;).onchange = e =&gt; s.slowOn = e.target.checked;
    el(&#39;#v6-slow-depth&#39;).oninput = e =&gt; { s.slowDepth = +e.target.value; updateUI(); };
    el(&#39;#v6-slow-time&#39;).oninput = e =&gt; { s.slowTime = +e.target.value; updateUI(); };

    el(&#39;#v6-fast-on&#39;).onchange = e =&gt; s.fastOn = e.target.checked;
    el(&#39;#v6-fast-depth&#39;).oninput = e =&gt; { s.fastDepth = +e.target.value; updateUI(); };
    el(&#39;#v6-fast-rate&#39;).oninput = e =&gt; { s.fastRate = +e.target.value; updateUI(); };

    // --- AUDIO CORE ---
    function init() {
        const AC = window.AudioContext || window.webkitAudioContext;
        ac = new AC();
        ana = ac.createAnalyser();
        ana.fftSize = 2048;
        ana.smoothingTimeConstant = 0.6;
        gain = ac.createGain();
        gain.gain.value = 0.1;
        gain.connect(ana);
        ana.connect(ac.destination);
    }

    function loop() {
        if(!s.playing) return;
        
        const now = ac.currentTime;
        const dur = 1 / s.rate; // Loop duration (e.g. 0.02s)

        // 1. Calculate Slow Morph (0 to 1)
        let modSlow = 0;
        if(s.slowOn) {
            const elapsed = now - startTime;
            // Sine wave normalized 0-&gt;1 over slowTime
            modSlow = (Math.sin((elapsed / s.slowTime) * Math.PI * 2) + 1) / 2;
        }

        // 2. Calculate Fast Wobble (-1 to 1)
        let modFast = 0;
        if(s.fastOn) {
            modFast = Math.sin(now * s.fastRate * Math.PI * 2);
        }

        // 3. Combine Modulations
        // Target Freq = Base + (SlowAmount) + (FastAmount)
        let targetFreq = s.base + (s.slowDepth * modSlow) + (s.fastDepth * modFast);
        
        // Safety: Don&#39;t let freq go below base too much or negative
        if(targetFreq &lt; 20) targetFreq = 20;

        // 4. Synthesize Frame
        osc.frequency.cancelScheduledValues(now);
        osc.frequency.setValueAtTime(s.base, now);
        osc.frequency.linearRampToValueAtTime(targetFreq, now + dur);

        loopTmr = setTimeout(loop, dur * 1000);
    }

    el(&#39;#v6-play&#39;).onclick = () =&gt; {
        if(!ac) init();
        
        if(s.playing) {
            s.playing = false;
            el(&#39;#v6-play&#39;).textContent = &quot;Start System&quot;;
            el(&#39;#v6-play&#39;).classList.remove(&#39;active&#39;);
            clearTimeout(loopTmr);
            if(osc) { osc.stop(); osc.disconnect(); }
        } else {
            if(ac.state === &#39;suspended&#39;) ac.resume();
            s.playing = true;
            startTime = ac.currentTime;
            el(&#39;#v6-play&#39;).textContent = &quot;Stop System&quot;;
            el(&#39;#v6-play&#39;).classList.add(&#39;active&#39;);

            osc = ac.createOscillator();
            osc.connect(gain);
            osc.start();
            loop();
            draw();
        }
    };

    // --- VISUALIZER ---
    function draw() {
        if(!s.playing) return;
        requestAnimationFrame(draw);
        const len = ana.frequencyBinCount;
        const dat = new Uint8Array(len);
        ana.getByteTimeDomainData(dat);

        const w = cvs.width / dpr;
        const h = cvs.height / dpr;
        
        ctx.fillStyle = &#39;#121212&#39;;
        ctx.fillRect(0,0,w,h);
        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#00d4ff&#39;;
        ctx.beginPath();
        
        let x = 0; 
        const slice = w * 1.0 / len;
        for(let i=0; i&lt;len; i++) {
            const v = dat[i]/128.0;
            const y = v * h/2;
            i===0 ? ctx.moveTo(x,y) : ctx.lineTo(x,y);
            x+=slice;
        }
        ctx.stroke();
    }
    
    updateUI();
})();
&lt;/script&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/1055767780407453807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/1055767780407453807?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1055767780407453807'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1055767780407453807'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/02/audio-sweep-app-v5.html' title='Audio Sweep App V5'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2922266628719493748</id><published>2026-01-23T19:54:00.000-08:00</published><updated>2026-01-23T19:54:07.556-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="lifestyle"/><category scheme="http://www.blogger.com/atom/ns#" term="perfumery"/><category scheme="http://www.blogger.com/atom/ns#" term="product reviews"/><category scheme="http://www.blogger.com/atom/ns#" term="self help"/><title type='text'>Layering fragrances with powders and solids in personal perfumery.</title><content type='html'>&lt;p&gt;Over the years since I started taking up perfumery ingredients collecting, I can say that I’ve had a fairly good and decent run of many aroma chemicals and naturals, alike. At one point, my collection came out to over 300 items, I believe, and I had a dedicated large shelf where my miniature perfumery organ would sit.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqVAbnofH_LCWHUZCinEciWrehnslIJEei49Dj4uOj4V9q_WKwA067ScBJIbf6tnUyQ01VpjkFcFAclsiOPyexmSAhMvGLrShwvYbS3AoMe4jLp9v9Nrc_pxvebbgq7bBmFHOZsHk9DLISw3JHJN2a82dSimrb6EUcU3woWwPGmZJ-esFs8502Qqu2mDE/s4032/IMG_0538.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqVAbnofH_LCWHUZCinEciWrehnslIJEei49Dj4uOj4V9q_WKwA067ScBJIbf6tnUyQ01VpjkFcFAclsiOPyexmSAhMvGLrShwvYbS3AoMe4jLp9v9Nrc_pxvebbgq7bBmFHOZsHk9DLISw3JHJN2a82dSimrb6EUcU3woWwPGmZJ-esFs8502Qqu2mDE/w640-h480/IMG_0538.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;p&gt;I wish I could have kept the collection longer, but it got taken from me during a forced move-out from a home I was staying at. It was supposed to last me for years, and I kept buying more ingredients like there would be no end to my fragrance ingredients explorations.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Some of my favorite materials to work with were the powders and crystals, as some of the ingredients were partially or fully solid at room temperature, or depending on the room’s temperature, alternately. Some of them melt in to a liquid, when heated over a flame. The texture of some of these materials is fascinating to explore, and their organoleptic profiles are typically powerful and unique, within a fragrance composition.&amp;nbsp;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyeLyPqgzmLq05Orid9AOi5aUCNUZTGIImjKwwiQu_3Lyz9vgdECRESPECaEKCp8PQ5n-CmihFxbU-YApwDiIM2yvOXbCKQ0itP_CAo4E4B7OFAHPpJVZ2apGO7RQv2mEV9xcdO9elR2zI1zMyf9idgCNiLwtlgS_nKo7wfMKVP70d8QMkeM1RbuJrVHg/s3024/IMG_1928.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyeLyPqgzmLq05Orid9AOi5aUCNUZTGIImjKwwiQu_3Lyz9vgdECRESPECaEKCp8PQ5n-CmihFxbU-YApwDiIM2yvOXbCKQ0itP_CAo4E4B7OFAHPpJVZ2apGO7RQv2mEV9xcdO9elR2zI1zMyf9idgCNiLwtlgS_nKo7wfMKVP70d8QMkeM1RbuJrVHg/w640-h640/IMG_1928.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A sample of cetalox, procured from Perfumer Supply House.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEZyZ6jfZg6TfqYhkvqvMHh-OvtbQIkTEsM0CHZPOwKReFk34TjIqFzfu5lj1gdX5tHsP3zqtQ3a_lRImvnFH1_qwet-3dwHxueJGZoNyVt3Sf5HwJPGiVxz84N7FyxLRNAX4gN4dicRtqEPVj_KTTkdzdgJwISBGdE1uGG5r0kIJI9TIZh9bu42am6fg/s3024/IMG_1927.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEZyZ6jfZg6TfqYhkvqvMHh-OvtbQIkTEsM0CHZPOwKReFk34TjIqFzfu5lj1gdX5tHsP3zqtQ3a_lRImvnFH1_qwet-3dwHxueJGZoNyVt3Sf5HwJPGiVxz84N7FyxLRNAX4gN4dicRtqEPVj_KTTkdzdgJwISBGdE1uGG5r0kIJI9TIZh9bu42am6fg/w640-h640/IMG_1927.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A 5 gram container of cetalox, from Perfumer Supply House.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Cetalox, (&lt;a href=&quot;https://perfumersupplyhouse.com/product/cetalox-firmenich/&quot; target=&quot;_blank&quot;&gt;$11.50 for 5 grams, currently&lt;/a&gt;) pictured above, in its solid form, is an amber or ambergris type fragrance - it’s smooth and enticing, and I’d easily imagine it in a laundry detergent. Another comparable scent would be carpet cleaning shampoo, of a particular, store-bought type. I started working with this material only recently, even though I’ve owned it on 2 different occasions. I mostly would just smell the powder in its container. This time, however, I set about in tackling the discovery of the scent profiles of my solid and powdered fragrance ingredients, so I purchased some isopropyl myristate, which is a great material to work with in perfumery and in skin applications. It’s similar, in the solubility profile, to isopropyl alcohol, or an alcohol, in general, but there are some things, I should mention, that, while they “work,” in an “at all,” or even “well enough” sense, the materials are just not worked with, because of some defeating feature of the material. Isopropyl alcohol is one of these no-nos. It’s very easily accessible, and it functions like other alcohol solvents, for perfumery materials, but the scent profile is too prominent when trying out isopropyl alcohol for fragrance uses, and, I believe, there is something about the chemical molecular structure of isopropyl alcohol that amounts to wasteful and detrimental free radicals affecting fragrance materials.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Isopropyl myristate, on the other hand, is commonly known as a suitable solvent for perfumery uses, and it has other properties that complement the cosmetic character of this material’s use case profile, such as that it assists in permeating the skin, and, subsequently, materials dissolved in IPM will permeate the skin to provide therapeutic effects more prominently. It also acts as an emollient, when applied to the skin, for a short while, and that emmolience dries up neatly, not leaving an oily residue.&amp;nbsp;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixDkZYuNdl9dwqeNsTiUlLHmiVMi5pUHinZWo4VEcgIEV2lSVjm1sXaorbtRY8Y8vqCFz-zi-bczcW1vsqPn88IZlWP9KxIKc9i67cOXJrfno08Fimx-3qRp6_6AW3Ajfyz8-9OHhfmTAj0Fkr_CIu4_LlERPPBqR3qnAWD8c9UwoIxLPHibAXlIuvyJY/s3024/IMG_1932.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixDkZYuNdl9dwqeNsTiUlLHmiVMi5pUHinZWo4VEcgIEV2lSVjm1sXaorbtRY8Y8vqCFz-zi-bczcW1vsqPn88IZlWP9KxIKc9i67cOXJrfno08Fimx-3qRp6_6AW3Ajfyz8-9OHhfmTAj0Fkr_CIu4_LlERPPBqR3qnAWD8c9UwoIxLPHibAXlIuvyJY/w640-h640/IMG_1932.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Isopropyl myristate, by Soapeauty, on Amazon.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;So, the backdrop to this situation is essentially that the perfumer needs to have some kind of solvent that works well in perfumery (perfumer’s alcohol is ethyl alcohol), for the sake of making dilutions of these solid and crystalline materials, so that they can be sprayed, for diffusion of the scent. I chose to go with a brand I had tried, previously, for isopropyl myristate - &lt;a href=&quot;https://www.amazon.com/dp/B084YY8R5Q?ref=ppx_yo2ov_dt_b_fed_asin_title&amp;amp;th=1&quot; target=&quot;_blank&quot;&gt;Soapeauty, on Amazon, who currently sells 8 fl. oz. of IPM for $11.50&lt;/a&gt;. It’s an easily accessible ingredient to buy in on, in small quantities - good for small operations and for beginners, whereas perfumer’s alcohol is usually sold in larger containers, at a heftier cost. There’s not much difference, performance wise, between the two, except that IPM is scentless.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since most oils and solid materials, in perfumery, are not soluble in water (not completely soluble, sometimes), a workable solvent is necessary for creating dilutions, and for dissolving the solids, powders, and crystals in to a solution. With water, as an amateur’s perspective in mind, powders such as cetalox would not dissolve, and they would soon clog the spray apparatus of the bottle, after being sprayed, a bit. Getting a good alcohol is good form - it dissolves the material, and it serves as a diluent carrier liquid, for the spraying and diffusion of the scent materials. Luckily, some of these solid ingredients wind up being fairly powerful at a 5%-10% dilution. A 1 oz., 2 oz., or 8-10 mL spray bottle would suffice, for the isolated dissolved powdered materials in solvent solution. My rationale on keeping these ingredients separate, in terms of that, in some cases, different layers could be mixed together, to have everything in one spray bottle. I felt that these materials were too unique, and that they smell fantastic, on their own, so I figured that, for a fragrance enthusiast use case scenario, carrying around a travel spray bottle, along with one of these small spray bottles, for the cetalox, ends up working well, especially for touch ups, during the day, or to deter from smelling sweaty or unbathed, as the day goes on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBCIcMEWMwGoKmnSp14imIZr4n3Y09cxY9oSV0BvJjleg7COgPtZiVuV8PjiM9_8nzSzaxlGaLwrhMclSMxcB9e1KNSjccYY5Q9MnDIsRMvxfOGSAcNZ3Z3Sio1esl1GgXcDCm1LSzlDQRyhY2rJKL_e2f2vxEaY35xI11pwFNB5HIbd9hyphenhyphenCuaF_eUPe0/s4032/IMG_1934.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBCIcMEWMwGoKmnSp14imIZr4n3Y09cxY9oSV0BvJjleg7COgPtZiVuV8PjiM9_8nzSzaxlGaLwrhMclSMxcB9e1KNSjccYY5Q9MnDIsRMvxfOGSAcNZ3Z3Sio1esl1GgXcDCm1LSzlDQRyhY2rJKL_e2f2vxEaY35xI11pwFNB5HIbd9hyphenhyphenCuaF_eUPe0/w480-h640/IMG_1934.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Small, travel size spray bottles, used to hold single ingredients, for fragrance layering, in a practical setting/sense, are a suitable means of making use solid fragrance materials.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another one of the solid ingredients I’ve enjoyed working with, in some fragrance composition projects, is Prismantol, by International Flavors and Fragrances (IFF), currently &lt;a href=&quot;https://shop.perfumersapprentice.com/p-9819-prismantol-iff.aspx#:~:text=Prismantol%20(IFF)%20**,followed%20by%20smooth%20natural%20woods&quot; target=&quot;_blank&quot;&gt;starting at $6.75 for 4 mL at Perfumer’s Apprentice&lt;/a&gt;. This one is a delightful woodsy scent, with a touch of new pine needles, a relieving camphor-like freshness to it, and a touch of ginger and cardamom, giving it a slightly spicy character. This material is solid at room temperature, and will melt over a flame, or microwaved, for a short several seconds, or so, at a time.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGASpcFDzBs7Z7mSYlHEm1qhKKjuKmlopg8RmfViyWPXrLF3XNzmui-CR0_BquJIPXoDjCMsJTcKem4Sc4BfwU_ONQcMdTBVsusLmxNV2s-MspqieKhYkErqDdcAw1AxnmJWUm5NvP2iQEpdtvzV8ACTFFU6-PcgDTqlO_7KxVHW9RjOnfXRnAN-0Qp7I/s3024/IMG_1929.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGASpcFDzBs7Z7mSYlHEm1qhKKjuKmlopg8RmfViyWPXrLF3XNzmui-CR0_BquJIPXoDjCMsJTcKem4Sc4BfwU_ONQcMdTBVsusLmxNV2s-MspqieKhYkErqDdcAw1AxnmJWUm5NvP2iQEpdtvzV8ACTFFU6-PcgDTqlO_7KxVHW9RjOnfXRnAN-0Qp7I/w640-h640/IMG_1929.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Solid Prismantol in its container.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMrhU36bqrGSJxP0ohcaGatlil2vUN71w55uiDy783zxxKtzBVmGAoNTYyz4Q3BD4h8JiC6P9qkjDFu0d7bsqIMHFlx66aaL6gfnxhntEplCxme49BY2Xu0LPbco_n-FBSzeM_gZAP16wXItj-7aCvyRdI_a29RbmUIRmrN0zaih7FYftXvHzkU02OcF0/s3024/IMG_1930.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMrhU36bqrGSJxP0ohcaGatlil2vUN71w55uiDy783zxxKtzBVmGAoNTYyz4Q3BD4h8JiC6P9qkjDFu0d7bsqIMHFlx66aaL6gfnxhntEplCxme49BY2Xu0LPbco_n-FBSzeM_gZAP16wXItj-7aCvyRdI_a29RbmUIRmrN0zaih7FYftXvHzkU02OcF0/w640-h640/IMG_1930.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;I used a paper clip to scrape out some shavings of Prismantol, to prepare it for dilution and diffusion.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1Ouw62dHk9Dovlq0RgU8aYmFPV0qr8I0edAPq4r9weC_V3LzgNRabe0P41DHkUb8barJwS7DR2FN1TuvXhB2fdRH9JGscmOoAAc4vXMFc9YXtAzk0wb7cwHutDRRPm6-d1t8HAqgYUGacDGUkyS2g6VaFtwRA-JoomOYmlz8LIFA4ejGMeRc6HR1jZ8I/s3024/IMG_1931.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1Ouw62dHk9Dovlq0RgU8aYmFPV0qr8I0edAPq4r9weC_V3LzgNRabe0P41DHkUb8barJwS7DR2FN1TuvXhB2fdRH9JGscmOoAAc4vXMFc9YXtAzk0wb7cwHutDRRPm6-d1t8HAqgYUGacDGUkyS2g6VaFtwRA-JoomOYmlz8LIFA4ejGMeRc6HR1jZ8I/w640-h640/IMG_1931.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;With about 20 mL of isopropyl myristate in a 1 oz. container, I achieve about a 5% dilution, from using around 1 gram of solid material.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Either one of these materials described in this article are wonderfully dynamic and versatile, when added as a layer, over your own personal favorite cologne or perfume. They achieve fantastic effects, and they are a delight to enjoy, as fragrances, on their own, or combined with other fragrances.&amp;nbsp;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2922266628719493748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2922266628719493748?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2922266628719493748'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2922266628719493748'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/01/layering-fragrances-with-powders-and-solids.html' title='Layering fragrances with powders and solids in personal perfumery.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqVAbnofH_LCWHUZCinEciWrehnslIJEei49Dj4uOj4V9q_WKwA067ScBJIbf6tnUyQ01VpjkFcFAclsiOPyexmSAhMvGLrShwvYbS3AoMe4jLp9v9Nrc_pxvebbgq7bBmFHOZsHk9DLISw3JHJN2a82dSimrb6EUcU3woWwPGmZJ-esFs8502Qqu2mDE/s72-w640-h480-c/IMG_0538.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-1872826995488749628</id><published>2026-01-18T18:57:00.000-08:00</published><updated>2026-01-18T19:28:38.284-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bird feeding"/><category scheme="http://www.blogger.com/atom/ns#" term="cute"/><category scheme="http://www.blogger.com/atom/ns#" term="funny"/><category scheme="http://www.blogger.com/atom/ns#" term="games"/><category scheme="http://www.blogger.com/atom/ns#" term="Generative AI"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>City Pigeon 3D Game</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Pigeon Blog: The Human Update&lt;/title&gt;
    &lt;style&gt;
        body { font-family: &#39;Segoe UI&#39;, sans-serif; line-height: 1.6; margin: 0; padding: 20px; background: #e0e0e0; }
        .blog-container { max-width: 850px; margin: 0 auto; background: white; padding: 30px; border-radius: 15px; box-shadow: 0 4px 20px rgba(0,0,0,0.1); }
        
        #game-area { 
            position: relative; width: 100%; height: 500px; 
            background: #111; margin: 25px 0; border-radius: 12px; overflow: hidden;
            touch-action: none; border: 4px solid #333;
        }
        
        #ui-layer {
            position: absolute; top: 0; left: 0; width: 100%; height: 100%;
            pointer-events: none; color: white; padding: 15px; box-sizing: border-box;
            display: flex; flex-direction: column; justify-content: space-between;
        }
        .stat-box { background: rgba(0,0,0,0.7); padding: 8px 15px; border-radius: 20px; display: inline-block; font-weight: bold; }
        .energy-container { width: 150px; height: 12px; background: #444; border-radius: 6px; overflow: hidden; margin-top: 4px; }
        #energy-bar { width: 100%; height: 100%; background: #4caf50; transition: background 0.3s; }

        .controls-grid { display: flex; justify-content: space-between; pointer-events: none; margin-bottom: 10px; }
        .btn-group { display: flex; gap: 8px; pointer-events: auto; }
        .game-btn {
            width: 60px; height: 60px; background: rgba(255,255,255,0.2);
            border: 2px solid rgba(255,255,255,0.6); border-radius: 50%;
            color: white; display: flex; align-items: center; justify-content: center;
            font-size: 12px; user-select: none; cursor: pointer;
        }
        .game-btn:active { background: rgba(255,255,255,0.5); }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;blog-container&quot;&gt;
    &lt;h2&gt;Update: The Kind Human&lt;/h2&gt;
    &lt;p&gt;City life isn&#39;t all bad. Sometimes, **Humans** (tall blue figures) will stop and throw seeds! If you see one standing still, fly over and land nearby for a feast.&lt;/p&gt;

    &lt;div id=&quot;game-area&quot;&gt;
        &lt;div id=&quot;ui-layer&quot;&gt;
            &lt;div style=&quot;display: flex; justify-content: space-between;&quot;&gt;
                &lt;div class=&quot;stat-box&quot;&gt;PIGEON SCORE: &lt;span id=&quot;score-val&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
                &lt;div class=&quot;stat-box&quot;&gt;
                    VITALITY
                    &lt;div class=&quot;energy-container&quot;&gt;&lt;div id=&quot;energy-bar&quot;&gt;&lt;/div&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;controls-grid&quot;&gt;
                &lt;div class=&quot;btn-group&quot;&gt;
                    &lt;div class=&quot;game-btn&quot; id=&quot;ctrl-L&quot;&gt;LEFT&lt;/div&gt;
                    &lt;div class=&quot;game-btn&quot; id=&quot;ctrl-W&quot;&gt;WALK&lt;/div&gt;
                    &lt;div class=&quot;game-btn&quot; id=&quot;ctrl-R&quot;&gt;RIGHT&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&quot;btn-group&quot;&gt;
                    &lt;div class=&quot;game-btn&quot; id=&quot;ctrl-F&quot; style=&quot;background:rgba(0,180,255,0.3)&quot;&gt;FLY&lt;/div&gt;
                    &lt;div class=&quot;game-btn&quot; id=&quot;ctrl-D&quot; style=&quot;background:rgba(255,150,0,0.3)&quot;&gt;LAND&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;p&gt;&lt;b&gt;Instructions:&lt;/b&gt; Walk into yellow seeds to eat. Avoid the brown squirrels. The sky darkens as your energy fades—don&#39;t let the sun set on your pigeon journey!&lt;/p&gt;
&lt;/div&gt;

&lt;script type=&quot;importmap&quot;&gt;
    { &quot;imports&quot;: { &quot;three&quot;: &quot;https://unpkg.com/three@0.160.0/build/three.module.js&quot; } }
&lt;/script&gt;

&lt;script type=&quot;module&quot;&gt;
    import * as THREE from &#39;three&#39;;

    const container = document.getElementById(&#39;game-area&#39;);
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
    const renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setSize(container.clientWidth, container.clientHeight);
    container.appendChild(renderer.domElement);

    // Lights
    const ambient = new THREE.AmbientLight(0xffffff, 0.7);
    scene.add(ambient);
    const sun = new THREE.DirectionalLight(0xffffff, 1);
    sun.position.set(10, 20, 10);
    scene.add(sun);

    // World
    const ground = new THREE.Mesh(new THREE.PlaneGeometry(200, 200), new THREE.MeshStandardMaterial({color: 0x555555}));
    ground.rotation.x = -Math.PI/2;
    scene.add(ground);

    // Buildings
    for(let i=0; i&lt;40; i++) {
        const h = 8 + Math.random()*20;
        const b = new THREE.Mesh(new THREE.BoxGeometry(6, h, 6), new THREE.MeshStandardMaterial({color: 0x666677}));
        b.position.set(Math.random()*140-70, h/2, Math.random()*140-70);
        if(b.position.length() &gt; 12) scene.add(b);
    }

    // Characters
    const pigeon = new THREE.Group();
    const pBody = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.4, 0.7), new THREE.MeshStandardMaterial({color: 0x808090}));
    const pHead = new THREE.Mesh(new THREE.BoxGeometry(0.25, 0.25, 0.25), new THREE.MeshStandardMaterial({color: 0x222222}));
    pHead.position.set(0, 0.3, 0.35);
    pigeon.add(pBody, pHead);
    pigeon.position.y = 0.3;
    scene.add(pigeon);

    const squirrels = [];
    function spawnSquirrel() {
        const s = new THREE.Group();
        s.add(new THREE.Mesh(new THREE.BoxGeometry(0.3, 0.25, 0.5), new THREE.MeshStandardMaterial({color: 0x5a2d0c})));
        s.position.set(Math.random()*80-40, 0.15, Math.random()*80-40);
        scene.add(s);
        squirrels.push({ mesh: s, angle: Math.random()*Math.PI*2 });
    }
    for(let i=0; i&lt;10; i++) spawnSquirrel();

    const humans = [];
    function spawnHuman() {
        const h = new THREE.Group();
        const body = new THREE.Mesh(new THREE.BoxGeometry(0.6, 1.6, 0.4), new THREE.MeshStandardMaterial({color: 0x3366ff}));
        body.position.y = 0.8;
        h.add(body);
        h.position.set(Math.random()*60-30, 0, Math.random()*60-30);
        scene.add(h);
        humans.push({ mesh: h, seedTimer: 0 });
    }
    for(let i=0; i&lt;4; i++) spawnHuman();

    // State
    let score = 0, energy = 100;
    const seeds = [];
    const input = { w:false, a:false, d:false, f:false, s:false };

    const bind = (id, k) =&gt; {
        const el = document.getElementById(id);
        el.onmousedown = el.ontouchstart = (e) =&gt; { e.preventDefault(); input[k] = true; };
        el.onmouseup = el.ontouchend = () =&gt; input[k] = false;
    };
    bind(&#39;ctrl-W&#39;, &#39;w&#39;); bind(&#39;ctrl-L&#39;, &#39;a&#39;); bind(&#39;ctrl-R&#39;, &#39;d&#39;); bind(&#39;ctrl-F&#39;, &#39;f&#39;); bind(&#39;ctrl-D&#39;, &#39;s&#39;);

    function createSeed(x, z) {
        const s = new THREE.Mesh(new THREE.SphereGeometry(0.12), new THREE.MeshStandardMaterial({color: 0xffd700}));
        s.position.set(x, 0.1, z);
        scene.add(s);
        seeds.push(s);
    }
    for(let i=0; i&lt;20; i++) createSeed(Math.random()*80-40, Math.random()*80-40);

    function update() {
        if(energy &lt;= 0) return;
        requestAnimationFrame(update);

        energy -= 0.007; 
        const ep = energy / 100;
        document.getElementById(&#39;energy-bar&#39;).style.width = (ep * 100) + &quot;%&quot;;
        scene.background = new THREE.Color(0.1 + ep*0.4, 0.1 + ep*0.6, 0.2 + ep*0.7);

        // Pigeon Physics
        if(input.w) pigeon.translateZ(0.2);
        if(input.a) pigeon.rotation.y += 0.05;
        if(input.d) pigeon.rotation.y -= 0.05;
        if(input.f) pigeon.position.y = Math.min(15, pigeon.position.y + 0.15);
        if(input.s) pigeon.position.y = Math.max(0.3, pigeon.position.y - 0.15);

        // Human Logic
        humans.forEach(h =&gt; {
            h.seedTimer++;
            if(h.seedTimer &gt; 200) { // Every few seconds
                createSeed(h.mesh.position.x + (Math.random()-0.5)*3, h.mesh.position.z + (Math.random()-0.5)*3);
                h.seedTimer = 0;
            }
        });

        // Squirrel AI
        squirrels.forEach(sq =&gt; {
            const d = sq.mesh.position.distanceTo(pigeon.position);
            if(d &lt; 6 &amp;&amp; pigeon.position.y &lt; 1.5) {
                sq.mesh.lookAt(pigeon.position.x, 0.15, pigeon.position.z);
                sq.mesh.translateZ(0.09);
                if(d &lt; 0.8) {
                    energy -= 0.15;
                    document.getElementById(&#39;energy-bar&#39;).style.background = &quot;#ff4444&quot;;
                } else { document.getElementById(&#39;energy-bar&#39;).style.background = &quot;#4caf50&quot;; }
            } else {
                sq.angle += 0.02;
                sq.mesh.position.x += Math.cos(sq.angle) * 0.04;
                sq.mesh.position.z += Math.sin(sq.angle) * 0.04;
            }
        });

        // Seeds
        for(let i=seeds.length-1; i&gt;=0; i--) {
            if(pigeon.position.distanceTo(seeds[i].position) &lt; 0.8) {
                scene.remove(seeds[i]);
                seeds.splice(i, 1);
                score += 10;
                energy = Math.min(100, energy + 10);
                document.getElementById(&#39;score-val&#39;).innerText = score;
            }
        }

        const camPos = new THREE.Vector3(0, 4, -8).applyMatrix4(pigeon.matrixWorld);
        camera.position.lerp(camPos, 0.1);
        camera.lookAt(pigeon.position);
        renderer.render(scene, camera);
    }
    update();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/1872826995488749628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/1872826995488749628?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1872826995488749628'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1872826995488749628'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/01/city-pigeon-3d-game.html' title='City Pigeon 3D Game'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-6511294336022424368</id><published>2026-01-13T10:13:00.000-08:00</published><updated>2026-01-17T23:07:48.590-08:00</updated><title type='text'>Mathematical and Geometric Models of Musical Scales and Tunings App.</title><content type='html'>&lt;div id=&quot;synth-container&quot; style=&quot;position: relative; width: 100%; height: 500px; background: #08080c; border: 1px solid #333; margin: 20px 0; touch-action: none; overflow: hidden; border-radius: 8px;&quot;&gt;

    &lt;div id=&quot;synth-ui&quot; style=&quot;position: absolute; top: 0; left: 0; width: 100%; padding: 15px; box-sizing: border-box; pointer-events: none; z-index: 10;&quot;&gt;
        &lt;div style=&quot;display: flex; justify-content: space-between; align-items: flex-start;&quot;&gt;
            &lt;div style=&quot;background: rgba(0,0,0,0.7); padding: 8px 12px; border-radius: 4px; border-left: 3px solid #00bcd4;&quot;&gt;
                &lt;h2 style=&quot;margin: 0; font-size: 14px; color: #fff; font-family: monospace; letter-spacing: 1px;&quot;&gt;GEO-SYNTH&lt;/h2&gt;
                &lt;div id=&quot;audio-status&quot; style=&quot;font-size: 10px; color: #888; font-family: monospace; margin-top: 4px;&quot;&gt;TAP TO INITIALIZE&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;select id=&quot;synth-mode&quot; style=&quot;pointer-events: auto; background: #1a1a20; color: #00bcd4; border: 1px solid #333; font-size: 12px; padding: 6px; border-radius: 4px; font-family: monospace;&quot;&gt;
                &lt;option value=&quot;pythagorean&quot;&gt;Pythagorean (Circle)&lt;/option&gt;
                &lt;option value=&quot;euler&quot;&gt;Euler Genus (3.5.7 Cube)&lt;/option&gt;
                &lt;option value=&quot;hexany&quot;&gt;Hexany (1-3-5-7)&lt;/option&gt;
                &lt;option value=&quot;hex&quot;&gt;Tonnetz Grid&lt;/option&gt;
            &lt;/select&gt;
        &lt;/div&gt;
        &lt;div id=&quot;desc&quot; style=&quot;margin-top: 10px; font-family: monospace; font-size: 10px; color: #555; max-width: 60%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;canvas id=&quot;synth-canvas&quot; style=&quot;display: block; width: 100%; height: 100%; cursor: crosshair;&quot;&gt;&lt;/canvas&gt;

&lt;/div&gt;

&lt;script&gt;
(function() {
    const container = document.getElementById(&#39;synth-container&#39;);
    const canvas = document.getElementById(&#39;synth-canvas&#39;);
    const ctx = canvas.getContext(&#39;2d&#39;);
    const modeSelect = document.getElementById(&#39;synth-mode&#39;);
    const statusLabel = document.getElementById(&#39;audio-status&#39;);
    const descLabel = document.getElementById(&#39;desc&#39;);

    let audioCtx = null;
    let masterGain = null;
    let isAudioStarted = false;

    // --- AUDIO ENGINE ---
    function initAudio() {
        if (isAudioStarted) return;
        const AudioContext = window.AudioContext || window.webkitAudioContext;
        audioCtx = new AudioContext();
        masterGain = audioCtx.createGain();
        masterGain.gain.value = 0.25;
        masterGain.connect(audioCtx.destination);
        isAudioStarted = true;
        statusLabel.innerText = &quot;AUDIO ENGINE: ACTIVE&quot;;
        statusLabel.style.color = &quot;#00bcd4&quot;;
    }

    function playTone(freq, type = &#39;sine&#39;, duration = 1.0) {
        if (!audioCtx) initAudio();
        if (audioCtx.state === &#39;suspended&#39;) audioCtx.resume();

        const osc = audioCtx.createOscillator();
        const gain = audioCtx.createGain();
        
        osc.type = type;
        osc.frequency.setValueAtTime(freq, audioCtx.currentTime);
        
        const now = audioCtx.currentTime;
        gain.gain.setValueAtTime(0, now);
        gain.gain.linearRampToValueAtTime(0.5, now + 0.05);
        gain.gain.exponentialRampToValueAtTime(0.001, now + duration);
        
        osc.connect(gain);
        gain.connect(masterGain);
        osc.start(now);
        osc.stop(now + duration + 0.1);
    }

    // --- MATH &amp; GEOMETRY ---
    let width, height;
    let nodes = [];
    let faces = []; // Polygons to draw/play
    let lines = []; // Connections to draw
    let currentMode = &#39;pythagorean&#39;;

    // Helper: Normalize freq to one octave
    const normalize = (f, base=261.63) =&gt; {
        while (f &gt;= base * 2) f /= 2;
        while (f &lt; base) f *= 2;
        return f;
    };

    const Generators = {
        pythagorean: (w, h) =&gt; {
            const n = [], f = [], l = [];
            const cx = w/2, cy = h/2, r = Math.min(w,h)*0.35;
            descLabel.innerText = &quot;Circle of Fifths based on 3:2 ratio.&quot;;
            
            for (let i = 0; i &lt; 12; i++) {
                const angle = (i / 12) * Math.PI * 2 - Math.PI/2;
                let freq = 261.63 * Math.pow(1.5, i);
                n.push({ x: cx + Math.cos(angle)*r, y: cy + Math.sin(angle)*r, freq: normalize(freq) });
            }
            // Faces (Wedges)
            for(let i=0; i&lt;12; i++) {
                let next = (i+1)%12;
                f.push({ indices: [i, next], center: {x:cx, y:cy}, freqs: [n[i].freq, n[next].freq] });
                l.push([i, next]);
                l.push([i, (i+7)%12]); // Connect fifths
            }
            return { nodes: n, faces: f, lines: l };
        },

        euler: (w, h) =&gt; {
            // Euler Genus (3.5.7) -&gt; 2x2x2 Cube
            const n = [], f = [], l = [];
            const cx = w/2, cy = h/2;
            const size = Math.min(w,h)*0.18;
            descLabel.innerText = &quot;Euler Genus [3•5•7]. Visualized as an isometric Cube.&quot;;
            
            // Prime factors: 3 (x-axis), 5 (y-axis), 7 (z-axis)
            const factors = [3, 5, 7];
            const base = 200;

            for(let z=0; z&lt;=1; z++) {
                for(let y=0; y&lt;=1; y++) {
                    for(let x=0; x&lt;=1; x++) {
                        // Isometric projection math
                        const isoX = (x - z) * size * 1.732; 
                        const isoY = (x + z) * size * 1 - (y * size * 2); 
                        
                        let freq = base * Math.pow(3,x) * Math.pow(5,y) * Math.pow(7,z);
                        
                        n.push({
                            x: cx + isoX, 
                            y: cy + isoY + (size), // shift down slightly
                            freq: normalize(freq),
                            id: `${x}${y}${z}`
                        });
                    }
                }
            }
            
            // Connect edges (Hamming distance of 1)
            for(let i=0; i&lt;n.length; i++) {
                for(let j=i+1; j&lt;n.length; j++) {
                    // Count differencs in coordinates
                    let diff = 0;
                    if(n[i].id[0] !== n[j].id[0]) diff++;
                    if(n[i].id[1] !== n[j].id[1]) diff++;
                    if(n[i].id[2] !== n[j].id[2]) diff++;
                    
                    if(diff === 1) {
                        l.push([i, j]);
                        // Create a &quot;Face&quot; for every edge for simpler hit detection, 
                        // or identify actual quads (faces of cube).
                        // Let&#39;s make faces the Quads of the cube.
                    }
                }
            }
            // Manually define the 6 faces of the cube for clicking
            // Front, Back, Top, Bottom, Left, Right
            // Hard to automate perfectly without complex logic, so we&#39;ll use Triangles on edges for sound
            l.forEach(edge =&gt; {
                 f.push({ indices: edge, center: {x:cx, y:cy}, freqs: [n[edge[0]].freq, n[edge[1]].freq] });
            });

            return { nodes: n, faces: f, lines: l };
        },

        hexany: (w, h) =&gt; {
            // Hexany (1-3-5-7) -&gt; Octahedron
            // 6 Vertices. Each represents a product of 2 factors.
            // Factors: 1, 3, 5, 7
            // Vertices: 1*3, 1*5, 1*7, 3*5, 3*7, 5*7
            const n = [], f = [], l = [];
            const cx = w/2, cy = h/2;
            const r = Math.min(w,h)*0.3;
            descLabel.innerText = &quot;Hexany (1-3-5-7). An Octahedron of perfect harmonic triads.&quot;;
            
            const comboNames = [&quot;3&quot;, &quot;5&quot;, &quot;7&quot;, &quot;15&quot;, &quot;21&quot;, &quot;35&quot;];
            const freqsVal = [3, 5, 7, 15, 21, 35].map(v =&gt; normalize(v * 30)); // base freq scaling

            // Layout: 4 points in a square (equator), 1 top, 1 bottom
            // 1*3 (Top), 5*7 (Bottom) -&gt; The &quot;3&quot; and &quot;35&quot;
            // The others form the ring
            
            const coords = [
                {x:0, y:-1.2}, // Top
                {x:1, y:0},    // Right
                {x:0, y:1.2},  // Bottom
                {x:-1, y:0},   // Left
                {x:-0.4, y:-0.4}, // Back-ish
                {x:0.4, y:0.4}    // Front-ish
            ];
            
            // Better visual: Hexagon layout for 2D clarity, or pseudo-3D octahedron
            // Let&#39;s do pseudo-3D Octahedron
            // Top (0), Bottom (5), Ring (1,2,3,4)
            const map = [
                {x:0, y:-r},    // Top
                {x:r, y:0},     // Ring 1
                {x:0.3*r, y:0.3*r}, // Ring 2 (Front)
                {x:-r, y:0},    // Ring 3
                {x:-0.3*r, y:-0.3*r},// Ring 4 (Back)
                {x:0, y:r}      // Bottom
            ];

            for(let i=0; i&lt;6; i++) {
                n.push({
                    x: cx + map[i].x,
                    y: cy + map[i].y,
                    freq: freqsVal[i]
                });
            }

            // Connections: Each node connects to 4 others (all except its &quot;opposite&quot;)
            // 0 is opposite 5. 1-3, 2-4.
            const opposites = [5, 3, 4, 1, 2, 0];
            
            for(let i=0; i&lt;6; i++) {
                for(let j=i+1; j&lt;6; j++) {
                    if (opposites[i] !== j) {
                        l.push([i, j]);
                        // Every connection creates a potential triad face
                    }
                }
            }
            
            // Define the 8 triangular faces of the octahedron for chords
            // (Triads: 135, 137, 157, 357... etc)
            // Indices based on our map layout need manual binding or geometric logic
            // Let&#39;s just create faces for every Connected Triangle we find
             // Simple approach: Allow clicking lines to play intervals
            l.forEach(pair =&gt; {
                f.push({ indices: pair, center: {x:cx,y:cy}, freqs: [n[pair[0]].freq, n[pair[1]].freq] });
            });

            return { nodes: n, faces: f, lines: l };
        },

        hex: (w, h) =&gt; {
            const n = [], f = [], l = [];
            const cx = w/2, cy = h/2, size = 35;
            descLabel.innerText = &quot;Just Intonation Harmonic Grid (Tonnetz).&quot;;
            
            for(let r = -4; r &lt;= 4; r++) {
                for(let c = -4; c &lt;= 4; c++) {
                    const x = cx + c * size + (r%2)*(size/2);
                    const y = cy + r * size * 0.866;
                    if (x &gt; 20 &amp;&amp; x &lt; w-20 &amp;&amp; y &gt; 20 &amp;&amp; y &lt; h-20) {
                        let freq = 220 * Math.pow(1.25, r) * Math.pow(1.5, c);
                        n.push({x, y, freq: normalize(freq)});
                    }
                }
            }
            // Connections
            for(let i=0; i&lt;n.length; i++) {
                for(let j=i+1; j&lt;n.length; j++) {
                    if (Math.hypot(n[i].x - n[j].x, n[i].y - n[j].y) &lt; size * 1.2) {
                        l.push([i, j]);
                    }
                }
            }
            return { nodes: n, faces: [], lines: l };
        }
    };

    function generateModel() {
        const data = Generators[currentMode](width, height);
        nodes = data.nodes;
        faces = data.faces;
        lines = data.lines;
    }

    // --- INTERACTION ---
    function getPos(e) {
        const r = canvas.getBoundingClientRect();
        const clientX = e.touches ? e.touches[0].clientX : e.clientX;
        const clientY = e.touches ? e.touches[0].clientY : e.clientY;
        return { x: clientX - r.left, y: clientY - r.top };
    }

    function handleInput(e) {
        if(e.type === &#39;touchstart&#39;) initAudio();
        const p = getPos(e);
        let hit = false;

        // 1. Check Nodes
        for (let n of nodes) {
            if ((p.x-n.x)**2 + (p.y-n.y)**2 &lt; 250) {
                playTone(n.freq, &#39;sine&#39;);
                highlight(n.x, n.y, &#39;#00bcd4&#39;);
                hit = true; 
                break;
            }
        }

        // 2. Check Lines/Faces (Strumming)
        if (!hit) {
            // Simple proximity check to lines for &quot;string&quot; strumming
            for(let line of lines) {
                const p1 = nodes[line[0]];
                const p2 = nodes[line[1]];
                // dist from point to line segment
                const A = p.x - p1.x;
                const B = p.y - p1.y;
                const C = p2.x - p1.x;
                const D = p2.y - p1.y;
                const dot = A * C + B * D;
                const lenSq = C * C + D * D;
                let param = -1;
                if (lenSq !== 0) param = dot / lenSq;
                
                let xx, yy;
                if (param &lt; 0) { xx = p1.x; yy = p1.y; }
                else if (param &gt; 1) { xx = p2.x; yy = p2.y; }
                else { xx = p1.x + param * C; yy = p1.y + param * D; }
                
                const dx = p.x - xx;
                const dy = p.y - yy;
                if ((dx * dx + dy * dy) &lt; 100) { // 10px buffer
                     // Play interval
                     playTone(p1.freq, &#39;triangle&#39;, 0.5);
                     setTimeout(() =&gt; playTone(p2.freq, &#39;triangle&#39;, 0.5), 50);
                     highlight(xx, yy, &#39;#ff0055&#39;, 10);
                     hit = true;
                     break;
                }
            }
        }
    }

    // --- RENDERING ---
    let effects = [];
    function highlight(x, y, c, s=20) { effects.push({x, y, c, s, life:1}); }

    function draw() {
        ctx.fillStyle = &#39;#08080c&#39;;
        ctx.fillRect(0, 0, width, height);

        // Lines
        ctx.strokeStyle = &#39;#333&#39;;
        ctx.lineWidth = 1;
        ctx.beginPath();
        lines.forEach(l =&gt; {
            ctx.moveTo(nodes[l[0]].x, nodes[l[0]].y);
            ctx.lineTo(nodes[l[1]].x, nodes[l[1]].y);
        });
        ctx.stroke();

        // Nodes
        nodes.forEach(n =&gt; {
            ctx.fillStyle = &#39;#444&#39;; 
            ctx.beginPath(); ctx.arc(n.x, n.y, 4, 0, Math.PI*2); ctx.fill();
        });

        // Effects
        effects.forEach((e, i) =&gt; {
            ctx.fillStyle = e.c; ctx.globalAlpha = e.life;
            ctx.beginPath(); ctx.arc(e.x, e.y, e.s, 0, Math.PI*2); ctx.fill();
            e.life -= 0.05;
            if(e.life&lt;=0) effects.splice(i,1);
        });
        ctx.globalAlpha = 1;

        requestAnimationFrame(draw);
    }

    // Init
    window.addEventListener(&#39;resize&#39;, () =&gt; { 
        width = container.clientWidth; 
        height = container.clientHeight; 
        canvas.width = width; 
        canvas.height = height; 
        generateModel(); 
    });
    
    modeSelect.addEventListener(&#39;change&#39;, (e) =&gt; { currentMode = e.target.value; generateModel(); });
    canvas.addEventListener(&#39;mousedown&#39;, (e) =&gt; { initAudio(); handleInput(e); });
    canvas.addEventListener(&#39;touchstart&#39;, (e) =&gt; { initAudio(); handleInput(e); }, {passive: false});
    
    // Trigger initial resize
    width = container.clientWidth; height = container.clientHeight;
    canvas.width = width; canvas.height = height;
    generateModel();
    draw();

})();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/6511294336022424368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/6511294336022424368?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6511294336022424368'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/6511294336022424368'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/01/mathematical-and-geometric-models-of_13.html' title='Mathematical and Geometric Models of Musical Scales and Tunings App.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-358883391945432111</id><published>2026-01-08T20:52:00.000-08:00</published><updated>2026-01-08T21:38:29.403-08:00</updated><title type='text'>Bird song real time visualizer app.</title><content type='html'>&lt;p&gt;&amp;nbsp;This app visualizes bird song in a 3D space in real time. Here’s a link to some bird songs that you can upload to try out the app.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://dl.allaboutbirds.org/backyardbirdsdownload-0&quot; target=&quot;_blank&quot;&gt;https://dl.allaboutbirds.org/backyardbirdsdownload-0&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
  /* App Container */
  #bird-viz-container {
    font-family: &#39;Segoe UI&#39;, Tahoma, Geneva, Verdana, sans-serif;
    background: #1a1a1a;
    color: white;
    padding: 20px;
    border-radius: 8px;
    width: 100%;
    max-width: 800px;
    margin: 0 auto;
    box-sizing: border-box;
  }
  
  /* Controls Area */
  #bird-viz-controls {
    margin-bottom: 20px;
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    background: #333;
    padding: 15px;
    border-radius: 8px;
  }

  /* Buttons */
  .btn-style {
    border: none;
    display: inline-block;
    padding: 8px 15px;
    cursor: pointer;
    border-radius: 4px;
    font-size: 14px;
    font-weight: bold;
    text-align: center;
    transition: background 0.2s;
  }
  
  .upload-btn { background: #4CAF50; color: white; }
  .upload-btn:hover { background: #45a049; }

  .snap-btn { background: #2196F3; color: white; }
  .snap-btn:hover { background: #0b7dda; }

  input[type=&quot;file&quot;] { display: none; }

  audio {
    height: 40px;
    outline: none;
    flex-grow: 1;
    min-width: 200px;
  }

  /* 3D Canvas */
  #viz-canvas-wrapper {
    width: 100%;
    height: 450px; /* Made slightly taller */
    background: #000;
    border-radius: 8px;
    overflow: hidden;
    position: relative;
    border: 1px solid #444;
  }

  #viz-canvas-wrapper canvas {
    display: block;
    width: 100%;
    height: 100%;
  }

  #loading-msg {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: #888;
    pointer-events: none;
    text-align: center;
  }

  .stat-box {
    font-size: 12px;
    color: #aaa;
    margin-top: 5px;
    margin-bottom: 10px;
  }
&lt;/style&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;bird-viz-container&quot;&gt;
  &lt;h3&gt;Bird Song 3D Visualizer&lt;/h3&gt;
  &lt;div class=&quot;stat-box&quot;&gt;Range focused: 400Hz - 7000Hz (Optimized for Bird Song).&lt;/div&gt;
  
  &lt;div id=&quot;bird-viz-controls&quot;&gt;
    &lt;label class=&quot;btn-style upload-btn&quot;&gt;
      &lt;input type=&quot;file&quot; id=&quot;audioInput&quot; accept=&quot;.mp3,.wav,.ogg,audio/*&quot;&gt;
      📂 Upload Audio
    &lt;/label&gt;
    
    &lt;button id=&quot;snapBtn&quot; class=&quot;btn-style snap-btn&quot;&gt;📷 Save Image&lt;/button&gt;

    &lt;audio id=&quot;audioPlayer&quot; controls&gt;&lt;/audio&gt;
  &lt;/div&gt;

  &lt;div id=&quot;viz-canvas-wrapper&quot;&gt;
    &lt;div id=&quot;loading-msg&quot;&gt;Waiting for audio...&lt;/div&gt;
    &lt;div id=&quot;3d-canvas&quot;&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
/**
 * BIRD SONG VISUALIZER - ENHANCED DYNAMICS
 */

// --- 1. Setup Three.js Scene ---
const container = document.getElementById(&#39;viz-canvas-wrapper&#39;);
let width = container.clientWidth;
let height = container.clientHeight;

const scene = new THREE.Scene();
scene.background = new THREE.Color(0x000000);
scene.fog = new THREE.Fog(0x000000, 10, 500);

const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
camera.position.set(0, 15, 50); // Moved camera back slightly to see more vertical range
camera.lookAt(0, 0, 0);

// preserveDrawingBuffer: true is REQUIRED for snapshots to work
const renderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true });
renderer.setSize(width, height);
container.appendChild(renderer.domElement);

// Lights
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight);
const dirLight = new THREE.DirectionalLight(0xffffff, 1);
dirLight.position.set(10, 20, 10);
scene.add(dirLight);

// Grid - Lowered slightly so high notes have more room
const gridHelper = new THREE.GridHelper(2000, 100, 0x444444, 0x222222);
gridHelper.position.y = -20; 
scene.add(gridHelper);

// Resize Handler
window.addEventListener(&#39;resize&#39;, () =&gt; {
  width = container.clientWidth;
  height = container.clientHeight;
  renderer.setSize(width, height);
  camera.aspect = width / height;
  camera.updateProjectionMatrix();
});


// --- 2. Snapshot Feature ---
document.getElementById(&#39;snapBtn&#39;).addEventListener(&#39;click&#39;, () =&gt; {
    // Render one frame explicitly to ensure buffer is ready
    renderer.render(scene, camera);
    const dataURL = renderer.domElement.toDataURL(&quot;image/png&quot;);
    const link = document.createElement(&#39;a&#39;);
    link.download = &#39;bird-song-viz.png&#39;;
    link.href = dataURL;
    link.click();
});


// --- 3. Audio Processing ---
const audioInput = document.getElementById(&#39;audioInput&#39;);
const audioPlayer = document.getElementById(&#39;audioPlayer&#39;);
const loadingMsg = document.getElementById(&#39;loading-msg&#39;);

let audioContext;
let analyser;
let source;
let dataArray;
let isPlaying = false;
let audioInitialized = false;

function initAudio() {
  if (!audioInitialized) {
    audioContext = new (window.AudioContext || window.webkitAudioContext)();
    analyser = audioContext.createAnalyser();
    analyser.fftSize = 2048; 
    dataArray = new Float32Array(analyser.fftSize);
    audioInitialized = true;
  }
}

audioInput.addEventListener(&#39;change&#39;, function(e) {
  const file = e.target.files[0];
  if (file) {
    loadingMsg.innerText = &quot;Loading &quot; + file.name + &quot;...&quot;;
    const objectUrl = URL.createObjectURL(file);
    audioPlayer.src = objectUrl;
    loadingMsg.innerText = &quot;Audio loaded. Press Play!&quot;;
    
    // Clear Scene (except lights/grid)
    const toRemove = [];
    scene.traverse((child) =&gt; {
        if ((child.geometry &amp;&amp; child.geometry.type === &#39;BoxGeometry&#39;) || child.type === &#39;Line&#39;) {
             toRemove.push(child);
        }
    });
    toRemove.forEach(child =&gt; scene.remove(child));

    currentTimeIndex = 0;
    lastPos = null;
  }
});

audioPlayer.onplay = () =&gt; {
  initAudio();
  if (audioContext.state === &#39;suspended&#39;) audioContext.resume();
  
  if (!source) {
    try {
      source = audioContext.createMediaElementSource(audioPlayer);
      source.connect(analyser);
      analyser.connect(audioContext.destination);
    } catch (err) { console.error(err); }
  }
  
  isPlaying = true;
  loadingMsg.style.display = &#39;none&#39;;
};

audioPlayer.onpause = () =&gt; { isPlaying = false; };
audioPlayer.onended = () =&gt; { isPlaying = false; };

/**
 * Autocorrelation (Pitch Detection)
 */
function autoCorrelate(buf, sampleRate) {
  let SIZE = buf.length;
  let rms = 0;

  for (let i = 0; i &lt; SIZE; i++) {
    const val = buf[i];
    rms += val * val;
  }
  rms = Math.sqrt(rms / SIZE);

  if (rms &lt; 0.015) return -1; // Increased noise gate slightly

  let r1 = 0, r2 = SIZE - 1, thres = 0.2;
  for (let i = 0; i &lt; SIZE / 2; i++) {
    if (Math.abs(buf[i]) &lt; thres) { r1 = i; break; }
  }
  for (let i = 1; i &lt; SIZE / 2; i++) {
    if (Math.abs(buf[SIZE - i]) &lt; thres) { r2 = SIZE - i; break; }
  }
  buf = buf.slice(r1, r2);
  SIZE = buf.length;

  const c = new Array(SIZE).fill(0);
  for (let i = 0; i &lt; SIZE; i++) {
    for (let j = 0; j &lt; SIZE - i; j++) {
      c[i] = c[i] + buf[j] * buf[j + i];
    }
  }

  let d = 0;
  while (c[d] &gt; c[d + 1]) d++;
  let maxval = -1, maxpos = -1;
  for (let i = d; i &lt; SIZE; i++) {
    if (c[i] &gt; maxval) {
      maxval = c[i];
      maxpos = i;
    }
  }
  let T0 = maxpos;

  let x1 = c[T0 - 1], x2 = c[T0], x3 = c[T0 + 1];
  let a = (x1 + x3 - 2 * x2) / 2;
  let b = (x3 - x1) / 2;
  if (a) T0 = T0 - b / (2 * a);

  return sampleRate / T0;
}


// --- 4. Visualization Loop ---

let currentTimeIndex = 0;
let lastPos = null;
let phraseColor = new THREE.Color(0x00ff00);
const noteScale = 0.25; // Speed

function getRandomColor() {
  return new THREE.Color().setHSL(Math.random(), 0.9, 0.6); // Brighter neon colors
}

function update() {
  requestAnimationFrame(update);

  if (isPlaying &amp;&amp; analyser) {
    analyser.getFloatTimeDomainData(dataArray);
    const pitch = autoCorrelate(dataArray, audioContext.sampleRate);
    
    // Auto-scroll camera
    camera.position.x = (currentTimeIndex * noteScale) + 20; 
    camera.lookAt(currentTimeIndex * noteScale, 0, 0);

    // --- FREQUENCY FILTER &amp; DYNAMICS ADJUSTMENT ---
    
    // Filter: Ignore sounds below 400Hz (wind/cars) and above 7000Hz (hiss)
    if (pitch !== -1 &amp;&amp; pitch &gt; 400 &amp;&amp; pitch &lt; 7000) {
      
      // Math: Stretching the Y-axis.
      // Log2(pitch) creates linear musical steps.
      // * 12: Increases the vertical spacing between notes (Previously *4)
      // - 130: Re-centers the graph so 2000Hz is roughly in the middle.
      
      const y = (Math.log2(pitch) * 12) - 130; 
      const x = currentTimeIndex * noteScale;
      
      const currentPos = new THREE.Vector3(x, y, 0);

      // Create Note Cube
      const geometry = new THREE.BoxGeometry(0.5, 0.5, 0.5);
      const material = new THREE.MeshBasicMaterial({ color: 0xffffff });
      const cube = new THREE.Mesh(geometry, material);
      cube.position.copy(currentPos);
      scene.add(cube);

      // Line Logic
      if (lastPos &amp;&amp; lastPos.distanceTo(currentPos) &lt; 15) { 
        const lineGeo = new THREE.BufferGeometry().setFromPoints([lastPos, currentPos]);
        const lineMat = new THREE.LineBasicMaterial({ color: phraseColor, linewidth: 2 });
        const line = new THREE.Line(lineGeo, lineMat);
        scene.add(line);
      } else {
        // Start new phrase with new color
        phraseColor = getRandomColor();
      }

      lastPos = currentPos;

    } else {
      lastPos = null; // Silence
    }

    currentTimeIndex++;
  }

  renderer.render(scene, camera);
}

update();

&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/358883391945432111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/358883391945432111?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/358883391945432111'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/358883391945432111'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/01/bird-song-real-time-visualizer-app.html' title='Bird song real time visualizer app.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2526730606328739580</id><published>2026-01-02T04:58:00.000-08:00</published><updated>2026-01-02T18:02:25.419-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="anecdotes"/><category scheme="http://www.blogger.com/atom/ns#" term="best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="bird feeding"/><category scheme="http://www.blogger.com/atom/ns#" term="birdwatching"/><category scheme="http://www.blogger.com/atom/ns#" term="cute"/><title type='text'>The pigeons I feed in downtown LA got cinnamon swirl peanut butter and jam sandwiches.</title><content type='html'>&lt;p&gt;&amp;nbsp;As many of my long-time readers could attest, for a long time (about 7 years, or so), I was routinely in the habit of feeding the pigeons I see, daily - peanut butter and jelly sandwiches. Sometimes, it would be a variation on a sandwich, such as grilled cheese sandwiches, at times where I was feeling inspired. Nearly a year ago, at this point, however, I transitioned to seeds, because I had a nagging suspicion growing inside of me, of that seeds were literally more healthy and appropriate for the birds, desipite the charm of peanut butter and jelly sandwich-fed pigeons (later on, after I transitioned, I discovered, through consulting with AI, that peanuts, and peanut butter, consequentially, were high calorie dietary choices, which the birds would welcome.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, it had been a while since the birds had gotten sandwiches from me. I had fully transitioned to seeds, since I first tried them (I was initially reluctant to purchase seeds for the birds, despite that seeds used to be available, locally, in downtown LA, at Ralph’s; now, seeds are not on the shelves, anymore). I had reasoned that the nagging voice in my head could possibly be correct, and, at the time, I didn’t have a more authoritative retort to counter the assertion. The nagging voice in my head played a tricky hand with me, hinging upon the rhetoric of that seeds were more nutritious. Now, having spent some (or more) time using either feed that I would provide for the birds, I can say that they both have their upsides and downsides. For example, eating a sandwich was more of a community effort, despite that the birds flock towards the food being given towards them, and they step all over each other, as a result, regardless of the type of food I happen to give them. The sandwich pieces would get nibbled at, by one or more birds, at a time, and then the sandwich would be flung somewhere nearby, being that they have to tear the bread apart, so small groups of birds, for the several feeding hotspots the sandwiches would represent, each took their turns eating at the rich treat.&amp;nbsp;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNpYesFrv4kwWfdfQprYLqzXwMtjx7Ros5fQ8Bq4gYLzTPcFnqG6qmVIXZTOUR2_d3vFK7MCwiIl6g_d1bJdj0xoLiDCjcQGD3lCMXDRs4riLHVsJo766svrfYbx-VR0ppDg4WIrcWJuKmwnBT3O70kJpvBvM3umyzmVMkGTOkrlFnbBaJX5S8-e789I/s4032/IMG_1748.jpeg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNpYesFrv4kwWfdfQprYLqzXwMtjx7Ros5fQ8Bq4gYLzTPcFnqG6qmVIXZTOUR2_d3vFK7MCwiIl6g_d1bJdj0xoLiDCjcQGD3lCMXDRs4riLHVsJo766svrfYbx-VR0ppDg4WIrcWJuKmwnBT3O70kJpvBvM3umyzmVMkGTOkrlFnbBaJX5S8-e789I/w480-h640/IMG_1748.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Thomas’ Cinnamon Raisin Swirl bread, from Amazon, is what I chose for the birds’ sandwiches, today, and it was only $3.06! A bargain, relatively, and very tasty, at that.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;By comparison, seeds are a bit more democratic a food to give the birds, and, it’s a more “natural” food for them. Every one of them gets their chance at getting some of the seeds and grains that I toss out, and, for the most part, the birds still stick around, in general, before I arrive, and after I leave, ostensibly because other people come and feed them, there, at Pershing Square. I leave them a little bit hungry, perhaps, yet they’re there, daily, faithfully, and they appreciate any sort of meal they can get, that fits in to their dietary regimen, that is (pigeons are classified as granivores; meaning they naturally get by on a diet of grains). I feed three flocks of birds; two others, on opposite sides of town, and those ones get what I estimate is a filling meal for them, since they’re not frequented by other pigeon-feeding folks, where they’re situated. Today, though, (or, yesterday - I’m writing this early in the morning, the next day), I had cinnamon swirl raisin bread, since it was on sale for cheap, and I could get free shipping, if I ordered $10 more worth of stuff off of Amazon, in addition to their fresh bag of seeds that I bought them.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I figured, here’s my chance - to prove to myself that I’m still willing to make sandwiches for them, and, now I have the confidence that the high-calorie PB&amp;amp;J meals are suitable, vegetarian treats for them, and possibly, they become a bit stimulated from having some sugar, from the jam, which they wouldn’t get, eating just seeds. So I went out and made them their sandwiches, as I showed up at their roosting spots, and the birds waited patiently for the sandwich-making to be done; they’re used to waiting, I guess. This time around, though, the pigeons at Pershing Square seemed even more than typical “worked up” in to a feeding frenzy, since they got sandwiches (which arrived earlier in the day than the seeds). After I was done feeding them, they started to fly up towards me, some of them, as if they were courting the idea of landing on me, to let me know that they’re happy, and, perhaps, that I’d been holding out on some last bites for them to eat. I made the Pershing Square pigeons three sandwiches, which, I figure, was a duly rich meal for the birds, and that it was enough food material to go around, so that every bird who really wanted to eat got to have some - some of the birds will stand off to the sidelines, and I try to toss out a little bit for the sparrows, also, but I know that the birds also become more assertive when they’re hungrier, as individuals, so I think that, on some days, some of the birds are just less motivated to take part in the feeding frenzy.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The event made me think about how the day’s meal probably reminded the birds of their youth; it’s estimated that pigeons live for about 3 years, in the wild, yet they can live for perhaps 15-20 years, if taken good care of, in captivity. Now, I don’t quite believe that the birds I feed only live 3 years; I feel that they’re better taken care of than that, but certainly the meal must have been a warm reminder of the days when sandwiches were the standard fare (it’s a fair amount more costly to purchase sandwiches, for them, but I had food stamps, back then, and I could shoulder much of the costs, throughout a month, contingent on that my benefits were available for me to use, to purchase food, not seeds). Now, I spend my own money for everything I have to purchase, so it matters somewhat less, whether I purchase sandwich fixings for the birds, or it comes to seeds. Some of the birds even cozied up to the notion of trying to snatch some sandwich out of my hand, before I tossed out small portions of the meal throughout the flock, which surrounds me, as I feed them.&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2526730606328739580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2526730606328739580?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2526730606328739580'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2526730606328739580'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2026/01/the-pigeons-i-feed-in-downtown-la-got.html' title='The pigeons I feed in downtown LA got cinnamon swirl peanut butter and jam sandwiches.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNpYesFrv4kwWfdfQprYLqzXwMtjx7Ros5fQ8Bq4gYLzTPcFnqG6qmVIXZTOUR2_d3vFK7MCwiIl6g_d1bJdj0xoLiDCjcQGD3lCMXDRs4riLHVsJo766svrfYbx-VR0ppDg4WIrcWJuKmwnBT3O70kJpvBvM3umyzmVMkGTOkrlFnbBaJX5S8-e789I/s72-w480-h640-c/IMG_1748.jpeg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Pershing Square, 532 S Olive St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.048569 -118.2528917</georss:point><georss:box>5.738335163821155 -153.40914170000002 62.358802836178846 -83.0966417</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2725586009840045396</id><published>2025-12-27T20:57:00.000-08:00</published><updated>2025-12-31T18:09:07.358-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apps"/><category scheme="http://www.blogger.com/atom/ns#" term="grammar"/><category scheme="http://www.blogger.com/atom/ns#" term="linguistics"/><category scheme="http://www.blogger.com/atom/ns#" term="react"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><category scheme="http://www.blogger.com/atom/ns#" term="Wikipedia"/><title type='text'>Make Grammar Learning Fun and Interactive with LinguistLens / Grammarary.</title><content type='html'>&lt;p&gt;&amp;nbsp;This app promises to make learning about the underlying structure, linguistics, and grammar of things that you, or other people say fun, intuitive, and engaging, with its interactive interface and user features, such as storing phrase structures for later use, such as when you’d like to construct a sentence based on similar logic as one you had fancied, in the app, as well as hyperlinks to relevant Wikipedia articles, to assist in making you an expert at grammar, and the life of the party, on top of that.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To use the app, click on the link when the pop up comes up, and it’ll take you to Google AI Studio.&amp;nbsp;&lt;/p&gt;&lt;p&gt;———————&lt;/p&gt;&lt;p&gt;Click on View API Keys,&amp;nbsp;&lt;/p&gt;&lt;p&gt;and then Create API Key on the next page,&amp;nbsp;&lt;/p&gt;&lt;p&gt;and Create a New Project - call it LinguistLens, or whatever you choose.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Then create the key, copy it, and paste it back in to the pop up from inside the blogger page. The app will now work.&lt;/p&gt;&lt;p&gt;———————&lt;/p&gt;&lt;p&gt;If you navigated to my blog home page and you saw the article, you would need to click “Read more…” in order to launch the code for the app, this helps casual readers from becoming too confused about what’s going on with the pop up.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Who’s in to fancy grammar? People like Barack Obama create compelling spoken word using concepts discussed in articles on Wikipedia, which are linked to, from within the app. Good grammar is the basis of logic itself, practically. Many great ideas are founded upon the principles of sound grammatical pretexts, as a starting point.&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;ul style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(32, 33, 34); color: #202122; font-family: sans-serif; font-size: 16px; margin-inline: 1.6em 0px; margin: -0.5em 0px 0px 1.6em; padding: 0px;&quot;&gt;&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;It was a creed written into the founding documents that declared the destiny of a nation.&lt;br /&gt;&lt;b&gt;Yes we can&lt;/b&gt;.&lt;br /&gt;It was whispered by slaves and abolitionists as they blazed a trail towards freedom through the darkest of nights.&lt;br /&gt;&lt;b&gt;Yes we can&lt;/b&gt;.&lt;br /&gt;It was sung by immigrants as they struck out from distant shores and pioneers who pushed westward against an unforgiving wilderness.&lt;br /&gt;&lt;b&gt;Yes we can&lt;/b&gt;.&lt;br /&gt;It was the call of workers who organized; women who reached for the ballot; a President who chose the moon as our new frontier; and a King who took us to the mountaintop and pointed the way to the Promised Land. Yes we can to justice and equality. Yes we can to opportunity and prosperity. Yes we can heal this nation. Yes we can repair this world. Yes we can.&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;-webkit-text-size-adjust: auto; caret-color: rgb(32, 33, 34); color: #202122; font-family: sans-serif; font-size: 16px; margin: 0.5em 0px 1em;&quot;&gt;In the beginning of this quotation by&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Barack_Obama&quot; style=&quot;background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-radius: 2px; overflow-wrap: break-word; text-decoration: none;&quot; title=&quot;Barack Obama&quot;&gt;Barack Obama&lt;/a&gt;&amp;nbsp;epistrophe is evoked, while the latter part makes use of&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Anaphora_(rhetoric)&quot; style=&quot;background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-radius: 2px; overflow-wrap: break-word; text-decoration: none;&quot; title=&quot;Anaphora (rhetoric)&quot;&gt;anaphora&lt;/a&gt;.&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-3&quot; style=&quot;font-size: 12.8px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Epistrophe#cite_note-3&quot; style=&quot;background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border-radius: 2px; overflow-wrap: break-word; text-decoration: none;&quot;&gt;&lt;span class=&quot;cite-bracket&quot;&gt;[&lt;/span&gt;3&lt;span class=&quot;cite-bracket&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&amp;lt;


&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
    &lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
    &lt;title&gt;LinguistLens&lt;/title&gt;
    &lt;!-- Tailwind CSS --&gt;
    &lt;script src=&quot;https://cdn.tailwindcss.com&quot;&gt;&lt;/script&gt;
    &lt;!-- Lucide Icons --&gt;
    &lt;script src=&quot;https://unpkg.com/lucide@latest&quot;&gt;&lt;/script&gt;
    &lt;!-- Google Fonts --&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
    
    &lt;style&gt;
        body { font-family: &#39;Inter&#39;, sans-serif; }
        .hide { display: none !important; }
        .loader {
            border: 3px solid rgba(255,255,255,0.3);
            border-radius: 50%;
            border-top: 3px solid white;
            width: 20px;
            height: 20px;
            animation: spin 1s linear infinite;
        }
        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
        .fade-in { animation: fadeIn 0.5s ease-out forwards; opacity: 0; }
        @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body class=&quot;bg-slate-50 text-slate-900 min-h-screen&quot;&gt;

    &lt;!-- Navigation --&gt;
    &lt;nav class=&quot;sticky top-0 z-50 bg-white/90 backdrop-blur-md border-b border-slate-200 px-4 py-4 flex flex-wrap items-center justify-between shadow-sm gap-4&quot;&gt;
        &lt;div class=&quot;flex items-center gap-2&quot;&gt;
            &lt;div class=&quot;p-2 bg-indigo-600 rounded-lg shadow-sm&quot;&gt;
                &lt;i class=&quot;w-5 h-5 text-white&quot; data-lucide=&quot;layers&quot;&gt;&lt;/i&gt;
            &lt;/div&gt;
            &lt;h1 class=&quot;font-bold text-xl tracking-tight text-slate-800&quot;&gt;LinguistLens&lt;/h1&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;flex items-center gap-2&quot;&gt;
            &lt;!-- View Switcher --&gt;
            &lt;div class=&quot;flex gap-1 bg-slate-100 p-1 rounded-full&quot;&gt;
                &lt;button class=&quot;px-4 py-2 rounded-full text-sm font-bold transition-all bg-white text-indigo-600 shadow-md&quot; id=&quot;btn-view-analyze&quot;&gt;
                    Analyze
                &lt;/button&gt;
                &lt;button class=&quot;px-4 py-2 rounded-full text-sm font-bold transition-all text-slate-500 hover:text-slate-700 flex items-center gap-2&quot; id=&quot;btn-view-vault&quot;&gt;
                    Vault &lt;span class=&quot;bg-slate-200 text-slate-600 px-1.5 py-0.5 rounded-full text-[10px]&quot; id=&quot;vault-count&quot;&gt;0&lt;/span&gt;
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;!-- Settings Toggle --&gt;
            &lt;button class=&quot;p-2 text-slate-400 hover:text-slate-600 hover:bg-slate-100 rounded-full transition-colors&quot; id=&quot;btn-settings&quot; title=&quot;API Settings&quot;&gt;
                &lt;i class=&quot;w-5 h-5&quot; data-lucide=&quot;settings&quot;&gt;&lt;/i&gt;
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/nav&gt;

    &lt;!-- API Key Modal (Settings) --&gt;
    &lt;div class=&quot;hidden fixed inset-0 z-[60] bg-black/50 backdrop-blur-sm flex items-center justify-center p-4&quot; id=&quot;settings-panel&quot;&gt;
        &lt;div class=&quot;bg-white rounded-2xl shadow-2xl max-w-md w-full p-6 animate-in fade-in zoom-in duration-200&quot;&gt;
            &lt;div class=&quot;flex justify-between items-center mb-4&quot;&gt;
                &lt;h3 class=&quot;text-lg font-bold text-slate-800 flex items-center gap-2&quot;&gt;
                    &lt;i class=&quot;w-5 h-5 text-indigo-500&quot; data-lucide=&quot;key&quot;&gt;&lt;/i&gt; API Configuration
                &lt;/h3&gt;
                &lt;button class=&quot;text-slate-400 hover:text-slate-600&quot; id=&quot;close-settings&quot;&gt;
                    &lt;i class=&quot;w-5 h-5&quot; data-lucide=&quot;x&quot;&gt;&lt;/i&gt;
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;p class=&quot;text-sm text-slate-500 mb-4&quot;&gt;
                To use this tool, you need a Google Gemini API Key. It is free and easy to get.
                &lt;a class=&quot;text-indigo-600 underline font-medium&quot; href=&quot;https://aistudio.google.com/app/apikey&quot; target=&quot;_blank&quot;&gt;Get one here.&lt;/a&gt;
            &lt;/p&gt;
            &lt;div class=&quot;space-y-3&quot;&gt;
                &lt;label class=&quot;block text-xs font-bold text-slate-700 uppercase tracking-wider&quot;&gt;Your API Key&lt;/label&gt;
                &lt;input class=&quot;w-full p-3 border border-slate-200 rounded-xl focus:ring-2 focus:ring-indigo-500 outline-none text-slate-700&quot; id=&quot;api-key-input&quot; placeholder=&quot;Paste key here (starts with AIza...)&quot; type=&quot;password&quot; /&gt;
                &lt;button class=&quot;w-full bg-indigo-600 text-white py-3 rounded-xl font-bold hover:bg-indigo-700 transition-colors&quot; id=&quot;save-api-key&quot;&gt;
                    Save Key
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Main Content --&gt;
    &lt;main class=&quot;max-w-6xl mx-auto p-4 md:p-8&quot;&gt;
        
        &lt;!-- View: Analyze --&gt;
        &lt;div class=&quot;grid grid-cols-1 lg:grid-cols-12 gap-8&quot; id=&quot;view-analyze&quot;&gt;
            
            &lt;!-- Input Section --&gt;
            &lt;div class=&quot;lg:col-span-5 flex flex-col gap-4&quot;&gt;
                &lt;div class=&quot;bg-white rounded-2xl shadow-sm border border-slate-200 p-6 flex flex-col gap-4 sticky top-24&quot;&gt;
                    &lt;div class=&quot;flex items-center justify-between&quot;&gt;
                        &lt;h2 class=&quot;text-lg font-bold text-slate-800 flex items-center gap-2&quot;&gt;
                            &lt;i class=&quot;w-5 h-5 text-indigo-500&quot; data-lucide=&quot;history&quot;&gt;&lt;/i&gt; Source Text
                        &lt;/h2&gt;
                    &lt;/div&gt;
                    &lt;textarea class=&quot;w-full min-h-[300px] p-4 bg-slate-50 border border-slate-200 rounded-xl focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 text-slate-700 resize-none transition-all outline-none font-medium leading-relaxed&quot; id=&quot;input-text&quot; placeholder=&quot;Paste text here (e.g., an essay, speech, or article) to deconstruct its grammar and logic...&quot;&gt;&lt;/textarea&gt;
                    
                    &lt;div class=&quot;hidden flex items-center gap-2 text-sm text-red-600 bg-red-50 p-3 rounded-lg border border-red-100&quot; id=&quot;error-message&quot;&gt;
                        &lt;i class=&quot;w-4 h-4&quot; data-lucide=&quot;alert-circle&quot;&gt;&lt;/i&gt;
                        &lt;span id=&quot;error-text&quot;&gt;&lt;/span&gt;
                    &lt;/div&gt;

                    &lt;button class=&quot;w-full bg-indigo-600 text-white py-4 rounded-xl font-bold hover:bg-indigo-700 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2 transition-all transform active:scale-[0.98] shadow-lg shadow-indigo-200&quot; id=&quot;btn-analyze&quot;&gt;
                        &lt;i class=&quot;w-5 h-5&quot; data-lucide=&quot;search&quot;&gt;&lt;/i&gt;
                        &lt;span&gt;Analyze Text&lt;/span&gt;
                    &lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Results Section --&gt;
            &lt;div class=&quot;lg:col-span-7&quot;&gt;
                &lt;!-- Empty State --&gt;
                &lt;div class=&quot;h-full flex flex-col items-center justify-center text-slate-400 border-2 border-dashed border-slate-200 rounded-3xl p-12 text-center bg-white/50 min-h-[400px]&quot; id=&quot;results-empty&quot;&gt;
                    &lt;div class=&quot;bg-indigo-50 p-4 rounded-full mb-4&quot;&gt;
                        &lt;i class=&quot;w-8 h-8 text-indigo-400&quot; data-lucide=&quot;lightbulb&quot;&gt;&lt;/i&gt;
                    &lt;/div&gt;
                    &lt;p class=&quot;text-lg font-bold text-slate-600&quot;&gt;Awaiting Input&lt;/p&gt;
                    &lt;p class=&quot;text-sm max-w-xs mt-2 leading-relaxed&quot;&gt;Paste your text on the left to reveal sentence structures, linguistic terms, and reusable templates.&lt;/p&gt;
                &lt;/div&gt;

                &lt;!-- Loading State --&gt;
                &lt;div class=&quot;hidden space-y-4 animate-pulse&quot; id=&quot;results-loading&quot;&gt;
                    &lt;div class=&quot;h-32 bg-slate-200 rounded-2xl w-full&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;h-32 bg-slate-200 rounded-2xl w-full&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;h-32 bg-slate-200 rounded-2xl w-full&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- Content State --&gt;
                &lt;div class=&quot;hidden flex flex-col gap-6&quot; id=&quot;results-content&quot;&gt;
                    &lt;div class=&quot;flex items-center justify-between&quot;&gt;
                        &lt;h2 class=&quot;text-xl font-bold text-slate-800&quot;&gt;Analysis Results&lt;/h2&gt;
                        &lt;span class=&quot;text-xs font-mono text-slate-400&quot;&gt;&lt;span id=&quot;sentence-count&quot;&gt;0&lt;/span&gt; SENTENCES&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;space-y-4 pb-20&quot; id=&quot;sentences-list&quot;&gt;
                        &lt;!-- Sentences injected here --&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- View: Vault --&gt;
        &lt;div class=&quot;hidden max-w-4xl mx-auto&quot; id=&quot;view-vault&quot;&gt;
            &lt;div class=&quot;flex items-center justify-between mb-8 bg-white p-6 rounded-2xl border border-slate-200 shadow-sm&quot;&gt;
                &lt;div&gt;
                    &lt;h2 class=&quot;text-2xl font-bold text-slate-800&quot;&gt;Grammar Vault&lt;/h2&gt;
                    &lt;p class=&quot;text-slate-500 text-sm mt-1&quot;&gt;Your personal library of rhetorical structures (Local Storage).&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&quot;text-right&quot;&gt;
                    &lt;div class=&quot;text-3xl font-bold text-indigo-600&quot; id=&quot;vault-total&quot;&gt;0&lt;/div&gt;
                    &lt;div class=&quot;text-xs font-bold text-slate-400 uppercase tracking-wider&quot;&gt;Saved Forms&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;hidden text-center py-24 bg-white border-2 border-dashed border-slate-200 rounded-3xl&quot; id=&quot;vault-empty&quot;&gt;
                &lt;div class=&quot;bg-slate-50 w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4&quot;&gt;
                    &lt;i class=&quot;w-8 h-8 text-slate-300&quot; data-lucide=&quot;save&quot;&gt;&lt;/i&gt;
                &lt;/div&gt;
                &lt;h3 class=&quot;text-lg font-bold text-slate-700&quot;&gt;Vault is Empty&lt;/h3&gt;
                &lt;button class=&quot;mt-6 px-6 py-2 bg-indigo-600 text-white rounded-full text-sm font-bold hover:bg-indigo-700 transition-colors&quot; onclick=&quot;switchView(&#39;analyze&#39;)&quot;&gt;Go to Analyzer&lt;/button&gt;
            &lt;/div&gt;

            &lt;div class=&quot;grid gap-6&quot; id=&quot;vault-list&quot;&gt;
                &lt;!-- Templates injected here --&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/main&gt;

    &lt;!-- Application Logic --&gt;
    &lt;script&gt;
        // --- State Management ---
        let sentences = [];
        let templates = JSON.parse(localStorage.getItem(&#39;linguist_templates&#39;) || &#39;[]&#39;);
        let activeView = &#39;analyze&#39;;
        
        // --- UI Initialization ---
        document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
            lucide.createIcons();
            updateVaultCount();
            
            // Check for API Key
            const savedKey = localStorage.getItem(&#39;linguist_api_key&#39;);
            if (savedKey) {
                document.getElementById(&#39;api-key-input&#39;).value = savedKey;
            } else {
                // Show settings if no key
                document.getElementById(&#39;settings-panel&#39;).classList.remove(&#39;hidden&#39;);
            }
        });

        // --- Navigation ---
        window.switchView = (viewName) =&gt; {
            activeView = viewName;
            document.getElementById(&#39;view-analyze&#39;).classList.toggle(&#39;hidden&#39;, viewName !== &#39;analyze&#39;);
            document.getElementById(&#39;view-vault&#39;).classList.toggle(&#39;hidden&#39;, viewName !== &#39;vault&#39;);
            
            const btnAnalyzeView = document.getElementById(&#39;btn-view-analyze&#39;);
            const btnVaultView = document.getElementById(&#39;btn-view-vault&#39;);
            
            if (viewName === &#39;analyze&#39;) {
                btnAnalyzeView.classList.add(&#39;bg-white&#39;, &#39;text-indigo-600&#39;, &#39;shadow-md&#39;);
                btnAnalyzeView.classList.remove(&#39;text-slate-500&#39;);
                btnVaultView.classList.remove(&#39;bg-white&#39;, &#39;text-indigo-600&#39;, &#39;shadow-md&#39;);
                btnVaultView.classList.add(&#39;text-slate-500&#39;);
            } else {
                btnVaultView.classList.add(&#39;bg-white&#39;, &#39;text-indigo-600&#39;, &#39;shadow-md&#39;);
                btnVaultView.classList.remove(&#39;text-slate-500&#39;);
                btnAnalyzeView.classList.remove(&#39;bg-white&#39;, &#39;text-indigo-600&#39;, &#39;shadow-md&#39;);
                btnAnalyzeView.classList.add(&#39;text-slate-500&#39;);
                renderVault();
            }
        };

        document.getElementById(&#39;btn-view-analyze&#39;).addEventListener(&#39;click&#39;, () =&gt; switchView(&#39;analyze&#39;));
        document.getElementById(&#39;btn-view-vault&#39;).addEventListener(&#39;click&#39;, () =&gt; switchView(&#39;vault&#39;));

        // --- Settings / API Key ---
        const settingsPanel = document.getElementById(&#39;settings-panel&#39;);
        document.getElementById(&#39;btn-settings&#39;).addEventListener(&#39;click&#39;, () =&gt; settingsPanel.classList.remove(&#39;hidden&#39;));
        document.getElementById(&#39;close-settings&#39;).addEventListener(&#39;click&#39;, () =&gt; settingsPanel.classList.add(&#39;hidden&#39;));
        
        document.getElementById(&#39;save-api-key&#39;).addEventListener(&#39;click&#39;, () =&gt; {
            const key = document.getElementById(&#39;api-key-input&#39;).value.trim();
            if(key) {
                localStorage.setItem(&#39;linguist_api_key&#39;, key);
                settingsPanel.classList.add(&#39;hidden&#39;);
                alert(&#39;API Key Saved!&#39;);
            }
        });

        // --- Analysis Logic ---
        document.getElementById(&#39;btn-analyze&#39;).addEventListener(&#39;click&#39;, async () =&gt; {
            const apiKey = localStorage.getItem(&#39;linguist_api_key&#39;);
            if (!apiKey) {
                settingsPanel.classList.remove(&#39;hidden&#39;);
                return;
            }

            const text = document.getElementById(&#39;input-text&#39;).value.trim();
            if (!text) return;

            const btnAnalyze = document.getElementById(&#39;btn-analyze&#39;);
            
            // Loading State
            document.getElementById(&#39;results-empty&#39;).classList.add(&#39;hidden&#39;);
            document.getElementById(&#39;results-content&#39;).classList.add(&#39;hidden&#39;);
            document.getElementById(&#39;results-loading&#39;).classList.remove(&#39;hidden&#39;);
            document.getElementById(&#39;error-message&#39;).classList.add(&#39;hidden&#39;);
            btnAnalyze.disabled = true;
            btnAnalyze.innerHTML = `&lt;div class=&quot;loader&quot;&gt;&lt;/div&gt; Analyzing...`;

            try {
                const systemPrompt = `
                Analyze the text sentence by sentence.
                For each sentence, provide a JSON object with these EXACT keys:
                1. originalText: The sentence string.
                2. structure: String describing grammatical components (e.g. &quot;Compound-Complex&quot;).
                3. linguistics: String listing key terms found (e.g. &quot;Active voice, Anaphora&quot;).
                4. wikipediaLinks: An array of strings containing EXACT Wikipedia page titles for the terms found.
                5. skeleton: A template string (e.g. &quot;[Subject] [Verb]...&quot;).
                6. effectiveness: String &quot;High&quot;, &quot;Medium&quot;, or &quot;Low&quot;.

                Return a JSON array of objects.
                `;

                const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`, {
                    method: &#39;POST&#39;,
                    headers: { &#39;Content-Type&#39;: &#39;application/json&#39; },
                    body: JSON.stringify({
                        contents: [{ parts: [{ text: systemPrompt + &quot;\n\nTEXT:\n&quot; + text }] }],
                        generationConfig: { responseMimeType: &quot;application/json&quot; }
                    })
                });

                if (!response.ok) {
                    const errData = await response.json();
                    throw new Error(errData.error?.message || &quot;API call failed&quot;);
                }

                const data = await response.json();
                let resultText = data.candidates?.[0]?.content?.parts?.[0]?.text || &quot;[]&quot;;
                // Cleanup Markdown
                resultText = resultText.replace(/```json\n?/g, &#39;&#39;).replace(/```/g, &#39;&#39;).trim();
                
                sentences = JSON.parse(resultText);
                renderSentences();

                document.getElementById(&#39;results-loading&#39;).classList.add(&#39;hidden&#39;);
                document.getElementById(&#39;results-content&#39;).classList.remove(&#39;hidden&#39;);

            } catch (err) {
                console.error(err);
                document.getElementById(&#39;results-loading&#39;).classList.add(&#39;hidden&#39;);
                document.getElementById(&#39;error-message&#39;).classList.remove(&#39;hidden&#39;);
                document.getElementById(&#39;error-text&#39;).innerText = &quot;Analysis Failed: &quot; + err.message;
            } finally {
                btnAnalyze.disabled = false;
                btnAnalyze.innerHTML = `&lt;i data-lucide=&quot;search&quot; class=&quot;w-5 h-5&quot;&gt;&lt;/i&gt;&lt;span&gt;Analyze Text&lt;/span&gt;`;
                lucide.createIcons();
            }
        });

        // --- Render Sentences ---
        function renderSentences() {
            const list = document.getElementById(&#39;sentences-list&#39;);
            list.innerHTML = &#39;&#39;;
            document.getElementById(&#39;sentence-count&#39;).innerText = sentences.length;

            sentences.forEach((s, idx) =&gt; {
                const el = document.createElement(&#39;div&#39;);
                el.className = &#39;group border border-slate-200 bg-white rounded-2xl p-5 cursor-pointer transition-all hover:border-indigo-300 hover:shadow-md overflow-hidden&#39;;
                el.innerHTML = `
                    &lt;div class=&quot;flex justify-between items-start mb-3&quot;&gt;
                        &lt;span class=&quot;text-xs font-mono font-bold text-slate-400 uppercase tracking-wider&quot;&gt;Segment ${idx + 1}&lt;/span&gt;
                        &lt;div class=&quot;text-[10px] uppercase font-bold px-2 py-1 rounded-full ${getImpactClass(s.effectiveness)}&quot;&gt;
                            ${s.effectiveness} Impact
                        &lt;/div&gt;
                    &lt;/div&gt;
                    &lt;p class=&quot;text-slate-800 font-medium leading-relaxed line-clamp-2 transition-all&quot; id=&quot;text-${idx}&quot;&gt;${s.originalText}&lt;/p&gt;
                    
                    &lt;div id=&quot;details-${idx}&quot; class=&quot;hidden mt-6 space-y-6 pt-4 border-t border-slate-100 fade-in&quot;&gt;
                        &lt;div class=&quot;grid grid-cols-1 md:grid-cols-2 gap-4&quot;&gt;
                            &lt;div class=&quot;bg-slate-50 p-4 rounded-xl border border-slate-100&quot;&gt;
                                &lt;h4 class=&quot;text-[10px] uppercase font-bold text-slate-400 tracking-wider mb-2 flex items-center gap-1&quot;&gt;
                                    &lt;i data-lucide=&quot;layers&quot; class=&quot;w-3 h-3&quot;&gt;&lt;/i&gt; Structure
                                &lt;/h4&gt;
                                &lt;p class=&quot;text-sm text-slate-700 italic mb-2&quot;&gt;${s.structure}&lt;/p&gt;
                                &lt;div class=&quot;mt-4 pt-4 border-t border-slate-200&quot;&gt;
                                     &lt;h4 class=&quot;text-[10px] uppercase font-bold text-slate-400 tracking-wider mb-2&quot;&gt;Terms Identified&lt;/h4&gt;
                                     &lt;p class=&quot;text-sm text-slate-800 font-medium&quot;&gt;${s.linguistics}&lt;/p&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;bg-indigo-50 p-4 rounded-xl border border-indigo-100&quot;&gt;
                                &lt;h4 class=&quot;text-[10px] uppercase font-bold text-indigo-400 tracking-wider mb-2 flex items-center gap-1&quot;&gt;
                                    &lt;i data-lucide=&quot;copy&quot; class=&quot;w-3 h-3&quot;&gt;&lt;/i&gt; Skeleton Template
                                &lt;/h4&gt;
                                &lt;div class=&quot;text-sm text-indigo-900 font-mono leading-relaxed mb-3&quot;&gt;${s.skeleton}&lt;/div&gt;
                                &lt;button onclick=&quot;saveTemplate(${idx})&quot; class=&quot;w-full py-2 bg-white text-indigo-600 rounded-lg text-xs font-bold border border-indigo-200 hover:bg-indigo-600 hover:text-white transition-colors flex items-center justify-center gap-2&quot;&gt;
                                    &lt;i data-lucide=&quot;save&quot; class=&quot;w-3.5 h-3.5&quot;&gt;&lt;/i&gt; Save Template
                                &lt;/button&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                        ${renderWikiLinks(s.wikipediaLinks)}
                    &lt;/div&gt;
                `;

                // Accordion Logic
                el.addEventListener(&#39;click&#39;, (e) =&gt; {
                    if(e.target.closest(&#39;button&#39;) || e.target.closest(&#39;a&#39;)) return;
                    const details = document.getElementById(`details-${idx}`);
                    const text = document.getElementById(`text-${idx}`);
                    const isOpen = !details.classList.contains(&#39;hidden&#39;);

                    // Close all
                    document.querySelectorAll(&#39;[id^=&quot;details-&quot;]&#39;).forEach(d =&gt; d.classList.add(&#39;hidden&#39;));
                    document.querySelectorAll(&#39;[id^=&quot;text-&quot;]&#39;).forEach(t =&gt; {
                        t.classList.add(&#39;line-clamp-2&#39;);
                        t.classList.remove(&#39;text-lg&#39;);
                    });
                    document.querySelectorAll(&#39;.group&#39;).forEach(g =&gt; {
                        g.classList.remove(&#39;ring-1&#39;, &#39;ring-indigo-500&#39;, &#39;shadow-xl&#39;, &#39;shadow-indigo-100&#39;);
                    });

                    // Open clicked
                    if (!isOpen) {
                        details.classList.remove(&#39;hidden&#39;);
                        text.classList.remove(&#39;line-clamp-2&#39;);
                        text.classList.add(&#39;text-lg&#39;);
                        el.classList.add(&#39;ring-1&#39;, &#39;ring-indigo-500&#39;, &#39;shadow-xl&#39;, &#39;shadow-indigo-100&#39;);
                    }
                });

                list.appendChild(el);
            });
            lucide.createIcons();
        }

        function getImpactClass(eff) {
            if (eff === &#39;High&#39;) return &#39;bg-emerald-100 text-emerald-700&#39;;
            if (eff === &#39;Low&#39;) return &#39;bg-rose-100 text-rose-700&#39;;
            return &#39;bg-amber-100 text-amber-700&#39;;
        }

        function renderWikiLinks(links) {
            if (!links || !links.length) return &#39;&#39;;
            return `
                &lt;div class=&quot;bg-amber-50 rounded-xl p-4 border border-amber-100&quot;&gt;
                    &lt;h4 class=&quot;text-[10px] uppercase font-bold text-amber-600 tracking-wider mb-3 flex items-center gap-1&quot;&gt;
                        &lt;i data-lucide=&quot;book-open&quot; class=&quot;w-3 h-3&quot;&gt;&lt;/i&gt; Wikipedia Grammar Guide
                    &lt;/h4&gt;
                    &lt;div class=&quot;flex flex-wrap gap-2&quot;&gt;
                        ${links.map(link =&gt; `
                            &lt;a href=&quot;https://en.wikipedia.org/wiki/${link.trim().replace(/\s+/g, &#39;_&#39;)}&quot; target=&quot;_blank&quot; class=&quot;flex items-center gap-2 px-3 py-2 bg-white border border-amber-200 rounded-lg text-xs font-bold text-slate-700 hover:border-amber-400 hover:text-amber-800 hover:shadow-sm transition-all shadow-amber-100&quot;&gt;
                                ${link.replace(/_/g, &#39; &#39;)}
                                &lt;i data-lucide=&quot;external-link&quot; class=&quot;w-3 h-3 text-amber-400&quot;&gt;&lt;/i&gt;
                            &lt;/a&gt;
                        `).join(&#39;&#39;)}
                    &lt;/div&gt;
                &lt;/div&gt;
            `;
        }

        // --- Vault Logic (Local Storage) ---
        window.saveTemplate = (idx) =&gt; {
            const s = sentences[idx];
            if (!s) return;
            
            const newTemplate = {
                id: Date.now().toString(),
                original: s.originalText,
                skeleton: s.skeleton,
                structure: s.structure,
                linguistics: s.linguistics,
                timestamp: Date.now()
            };

            templates.push(newTemplate);
            localStorage.setItem(&#39;linguist_templates&#39;, JSON.stringify(templates));
            updateVaultCount();
            alert(&#39;Template Saved to Browser Storage!&#39;);
        };

        window.deleteTemplate = (id) =&gt; {
            if (confirm(&#39;Delete this template?&#39;)) {
                templates = templates.filter(t =&gt; t.id !== id);
                localStorage.setItem(&#39;linguist_templates&#39;, JSON.stringify(templates));
                updateVaultCount();
                renderVault();
            }
        };

        function updateVaultCount() {
            document.getElementById(&#39;vault-count&#39;).innerText = templates.length;
            document.getElementById(&#39;vault-total&#39;).innerText = templates.length;
        }

        window.copyText = (text) =&gt; {
             navigator.clipboard.writeText(text);
             alert(&#39;Copied to clipboard&#39;);
        };

        function renderVault() {
            const list = document.getElementById(&#39;vault-list&#39;);
            const empty = document.getElementById(&#39;vault-empty&#39;);
            
            if (templates.length === 0) {
                list.innerHTML = &#39;&#39;;
                empty.classList.remove(&#39;hidden&#39;);
                return;
            }
            
            empty.classList.add(&#39;hidden&#39;);
            list.innerHTML = templates.sort((a,b) =&gt; b.timestamp - a.timestamp).map(t =&gt; `
                &lt;div class=&quot;bg-white border border-slate-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition-all group&quot;&gt;
                    &lt;div class=&quot;p-6&quot;&gt;
                        &lt;div class=&quot;flex justify-between items-start mb-4&quot;&gt;
                            &lt;div class=&quot;flex items-center gap-2&quot;&gt;
                                &lt;span class=&quot;w-2 h-8 bg-indigo-500 rounded-full&quot;&gt;&lt;/span&gt;
                                &lt;h3 class=&quot;text-xs font-bold text-slate-400 uppercase tracking-widest&quot;&gt;Template&lt;/h3&gt;
                            &lt;/div&gt;
                            &lt;button onclick=&quot;deleteTemplate(&#39;${t.id}&#39;)&quot; class=&quot;p-2 text-slate-300 hover:text-red-500 hover:bg-red-50 rounded-lg transition-colors group-hover:opacity-100 opacity-0&quot;&gt;
                                &lt;i data-lucide=&quot;trash-2&quot; class=&quot;w-4 h-4&quot;&gt;&lt;/i&gt;
                            &lt;/button&gt;
                        &lt;/div&gt;
                        &lt;div class=&quot;mb-6 relative&quot;&gt;
                            &lt;div class=&quot;text-lg font-mono text-indigo-900 bg-indigo-50/50 p-5 rounded-xl border border-indigo-100 leading-relaxed&quot;&gt;
                                ${t.skeleton}
                            &lt;/div&gt;
                            &lt;button onclick=&quot;copyText(&#39;${t.skeleton.replace(/&#39;/g, &quot;\\&#39;&quot;)}&#39;)&quot; class=&quot;absolute top-2 right-2 p-1.5 text-indigo-300 hover:text-indigo-600 hover:bg-white rounded-md transition-colors&quot;&gt;
                                &lt;i data-lucide=&quot;copy&quot; class=&quot;w-4 h-4&quot;&gt;&lt;/i&gt;
                            &lt;/button&gt;
                        &lt;/div&gt;
                        &lt;div class=&quot;grid grid-cols-1 md:grid-cols-2 gap-6 pt-6 border-t border-slate-100&quot;&gt;
                             &lt;div&gt;
                                &lt;span class=&quot;text-[10px] uppercase font-bold text-slate-400 tracking-wider block mb-2&quot;&gt;Source&lt;/span&gt;
                                &lt;p class=&quot;text-sm text-slate-600 italic border-l-2 border-slate-200 pl-3&quot;&gt;&quot;${t.original}&quot;&lt;/p&gt;
                            &lt;/div&gt;
                            &lt;div&gt;
                                &lt;span class=&quot;text-[10px] uppercase font-bold text-slate-400 tracking-wider block mb-2&quot;&gt;Linguistics&lt;/span&gt;
                                &lt;p class=&quot;text-sm text-slate-600&quot;&gt;${t.structure}&lt;/p&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            `).join(&#39;&#39;);
            lucide.createIcons();
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;



&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2725586009840045396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2725586009840045396?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2725586009840045396'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2725586009840045396'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/12/make-grammar-learning-fun-and-interactive-with-linguistlens.html' title='Make Grammar Learning Fun and Interactive with LinguistLens / Grammarary.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-8746807688638844410</id><published>2025-12-25T15:25:00.000-08:00</published><updated>2025-12-25T17:01:34.178-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="anecdotes"/><category scheme="http://www.blogger.com/atom/ns#" term="Christmas"/><category scheme="http://www.blogger.com/atom/ns#" term="cute"/><category scheme="http://www.blogger.com/atom/ns#" term="funny"/><category scheme="http://www.blogger.com/atom/ns#" term="photography"/><category scheme="http://www.blogger.com/atom/ns#" term="pigeon tours"/><title type='text'>Merry Pidge-mas!</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDZZc7aYYIR03Hdaps9tiTo7BnPs4v2tReJ9p7DwT_HG3SumP6Q14aj5illhhhXNr-gEFau7hGSrWYoLSflLmFrTLEJEriDj2ZXWXg7Sbe6tiLPAKhB8uXW4FWy12iyNeE5OoyotA2wlIP55qN4TFEWz99c9DyOwNOQd4DSXl1etMJM7S18At-7wcfIEE/s1536/3C50EFCC-C4EC-4014-93C2-64ED269EABAD.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDZZc7aYYIR03Hdaps9tiTo7BnPs4v2tReJ9p7DwT_HG3SumP6Q14aj5illhhhXNr-gEFau7hGSrWYoLSflLmFrTLEJEriDj2ZXWXg7Sbe6tiLPAKhB8uXW4FWy12iyNeE5OoyotA2wlIP55qN4TFEWz99c9DyOwNOQd4DSXl1etMJM7S18At-7wcfIEE/w640-h426/3C50EFCC-C4EC-4014-93C2-64ED269EABAD.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHJLoXTI09cOj24MbSEDCG0rCroTLR7mdzHFEkYPaZmoD-ZnaPfjwMaTtHZnKQfP1MFf4n-bSofOhn-n7cBkMm5xZJGjBTQYbCsGXkdR-qovRg1MXZ5-9TgQ84LvflxQD4QxL4610jp8uWHlx9LwN1J6Iz6aHSOlqlUig_AhTcVegYdUscoG2tpuXaZsc/s4032/IMG_1712.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHJLoXTI09cOj24MbSEDCG0rCroTLR7mdzHFEkYPaZmoD-ZnaPfjwMaTtHZnKQfP1MFf4n-bSofOhn-n7cBkMm5xZJGjBTQYbCsGXkdR-qovRg1MXZ5-9TgQ84LvflxQD4QxL4610jp8uWHlx9LwN1J6Iz6aHSOlqlUig_AhTcVegYdUscoG2tpuXaZsc/w640-h480/IMG_1712.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Earlier today, I went out to feed the pigeons in the late morning.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv45A4NSwdkIatcHlfqgngmAUi-N-rs0088wNYBDyv44lTJCrK9qc4loeBlZteWUURVKT218QOFPcMOPsk56_F5AXfIGLsFqiyxaXDQ30wH1TrOHIj2t4qtD4ieljOko9AVtu44cAztXByB3nKuF7X0DD3CPvmVpd2o9ND4QWs0uYeIqgMK5APF95hkJ4/s4032/IMG_1714.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv45A4NSwdkIatcHlfqgngmAUi-N-rs0088wNYBDyv44lTJCrK9qc4loeBlZteWUURVKT218QOFPcMOPsk56_F5AXfIGLsFqiyxaXDQ30wH1TrOHIj2t4qtD4ieljOko9AVtu44cAztXByB3nKuF7X0DD3CPvmVpd2o9ND4QWs0uYeIqgMK5APF95hkJ4/w640-h480/IMG_1714.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The birds greet me, most of the time, some of them, at least, by flying up towards me.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNUbUCKGPv4VjNNwdmWfcNGwjoqqAVht9TRLW6kU-Nf0awLlLrNHZVBoAj0vosx0gcOiEP7mkDn84LhgWwaepAp-6WmWTMlCww7OxVl7Kasr6dwehYWbflo9osjmMkqCyXBewdSrEKu5VICGQSQfYvqT3aAEn-UbHppMyzP4YOBE-6PYzQJ9x9j48Kwb8/s4032/IMG_1715.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNUbUCKGPv4VjNNwdmWfcNGwjoqqAVht9TRLW6kU-Nf0awLlLrNHZVBoAj0vosx0gcOiEP7mkDn84LhgWwaepAp-6WmWTMlCww7OxVl7Kasr6dwehYWbflo9osjmMkqCyXBewdSrEKu5VICGQSQfYvqT3aAEn-UbHppMyzP4YOBE-6PYzQJ9x9j48Kwb8/w640-h480/IMG_1715.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A pair of siblings and their mother, from China, were taking photos and videos with the birds.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkxuX_hMLFtsbVAlFhpNkpAshe6RVTaPr8dkdjhrPVxhcataM7hkNYZnzOYpT15dHPOEGXItgZ-f2P5cgJip55a1ghPDpppi1bs5q5-FxQii3A4qam2MDUZ0rg3-MlsA2arfiyfiCCESILxcseuyYZ9PUooE_n0hePaFRWsYqZEA8MFqXIanvhl9lzzAE/s4032/IMG_1719.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkxuX_hMLFtsbVAlFhpNkpAshe6RVTaPr8dkdjhrPVxhcataM7hkNYZnzOYpT15dHPOEGXItgZ-f2P5cgJip55a1ghPDpppi1bs5q5-FxQii3A4qam2MDUZ0rg3-MlsA2arfiyfiCCESILxcseuyYZ9PUooE_n0hePaFRWsYqZEA8MFqXIanvhl9lzzAE/w640-h480/IMG_1719.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Another pedestrian was telling them that they should try being more interactive, and get a circle of birds round them.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN7Bbr9SoHLR66we32aNVoQKEUjtzCf2X2cbiiQ2ifnyOqf6yB70sOqU7cp5prriFzhzxBnMO9qnkF2Yprmq6A8LVyt0MwRb-JcC1ybvBo6fW9H4tFVDGv5h44SgjA0VUfHGcL0i84mQ4fDVnXdZmGwfQBY3QMRBxVwokpUNJY9zicew9LBkGrNZHA3hM/s4032/IMG_1720.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN7Bbr9SoHLR66we32aNVoQKEUjtzCf2X2cbiiQ2ifnyOqf6yB70sOqU7cp5prriFzhzxBnMO9qnkF2Yprmq6A8LVyt0MwRb-JcC1ybvBo6fW9H4tFVDGv5h44SgjA0VUfHGcL0i84mQ4fDVnXdZmGwfQBY3QMRBxVwokpUNJY9zicew9LBkGrNZHA3hM/w640-h480/IMG_1720.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The guy asked me for some seeds, and he handed the kids a handful of seeds, each. It was a fun part of my day, to assist in giving them the pigeon experience that we have, here at Pershing Square.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1gU55_I1RpY2vPGkiokH0vZK9ZzV0kYEyMJDcxp-yLYhKTOW064nef14tb9aWYgDxMmBLdkKfkpI3gxcPpDH1SPOt6-vpx1C0xoi_492kDTIDCOVEonIvkHx0aI3Xo09dNaTl2hhL6zh81hrDV3JJfZ5uYT_-t_n0KPjK4RW8OJ8X-J959hh4gN6jjc8/s4032/IMG_1704.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1gU55_I1RpY2vPGkiokH0vZK9ZzV0kYEyMJDcxp-yLYhKTOW064nef14tb9aWYgDxMmBLdkKfkpI3gxcPpDH1SPOt6-vpx1C0xoi_492kDTIDCOVEonIvkHx0aI3Xo09dNaTl2hhL6zh81hrDV3JJfZ5uYT_-t_n0KPjK4RW8OJ8X-J959hh4gN6jjc8/w640-h480/IMG_1704.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Yesterday, I was in East LA, and the afternoon sun broke through the clouds and put out a glorious rainbow.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGNlYaGNtgM0APikvLjJ3un6g5MMUPpA-QIStAqF1pWt6ZJcjXkBf7YyUAj_D5TGmYZ0JQprXZE4AktCn9TJSPCgOBjne4jSeZbe7cINKfWw4K3TqCfaXAfg5kbrWddnnDTGokKxRx9Fx8mDFF3O8uwJVE8rl5I3sRA_gguijy_Vl773N-Z2n0MzKqnJA/s4032/IMG_1703.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3024&quot; data-original-width=&quot;4032&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGNlYaGNtgM0APikvLjJ3un6g5MMUPpA-QIStAqF1pWt6ZJcjXkBf7YyUAj_D5TGmYZ0JQprXZE4AktCn9TJSPCgOBjne4jSeZbe7cINKfWw4K3TqCfaXAfg5kbrWddnnDTGokKxRx9Fx8mDFF3O8uwJVE8rl5I3sRA_gguijy_Vl773N-Z2n0MzKqnJA/w640-h480/IMG_1703.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;I could most see the very end of the rainbow, off in the nearby distance.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3XqSuhqez-9kruSflSs0ZZHaPP-wMwlLXudXFHrSuloZnQRzhnYizKk5tDS565T8dH_bMsc6hrFqu-IBngTyDq4Qmb9JkL0HbciyCu1oLXzxkrN28pItIVqiq1zy9IveXL_e1kQLKT_wtMsGDH3VN38AT6mPm1l8lzt1Ynppfxay7T7AkGkmsTlXPu0/s4032/IMG_1706.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;4032&quot; data-original-width=&quot;3024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3XqSuhqez-9kruSflSs0ZZHaPP-wMwlLXudXFHrSuloZnQRzhnYizKk5tDS565T8dH_bMsc6hrFqu-IBngTyDq4Qmb9JkL0HbciyCu1oLXzxkrN28pItIVqiq1zy9IveXL_e1kQLKT_wtMsGDH3VN38AT6mPm1l8lzt1Ynppfxay7T7AkGkmsTlXPu0/w480-h640/IMG_1706.jpeg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The sparrows were out, as well, and I made sure to save some seeds for the little ones, as well.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/8746807688638844410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/8746807688638844410?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/8746807688638844410'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/8746807688638844410'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/12/merry-pidge-mas.html' title='Merry Pidge-mas!'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDZZc7aYYIR03Hdaps9tiTo7BnPs4v2tReJ9p7DwT_HG3SumP6Q14aj5illhhhXNr-gEFau7hGSrWYoLSflLmFrTLEJEriDj2ZXWXg7Sbe6tiLPAKhB8uXW4FWy12iyNeE5OoyotA2wlIP55qN4TFEWz99c9DyOwNOQd4DSXl1etMJM7S18At-7wcfIEE/s72-w640-h426-c/3C50EFCC-C4EC-4014-93C2-64ED269EABAD.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Pershing Square, 532 S Olive St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.048569 -118.2528917</georss:point><georss:box>7.7341872776475427 -153.40914170000002 60.362950722352458 -83.0966417</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-1601422044203753877</id><published>2025-12-01T23:37:00.000-08:00</published><updated>2025-12-02T03:37:46.229-08:00</updated><title type='text'>Pigeon physical modeler Graphical User Interface scratch space.</title><content type='html'>&lt;div id=&quot;pigeon-iso-wrapper&quot;&gt;
    &lt;style&gt;
        /* --- CSS ISOLATION --- 
           All styles are prefixed with #pigeon-iso-wrapper 
           and use specific classes (.pgn-...) to prevent leaks.
        */

        #pigeon-iso-wrapper {
            position: relative;
            width: 100%;
            max-width: 600px;
            height: 400px;
            margin: 20px auto;
            background-color: #222;
            border: 1px solid #444;
            border-radius: 12px;
            overflow: hidden; 
            font-family: sans-serif; /* Widget font only */
            box-shadow: 0 10px 30px rgba(0,0,0,0.5);
            cursor: ns-resize;
            user-select: none;
            -webkit-user-select: none;
            touch-action: none;
            color: white;
            box-sizing: border-box;
            text-align: left; /* Reset alignment */
        }

        /* Internal Reset */
        #pigeon-iso-wrapper *, 
        #pigeon-iso-wrapper *::before, 
        #pigeon-iso-wrapper *::after {
            box-sizing: border-box;
            line-height: normal;
        }

        /* 1. CANVAS LAYER */
        #pigeon-iso-wrapper .pgn-canvas {
            position: absolute; top: 0; left: 0;
            width: 100%; height: 100%;
            z-index: 1; display: block;
        }

        /* 2. BIRD LAYER */
        #pigeon-iso-wrapper .pgn-bird-layer {
            position: absolute; left: -40px; top: 50%;
            width: 300px; height: 400px;
            transform: translateY(-50%);
            pointer-events: none; z-index: 2;
            filter: drop-shadow(0 0 10px rgba(0,0,0,0.5));
        }

        #pigeon-iso-wrapper .pgn-svg {
            width: 100%; height: 100%;
            transform-origin: 15% 85%;
            transition: transform 0.05s linear;
            display: block;
        }

        /* SVG Colors */
        .pgn-neck { fill: #5a5a6b; } .pgn-head { fill: #78788c; }
        .pgn-beak { fill: #ffb347; } .pgn-eye { fill: #fff; } .pgn-pupil { fill: #000; }

        /* 3. HUD LAYER */
        #pigeon-iso-wrapper .pgn-hud {
            position: absolute; right: 20px; top: 20px;
            text-align: right; z-index: 3; pointer-events: none;
            opacity: 0; transition: opacity 0.5s;
        }

        #pigeon-iso-wrapper .pgn-title {
            margin: 0; color: #4ecca3; font-size: 14px; 
            text-transform: uppercase; letter-spacing: 1px;
            font-weight: bold;
        }

        #pigeon-iso-wrapper .pgn-readout {
            color: #fff; font-size: 28px; 
            font-weight: 300; margin-top: 5px;
        }

        /* 4. OVERLAY LAYER */
        #pigeon-iso-overlay {
            position: absolute; top: 0; left: 0; width: 100%; height: 100%;
            background: rgba(20, 20, 20, 0.98);
            display: flex; justify-content: center; align-items: center;
            z-index: 999;
        }

        /* Button Styling - Specific Class Only */
        #pigeon-iso-wrapper .pgn-btn {
            background: #4ecca3; color: #111; border: none;
            padding: 20px 40px; font-size: 16px; font-weight: bold;
            border-radius: 50px; cursor: pointer;
            box-shadow: 0 4px 15px rgba(78, 204, 163, 0.3);
            transition: transform 0.1s;
            appearance: none; -webkit-appearance: none;
            font-family: inherit;
        }
        #pigeon-iso-wrapper .pgn-btn:hover { transform: scale(1.05); background: #66eebb; }
    &lt;/style&gt;

    &lt;div id=&quot;pigeon-iso-overlay&quot;&gt;
        &lt;button class=&quot;pgn-btn&quot; 
            onclick=&quot;document.getElementById(&#39;pigeon-iso-overlay&#39;).style.display=&#39;none&#39;; document.getElementById(&#39;pgn-hud-el&#39;).style.opacity=&#39;1&#39;; window.initPigeonIso();&quot;&gt;
            Initialize Physical Model
        &lt;/button&gt;
    &lt;/div&gt;

    &lt;div class=&quot;pgn-hud&quot; id=&quot;pgn-hud-el&quot;&gt;
        &lt;h2 class=&quot;pgn-title&quot;&gt;Pigeon Synth&lt;/h2&gt;
        &lt;div class=&quot;pgn-readout&quot; id=&quot;pgn-hz&quot;&gt;-- Hz&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;div class=&quot;pgn-bird-layer&quot;&gt;
        &lt;svg class=&quot;pgn-svg&quot; viewBox=&quot;0 0 200 300&quot;&gt;
            &lt;g id=&quot;pgn-rotate&quot;&gt;
                &lt;path class=&quot;pgn-neck&quot; d=&quot;M -20,250 Q 40,230 60,190 L 80,270 Q 20,290 -20,280 Z&quot; /&gt;
                &lt;path class=&quot;pgn-head&quot; d=&quot;M 60,190 Q 70,140 110,120 Q 160,110 180,140 Q 190,170 160,200 Q 130,220 80,270 L 60,190 Z&quot; /&gt;
                &lt;path class=&quot;pgn-beak&quot; d=&quot;M 180,140 Q 200,145 210,160 Q 195,165 180,155 Z&quot; /&gt;
                &lt;circle class=&quot;pgn-eye&quot; cx=&quot;140&quot; cy=&quot;155&quot; r=&quot;12&quot; /&gt;
                &lt;circle class=&quot;pgn-pupil&quot; cx=&quot;144&quot; cy=&quot;155&quot; r=&quot;4&quot; /&gt;
            &lt;/g&gt;
        &lt;/svg&gt;
    &lt;/div&gt;

    &lt;canvas class=&quot;pgn-canvas&quot; id=&quot;pgn-canvas-el&quot; width=&quot;600&quot; height=&quot;400&quot;&gt;&lt;/canvas&gt;

    &lt;script&gt;
        // Define global function so the button can find it
        window.initPigeonIso = function() {
            
            // --- ELEMENT GETTERS ---
            const get = (id) =&gt; document.getElementById(id);
            const wrapper = get(&#39;pigeon-iso-wrapper&#39;);
            const svgGroup = get(&#39;pgn-rotate&#39;);
            const hzDisplay = get(&#39;pgn-hz&#39;);
            const canvas = get(&#39;pgn-canvas-el&#39;);

            // --- STATE ---
            let ctx = null; 
            let analyzer = null; 
            let reverbBuf = null;
            let isPlaying = false;
            let currentPitch = 350;
            let phase = 0;
            
            // Audio Nodes
            let osc, lfo, filter, masterGain, amGain;

            // --- AUDIO SETUP ---
            try {
                const AC = window.AudioContext || window.webkitAudioContext;
                ctx = new AC();
                
                // Reverb
                const len = ctx.sampleRate * 2.0;
                reverbBuf = ctx.createBuffer(2, len, ctx.sampleRate);
                for (let c=0; c&lt;2; c++) {
                    const d = reverbBuf.getChannelData(c);
                    for(let i=0; i&lt;len; i++) d[i] = (Math.random()*2-1) * Math.pow(1-i/len, 3);
                }
                
                analyzer = ctx.createAnalyser();
                analyzer.fftSize = 256;
                
                // Start Visuals
                requestAnimationFrame(drawLoop);

            } catch (e) {
                console.warn(&quot;Pigeon Audio Error:&quot;, e);
                // Fallback: visual puppet still works even if audio fails
                requestAnimationFrame(drawLoop);
            }

            // --- AUDIO CONTROL ---
            function play() {
                if(isPlaying || !ctx) return;
                if(ctx.state === &#39;suspended&#39;) ctx.resume();

                isPlaying = true;
                const t = ctx.currentTime;

                // Graph
                osc = ctx.createOscillator(); osc.type = &#39;triangle&#39;;
                lfo = ctx.createOscillator(); lfo.type = &#39;sine&#39;; lfo.frequency.value = 7;
                
                const cGain = ctx.createGain(); cGain.gain.value = 0.6;
                amGain = ctx.createGain(); amGain.gain.value = 0.3;
                filter = ctx.createBiquadFilter(); filter.type = &#39;lowpass&#39;; filter.Q.value = 6;
                
                masterGain = ctx.createGain(); masterGain.gain.setValueAtTime(0, t);
                masterGain.gain.linearRampToValueAtTime(1.0, t + 0.15);

                const conv = ctx.createConvolver(); conv.buffer = reverbBuf;
                const dry = ctx.createGain(); dry.gain.value = 0.8;
                const wet = ctx.createGain(); wet.gain.value = 0.35;

                // Connections
                lfo.connect(amGain); amGain.connect(cGain.gain);
                osc.connect(cGain); cGain.connect(filter); filter.connect(masterGain);
                
                masterGain.connect(analyzer);
                masterGain.connect(dry); dry.connect(ctx.destination);
                masterGain.connect(conv); conv.connect(wet); wet.connect(ctx.destination);

                osc.start(t); lfo.start(t);
                updateParams();
            }

            function stop() {
                if(!isPlaying || !masterGain) return;
                isPlaying = false;
                const t = ctx.currentTime;
                masterGain.gain.cancelScheduledValues(t);
                masterGain.gain.setTargetAtTime(0, t, 0.2);
                if(osc) osc.stop(t+1);
                if(lfo) lfo.stop(t+1);
            }

            function updateParams() {
                if(isPlaying &amp;&amp; osc) {
                    const t = ctx.currentTime;
                    osc.frequency.setTargetAtTime(currentPitch/1.5, t, 0.05);
                    filter.frequency.setTargetAtTime(currentPitch, t, 0.05);
                }
            }

            // --- VISUAL LOOP ---
            function drawLoop() {
                requestAnimationFrame(drawLoop);
                const c = canvas.getContext(&#39;2d&#39;);
                const w = canvas.width; const h = canvas.height;
                
                c.fillStyle = &#39;#222&#39;; c.fillRect(0,0,w,h);

                let vol = 0;
                if(analyzer) {
                    const data = new Uint8Array(analyzer.frequencyBinCount);
                    analyzer.getByteTimeDomainData(data);
                    let sum = 0;
                    for(let i=0; i&lt;data.length; i++) {
                        const x = (data[i]-128)/128; sum += x*x;
                    }
                    vol = Math.sqrt(sum/data.length);
                }

                const cx = w/2 + 80; const cy = h/2;

                // Pipe
                c.strokeStyle = &#39;#555&#39;; c.lineWidth = 6;
                c.beginPath(); c.moveTo(cx-20, cy); c.lineTo(cx+50, cy); c.stroke();

                // Box
                if(isPlaying &amp;&amp; vol &gt; 0.01) phase += 0.3;
                const shake = isPlaying ? Math.sin(phase)*3 : 0;
                c.fillStyle = &#39;#ff4d4d&#39;; 
                c.shadowBlur = (vol &gt; 0.01) ? 20 : 0; c.shadowColor = &#39;#ff4d4d&#39;;
                c.fillRect(cx-60-shake, cy-25, 50, 50);
                c.shadowBlur = 0;

                // Circle
                const r = (600-currentPitch)/5;
                const expand = vol * 150;
                c.beginPath(); c.arc(cx+50, cy, r+expand, 0, Math.PI*2);
                c.strokeStyle = &#39;#4ecca3&#39;; c.lineWidth = 4;
                c.fillStyle = `rgba(78, 204, 163, ${0.1+vol})`;
                c.fill(); c.stroke();
            }

            // --- INPUT ---
            function handleStart(e) {
                play();
                handleMove(e);
            }

            function handleMove(e) {
                const rect = wrapper.getBoundingClientRect();
                const clientY = e.touches ? e.touches[0].clientY : e.clientY;
                let val = (clientY - rect.top)/rect.height;
                val = Math.max(0, Math.min(1, val));

                const angle = -30 + (val*60);
                svgGroup.style.transform = `rotate(${angle}deg)`;

                currentPitch = 550 - (val*300);
                hzDisplay.innerText = Math.round(currentPitch) + &quot; Hz&quot;;
                if(isPlaying) updateParams();
            }

            function handleEnd() { stop(); }

            wrapper.addEventListener(&#39;mousedown&#39;, handleStart);
            window.addEventListener(&#39;mousemove&#39;, (e) =&gt; { if(isPlaying) handleMove(e); });
            window.addEventListener(&#39;mouseup&#39;, handleEnd);
            wrapper.addEventListener(&#39;mouseleave&#39;, handleEnd);

            wrapper.addEventListener(&#39;touchstart&#39;, (e) =&gt; { e.preventDefault(); handleStart(e); }, {passive:false});
            window.addEventListener(&#39;touchmove&#39;, (e) =&gt; { if(isPlaying) handleMove(e); }, {passive:false});
            window.addEventListener(&#39;touchend&#39;, handleEnd);
        };
    &lt;/script&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/1601422044203753877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/1601422044203753877?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1601422044203753877'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1601422044203753877'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/12/pigeon-physical-modeler-graphical-user.html' title='Pigeon physical modeler Graphical User Interface scratch space.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-1483348861417915764</id><published>2025-12-01T18:29:00.000-08:00</published><updated>2025-12-02T03:38:17.962-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="Cyber Monday"/><category scheme="http://www.blogger.com/atom/ns#" term="novelties"/><category scheme="http://www.blogger.com/atom/ns#" term="personas"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Audio API"/><category scheme="http://www.blogger.com/atom/ns#" term="weird stuff"/><title type='text'>Crackhead head rush Web Audio API web app.</title><content type='html'>&lt;div id=&quot;headrush-widget&quot; style=&quot;
    background: #000; 
    border: 1px solid #444; 
    padding: 20px; 
    border-radius: 8px; 
    color: #eee; 
    font-family: &#39;Courier New&#39;, monospace; 
    max-width: 450px; 
    margin: 20px auto; 
    text-align: center;&quot;&gt;

    &lt;h3 style=&quot;margin-top: 0; color: #00ff99; text-transform: uppercase; letter-spacing: 2px; font-size: 1.2em;&quot;&gt;Headrush V7&lt;/h3&gt;
    &lt;div style=&quot;color: #666; font-size: 0.75em; margin-top: -10px; margin-bottom: 15px;&quot;&gt;FIXED GRANULARITY + FLANGER&lt;/div&gt;
    
    &lt;div id=&quot;hr-status&quot; style=&quot;font-size: 11px; color: #555; margin-bottom: 10px; height: 15px;&quot;&gt;
        STATUS: READY
    &lt;/div&gt;

    &lt;div id=&quot;visual-pulse&quot; style=&quot;
        width: 50px; 
        height: 50px; 
        background: #111; 
        border-radius: 50%;
        margin: 10px auto 20px auto; 
        transition: transform 0.1s;
        border: 2px solid #00ff99;
        box-shadow: 0 0 10px rgba(0, 255, 153, 0.2);&quot;&gt;
    &lt;/div&gt;

    &lt;div style=&quot;margin-bottom: 25px;&quot;&gt;
        &lt;button id=&quot;hr-start&quot; style=&quot;
            background: #00ff99; 
            color: #000; 
            border: none; 
            padding: 10px 30px; 
            font-weight: bold; 
            font-family: inherit;
            cursor: pointer;
            border-radius: 4px;
            letter-spacing: 1px;&quot;&gt;
            INITIATE
        &lt;/button&gt;
        &lt;button id=&quot;hr-stop&quot; style=&quot;
            display: none; 
            background: #333; 
            color: white; 
            border: 1px solid #555; 
            padding: 10px 30px; 
            font-weight: bold; 
            font-family: inherit;
            cursor: pointer;
            border-radius: 4px;&quot;&gt;
            STOP
        &lt;/button&gt;
    &lt;/div&gt;

    &lt;div style=&quot;text-align: left; font-size: 0.8em; background: #111; padding: 15px; border-radius: 4px; border: 1px solid #222;&quot;&gt;
        
        &lt;div style=&quot;margin-bottom: 20px; border-bottom: 1px solid #333; padding-bottom: 10px;&quot;&gt;
            &lt;div style=&quot;color: #00ff99; margin-bottom:5px; font-weight:bold;&quot;&gt;TEXTURE &amp; GRIT&lt;/div&gt;
            
            &lt;div style=&quot;margin-bottom: 12px;&quot;&gt;
                &lt;label style=&quot;display:flex; justify-content:space-between; color: #fff;&quot;&gt;
                    &lt;span&gt;Wah Speed&lt;/span&gt;
                    &lt;span id=&quot;speed-val&quot;&gt;4.5Hz&lt;/span&gt;
                &lt;/label&gt;
                &lt;input type=&quot;range&quot; id=&quot;hr-speed&quot; min=&quot;1&quot; max=&quot;8&quot; step=&quot;0.1&quot; value=&quot;4.5&quot; style=&quot;width: 100%; accent-color: #00ff99;&quot;&gt;
            &lt;/div&gt;

            &lt;div&gt;
                &lt;label style=&quot;display:flex; justify-content:space-between; color: #fff;&quot;&gt;
                    &lt;span&gt;Granularity&lt;/span&gt;
                    &lt;span id=&quot;grain-val&quot; style=&quot;color: #00ff99;&quot;&gt;Medium&lt;/span&gt;
                &lt;/label&gt;
                &lt;input type=&quot;range&quot; id=&quot;hr-grain&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;50&quot; style=&quot;width: 100%; accent-color: #00ff99;&quot;&gt;
                &lt;div style=&quot;font-size: 0.8em; color: #555;&quot;&gt;Moves from smooth -&gt; buzzing -&gt; fractured&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div style=&quot;margin-bottom: 20px; border-bottom: 1px solid #333; padding-bottom: 10px;&quot;&gt;
            &lt;div style=&quot;color: #00ccff; margin-bottom:5px; font-weight:bold;&quot;&gt;FLANGER (METALLIC SWOOSH)&lt;/div&gt;
            
            &lt;div style=&quot;margin-bottom: 8px;&quot;&gt;
                &lt;label style=&quot;display:flex; justify-content:space-between; color: #ccc;&quot;&gt;
                    &lt;span&gt;Rate&lt;/span&gt;
                    &lt;span id=&quot;flange-rate-val&quot;&gt;0.5Hz&lt;/span&gt;
                &lt;/label&gt;
                &lt;input type=&quot;range&quot; id=&quot;hr-flange-rate&quot; min=&quot;0.1&quot; max=&quot;4&quot; step=&quot;0.1&quot; value=&quot;0.5&quot; style=&quot;width: 100%; accent-color: #00ccff;&quot;&gt;
            &lt;/div&gt;

            &lt;div&gt;
                &lt;label style=&quot;display:flex; justify-content:space-between; color: #ccc;&quot;&gt;
                    &lt;span&gt;Depth&lt;/span&gt;
                    &lt;span id=&quot;flange-depth-val&quot;&gt;High&lt;/span&gt;
                &lt;/label&gt;
                &lt;input type=&quot;range&quot; id=&quot;hr-flange-depth&quot; min=&quot;0&quot; max=&quot;0.006&quot; step=&quot;0.0001&quot; value=&quot;0.004&quot; style=&quot;width: 100%; accent-color: #00ccff;&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div&gt;
            &lt;div style=&quot;color: #ffcc00; margin-bottom:5px; font-weight:bold;&quot;&gt;HEAD RUSH&lt;/div&gt;
            
            &lt;label style=&quot;display:flex; justify-content:space-between; color: #ccc;&quot;&gt;
                &lt;span&gt;Gravity Toss&lt;/span&gt;
                &lt;span id=&quot;grav-val&quot;&gt;2.0Hz&lt;/span&gt;
            &lt;/label&gt;
            &lt;input type=&quot;range&quot; id=&quot;hr-gravity&quot; min=&quot;0.5&quot; max=&quot;5&quot; step=&quot;0.1&quot; value=&quot;2.0&quot; style=&quot;width: 100%; accent-color: #ffcc00;&quot;&gt;
        &lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    let audioCtx;
    let nodes = {};
    let animationId;
    let isPlaying = false;
    
    // UI Elements
    const startBtn = document.getElementById(&#39;hr-start&#39;);
    const stopBtn = document.getElementById(&#39;hr-stop&#39;);
    const statusText = document.getElementById(&#39;hr-status&#39;);
    const visual = document.getElementById(&#39;visual-pulse&#39;);
    
    const speedSlider = document.getElementById(&#39;hr-speed&#39;);
    const grainSlider = document.getElementById(&#39;hr-grain&#39;);
    const flangeRateSlider = document.getElementById(&#39;hr-flange-rate&#39;);
    const flangeDepthSlider = document.getElementById(&#39;hr-flange-depth&#39;);
    const gravSlider = document.getElementById(&#39;hr-gravity&#39;);

    const grainLabel = document.getElementById(&#39;grain-val&#39;);

    startBtn.addEventListener(&#39;click&#39;, safeStart);
    stopBtn.addEventListener(&#39;click&#39;, stopAudio);

    // --- Slider Logic ---
    speedSlider.addEventListener(&#39;input&#39;, (e) =&gt; {
        document.getElementById(&#39;speed-val&#39;).innerText = e.target.value + &quot;Hz&quot;;
        if(nodes.lfo) nodes.lfo.frequency.value = e.target.value;
    });

    grainSlider.addEventListener(&#39;input&#39;, (e) =&gt; {
        const val = parseInt(e.target.value);
        
        // Update Text
        if(val &lt; 25) grainLabel.innerText = &quot;Smooth&quot;;
        else if(val &lt; 50) grainLabel.innerText = &quot;Gritty&quot;;
        else if(val &lt; 75) grainLabel.innerText = &quot;Buzzy&quot;;
        else grainLabel.innerText = &quot;Fractured&quot;;

        // Update Audio
        if(nodes.grainGain) {
            // Volume of the modulator (Depth)
            nodes.grainGain.gain.value = val / 100; 
        }
        if(nodes.grainOsc) {
            // Speed of the modulator (Rate) - Scale from 30Hz to 100Hz
            nodes.grainOsc.frequency.value = 30 + (val * 0.7);
        }
    });
    
    flangeRateSlider.addEventListener(&#39;input&#39;, (e) =&gt; {
        document.getElementById(&#39;flange-rate-val&#39;).innerText = e.target.value + &quot;Hz&quot;;
        if(nodes.flangeLFO) nodes.flangeLFO.frequency.value = e.target.value;
    });

    flangeDepthSlider.addEventListener(&#39;input&#39;, (e) =&gt; {
        if(nodes.flangeLFOGain) nodes.flangeLFOGain.gain.value = e.target.value;
    });

    gravSlider.addEventListener(&#39;input&#39;, (e) =&gt; {
        document.getElementById(&#39;grav-val&#39;).innerText = e.target.value + &quot;Hz&quot;;
        if(nodes.ringLFO) nodes.ringLFO.frequency.value = e.target.value;
    });


    async function safeStart() {
        try {
            statusText.innerText = &quot;INITIALIZING...&quot;;
            const AudioContext = window.AudioContext || window.webkitAudioContext;
            audioCtx = new AudioContext();
            
            if (audioCtx.state === &#39;suspended&#39;) await audioCtx.resume();

            statusText.innerText = &quot;RUNNING&quot;;
            statusText.style.color = &quot;#00ff99&quot;;
            
            // --- 1. The Source (Pinkish Noise) ---
            const bufferSize = audioCtx.sampleRate * 2;
            const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);
            const data = buffer.getChannelData(0);
            
            let lastOut = 0; 
            for (let i = 0; i &lt; bufferSize; i++) {
                let white = Math.random() * 2 - 1;
                data[i] = (lastOut + (0.02 * white)) / 1.02;
                lastOut = data[i];
                data[i] *= 4.0; // Boosted gain for texture
            }

            nodes.noise = audioCtx.createBufferSource();
            nodes.noise.buffer = buffer;
            nodes.noise.loop = true;

            // ** AGGRESSIVE GRANULAR ENGINE (AM CHOPPER) **
            // We use a Gain Node to gate the volume rapidly
            nodes.chopperGate = audioCtx.createGain();
            nodes.chopperGate.gain.value = 0.8; // Base volume

            // Square wave turns volume ON/OFF (Hard chopping)
            nodes.grainOsc = audioCtx.createOscillator();
            nodes.grainOsc.type = &#39;square&#39;;
            const grainVal = parseInt(grainSlider.value);
            nodes.grainOsc.frequency.value = 30 + (grainVal * 0.7); // Dynamic speed
            
            nodes.grainGain = audioCtx.createGain();
            nodes.grainGain.gain.value = grainVal / 100; // Dynamic depth
            
            nodes.grainOsc.connect(nodes.grainGain);
            nodes.grainGain.connect(nodes.chopperGate.gain);


            // ** WAH FILTER **
            nodes.filter = audioCtx.createBiquadFilter();
            nodes.filter.type = &#39;lowpass&#39;; 
            nodes.filter.Q.value = 8; 
            nodes.filter.frequency.value = 800; 

            // Wah LFO
            nodes.lfo = audioCtx.createOscillator();
            nodes.lfo.type = &#39;sine&#39;;
            nodes.lfo.frequency.value = speedSlider.value;
            nodes.lfoGain = audioCtx.createGain();
            nodes.lfoGain.gain.value = 750; 
            nodes.lfo.connect(nodes.lfoGain);
            nodes.lfoGain.connect(nodes.filter.frequency);


            // --- 2. THE FLANGER (High Feedback) ---
            nodes.flangeDelay = audioCtx.createDelay();
            nodes.flangeDelay.delayTime.value = 0.005;

            nodes.flangeLFO = audioCtx.createOscillator();
            nodes.flangeLFO.type = &#39;sine&#39;;
            nodes.flangeLFO.frequency.value = flangeRateSlider.value;

            nodes.flangeLFOGain = audioCtx.createGain();
            nodes.flangeLFOGain.gain.value = flangeDepthSlider.value;

            nodes.flangeLFO.connect(nodes.flangeLFOGain);
            nodes.flangeLFOGain.connect(nodes.flangeDelay.delayTime);

            nodes.flangeFeedback = audioCtx.createGain();
            nodes.flangeFeedback.gain.value = 0.6; // Higher feedback for more metal sound
            nodes.flangeDelay.connect(nodes.flangeFeedback);
            nodes.flangeFeedback.connect(nodes.flangeDelay); 


            // --- 3. Gravity Toss ---
            nodes.ring = audioCtx.createOscillator();
            nodes.ring.type = &#39;sine&#39;; 
            nodes.ring.frequency.value = 11250; 
            nodes.ringLFO = audioCtx.createOscillator();
            nodes.ringLFO.type = &#39;sine&#39;;
            nodes.ringLFO.frequency.value = gravSlider.value;
            nodes.ringLFOGain = audioCtx.createGain();
            nodes.ringLFOGain.gain.value = 1250; 
            nodes.ringLFO.connect(nodes.ringLFOGain);
            nodes.ringLFOGain.connect(nodes.ring.frequency);
            nodes.ringGain = audioCtx.createGain();
            nodes.ringGain.gain.value = 0.04; 


            // --- 4. Slow Sweep ---
            nodes.sweepOsc = audioCtx.createOscillator();
            nodes.sweepOsc.type = &#39;triangle&#39;; 
            nodes.sweepOsc.frequency.value = 600; 
            nodes.sweepLFO = audioCtx.createOscillator();
            nodes.sweepLFO.type = &#39;triangle&#39;; 
            nodes.sweepLFO.frequency.value = 0.1; 
            nodes.sweepLFOGain = audioCtx.createGain();
            nodes.sweepLFOGain.gain.value = 400; 
            nodes.sweepLFO.connect(nodes.sweepLFOGain);
            nodes.sweepLFOGain.connect(nodes.sweepOsc.frequency);
            nodes.sweepGain = audioCtx.createGain();
            nodes.sweepGain.gain.value = 0.06;


            // --- 5. Reverb ---
            nodes.convolver = audioCtx.createConvolver();
            nodes.convolver.buffer = createTightRoom(audioCtx);

            nodes.master = audioCtx.createGain();
            nodes.master.gain.value = 0.7;


            // --- ROUTING ---
            
            // Path A: Noise -&gt; Chopper -&gt; Wah -&gt; Flanger -&gt; Reverb
            nodes.noise.connect(nodes.chopperGate); // Noise enters chopper
            nodes.chopperGate.connect(nodes.filter); // Chopped noise enters Wah
            
            nodes.filter.connect(nodes.convolver); // Dry
            nodes.filter.connect(nodes.flangeDelay); // Wet
            nodes.flangeDelay.connect(nodes.convolver); 

            // Path B: Gravity Ringing -&gt; Reverb
            nodes.ring.connect(nodes.ringGain);
            nodes.ringGain.connect(nodes.convolver);

            // Path C: Slow Sweep -&gt; Reverb
            nodes.sweepOsc.connect(nodes.sweepGain);
            nodes.sweepGain.connect(nodes.convolver);

            nodes.convolver.connect(nodes.master);
            nodes.master.connect(audioCtx.destination);

            // Start
            nodes.noise.start();
            nodes.grainOsc.start();
            nodes.lfo.start();
            nodes.flangeLFO.start();
            nodes.ring.start();
            nodes.ringLFO.start();
            nodes.sweepOsc.start();
            nodes.sweepLFO.start();

            // UI State
            isPlaying = true;
            startBtn.style.display = &#39;none&#39;;
            stopBtn.style.display = &#39;inline-block&#39;;
            visual.style.borderColor = &#39;#00ff99&#39;;

            animateVisual();

        } catch (e) {
            console.error(e);
            statusText.innerText = &quot;ERROR: &quot; + e.message;
        }
    }

    function stopAudio() {
        if(audioCtx) audioCtx.close();
        isPlaying = false;
        cancelAnimationFrame(animationId);
        startBtn.style.display = &#39;inline-block&#39;;
        stopBtn.style.display = &#39;none&#39;;
        visual.style.transform = &#39;scale(1)&#39;;
        statusText.innerText = &quot;STATUS: STOPPED&quot;;
        statusText.style.color = &quot;#555&quot;;
    }

    function createTightRoom(ctx) {
        const len = ctx.sampleRate * 0.4;
        const impulse = ctx.createBuffer(2, len, ctx.sampleRate);
        const L = impulse.getChannelData(0);
        const R = impulse.getChannelData(1);
        for (let i = 0; i &lt; len; i++) {
            let decay = Math.pow(1 - i / len, 2);
            L[i] = (Math.random() * 2 - 1) * decay;
            R[i] = (Math.random() * 2 - 1) * decay;
        }
        return impulse;
    }

    function animateVisual() {
        if(!isPlaying) return;
        const time = audioCtx.currentTime;
        
        const speed = speedSlider.value;
        const flangeRate = flangeRateSlider.value;

        // Pulse
        const pulse = Math.sin(time * speed * 2 * Math.PI) * 0.15;
        
        // Color cycle
        const colorCycle = Math.sin(time * flangeRate * 2 * Math.PI); 
        
        const r = 0;
        const g = Math.floor(150 + (colorCycle * 105));
        const b = Math.floor(150 - (colorCycle * 105));
        
        visual.style.transform = `scale(${1 + pulse})`;
        visual.style.borderColor = `rgb(${r}, ${g}, ${b})`;
        visual.style.boxShadow = `0 0 15px rgb(${r}, ${g}, ${b}, 0.3)`;
        
        animationId = requestAnimationFrame(animateVisual);
    }
})();
&lt;/script&gt;

</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/1483348861417915764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/1483348861417915764?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1483348861417915764'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/1483348861417915764'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/12/crackhead-head-rush-web-audio-api-web.html' title='Crackhead head rush Web Audio API web app.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-478670640396660428</id><published>2025-12-01T01:02:15.946-08:00</published><updated>2025-12-02T03:59:35.453-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2025"/><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="audio toolbox"/><category scheme="http://www.blogger.com/atom/ns#" term="code playgrounds"/><category scheme="http://www.blogger.com/atom/ns#" term="Cyber Monday"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Audio sweep web app</title><content type='html'>&lt;div id=&quot;audio-app-v4&quot;&gt;
    &lt;style&gt;
        /* 1. SCOPE AND RESET EVERYTHING INSIDE THE APP */
        #audio-app-v4 {
            /* Reset inheritance from your website */
            all: unset; 
            display: block;
            
            /* Define our local variables */
            --aa-bg: #121212;
            --aa-panel: #1e1e1e;
            --aa-accent: #00e5ff;
            --aa-text: #ffffff;
            --aa-input: #333333;
            
            /* Force our font and colors */
            font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif;
            background-color: var(--aa-bg) !important;
            color: var(--aa-text) !important;
            width: 100%;
            max-width: 550px;
            margin: 30px auto;
            border-radius: 12px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.5);
            box-sizing: border-box;
            line-height: 1.5;
            text-align: center;
            overflow: hidden; /* Contains the children */
        }

        /* 2. FORCE BOX SIZING ON CHILDREN */
        #audio-app-v4 * {
            box-sizing: border-box;
            font-family: inherit;
        }

        /* 3. INTERNAL STYLING (Scoped) */
        #audio-app-v4 .aa-inner {
            padding: 25px;
            background-color: var(--aa-panel) !important;
        }

        #audio-app-v4 h2 {
            margin: 0 0 20px 0 !important;
            padding: 0 !important;
            color: var(--aa-accent) !important;
            font-size: 24px !important;
            font-weight: 300 !important;
            text-transform: uppercase;
            letter-spacing: 2px;
            border: none !important;
        }

        /* Grid Layout */
        #audio-app-v4 .aa-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 15px;
            margin-bottom: 20px;
            text-align: left;
        }

        #audio-app-v4 label {
            display: block;
            font-size: 12px !important;
            color: #aaaaaa !important;
            text-transform: uppercase;
            margin-bottom: 5px !important;
            font-weight: normal !important;
        }

        /* Inputs - Force colors to override site defaults */
        #audio-app-v4 input[type=&quot;number&quot;] {
            width: 100%;
            background-color: var(--aa-input) !important;
            color: #ffffff !important;
            border: 1px solid #444 !important;
            padding: 8px 10px !important;
            border-radius: 4px;
            font-size: 14px !important;
            margin: 0 !important;
            height: auto !important;
            box-shadow: none !important;
        }
        
        #audio-app-v4 input[type=&quot;range&quot;] {
            width: 100%;
            margin-top: 8px !important;
            background: transparent !important;
            padding: 0 !important;
            -webkit-appearance: none;
        }

        /* Slider Thumb Styling */
        #audio-app-v4 input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none;
            height: 16px;
            width: 16px;
            border-radius: 50%;
            background: var(--aa-accent);
            cursor: pointer;
            margin-top: -6px;
        }
        #audio-app-v4 input[type=range]::-webkit-slider-runnable-track {
            width: 100%;
            height: 4px;
            background: #555;
        }

        /* Buttons */
        #audio-app-v4 button {
            width: 100%;
            padding: 12px !important;
            background-color: transparent !important;
            border: 1px solid var(--aa-accent) !important;
            color: var(--aa-accent) !important;
            font-size: 14px !important;
            font-weight: bold !important;
            text-transform: uppercase;
            border-radius: 4px;
            cursor: pointer;
            margin: 0 0 10px 0 !important;
            transition: 0.2s;
        }
        
        #audio-app-v4 button:hover {
            background-color: rgba(0, 229, 255, 0.1) !important;
        }

        /* Active Mode State */
        #audio-app-v4 button.aa-active {
            background-color: var(--aa-accent) !important;
            color: #000000 !important;
        }

        /* Play Button specific styles */
        #audio-app-v4 #aa-play-btn {
            background-color: #2e7d32 !important; /* Green */
            border-color: #2e7d32 !important;
            color: white !important;
            font-size: 16px !important;
            padding: 15px !important;
            margin-top: 10px !important;
        }
        #audio-app-v4 #aa-play-btn.aa-stop {
            background-color: #d32f2f !important; /* Red */
            border-color: #d32f2f !important;
        }

        /* Canvas */
        #audio-app-v4 canvas {
            display: block;
            width: 100%;
            height: 100px;
            background-color: #000000 !important;
            border: 1px solid #333;
            border-radius: 4px;
            margin-bottom: 20px;
        }
    &lt;/style&gt;

    &lt;div class=&quot;aa-inner&quot;&gt;
        &lt;h2&gt;Cycle Sweep&lt;/h2&gt;
        
        &lt;canvas id=&quot;aa-scope&quot;&gt;&lt;/canvas&gt;

        &lt;div class=&quot;aa-grid&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Start Freq (Hz)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;aa-start-in&quot; value=&quot;20&quot; step=&quot;1&quot;&gt;
                &lt;input type=&quot;range&quot; id=&quot;aa-start-sl&quot; min=&quot;20&quot; max=&quot;20000&quot; step=&quot;1&quot; value=&quot;20&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;End Freq (Hz)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;aa-end-in&quot; value=&quot;2000&quot; step=&quot;1&quot;&gt;
                &lt;input type=&quot;range&quot; id=&quot;aa-end-sl&quot; min=&quot;20&quot; max=&quot;20000&quot; step=&quot;1&quot; value=&quot;2000&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;aa-grid&quot;&gt;
            &lt;div&gt;
                &lt;label&gt;Time (Seconds)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;aa-time-in&quot; value=&quot;2.0&quot; step=&quot;any&quot;&gt;
                &lt;input type=&quot;range&quot; id=&quot;aa-time-sl&quot; min=&quot;0.1&quot; max=&quot;10&quot; step=&quot;0.1&quot; value=&quot;2.0&quot;&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;label&gt;Rate (Hz)&lt;/label&gt;
                &lt;input type=&quot;number&quot; id=&quot;aa-rate-in&quot; value=&quot;0.5&quot; step=&quot;any&quot;&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;button id=&quot;aa-mode-btn&quot;&gt;Mode: Linear&lt;/button&gt;
        &lt;button id=&quot;aa-play-btn&quot;&gt;Start Cycle&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    // Isolate variables in an IIFE so they don&#39;t break your site
    const config = {
        start: 20, end: 2000,
        dur: 2.0,
        isLog: false,
        isPlaying: false
    };

    let audioCtx, osc, gain, analyser, timer;

    // Element Selectors (Scoped to IDs)
    const el = (id) =&gt; document.getElementById(id);
    const cvs = el(&#39;aa-scope&#39;);
    const ctx = cvs.getContext(&#39;2d&#39;);

    // Canvas sizing
    const dpr = window.devicePixelRatio || 1;
    cvs.width = cvs.offsetWidth * dpr;
    cvs.height = cvs.offsetHeight * dpr;
    ctx.scale(dpr, dpr);

    // --- SYNC LOGIC ---
    function sync(inId, slId, key) {
        const inp = el(inId);
        const sld = el(slId);
        
        inp.addEventListener(&#39;input&#39;, (e) =&gt; {
            let v = parseFloat(e.target.value);
            if(!isNaN(v)) { config[key] = v; sld.value = v; }
        });
        sld.addEventListener(&#39;input&#39;, (e) =&gt; {
            let v = parseFloat(e.target.value);
            config[key] = v; inp.value = v;
        });
    }

    sync(&#39;aa-start-in&#39;, &#39;aa-start-sl&#39;, &#39;start&#39;);
    sync(&#39;aa-end-in&#39;, &#39;aa-end-sl&#39;, &#39;end&#39;);

    // --- TIME LOGIC ---
    function updateTime(t) {
        if(t &lt;= 0.0001) t = 0.0001;
        config.dur = t;
        el(&#39;aa-time-sl&#39;).value = t;
        
        // Update Rate input if not currently focused
        if(document.activeElement !== el(&#39;aa-rate-in&#39;)) {
            el(&#39;aa-rate-in&#39;).value = parseFloat((1/t).toFixed(5));
        }
    }

    el(&#39;aa-time-in&#39;).addEventListener(&#39;input&#39;, (e) =&gt; updateTime(parseFloat(e.target.value)));
    
    el(&#39;aa-time-sl&#39;).addEventListener(&#39;input&#39;, (e) =&gt; {
        let v = parseFloat(e.target.value);
        el(&#39;aa-time-in&#39;).value = v;
        updateTime(v);
    });

    el(&#39;aa-rate-in&#39;).addEventListener(&#39;input&#39;, (e) =&gt; {
        let hz = parseFloat(e.target.value);
        if(hz &gt; 0) {
            let sec = 1/hz;
            config.dur = sec;
            el(&#39;aa-time-in&#39;).value = parseFloat(sec.toFixed(5));
            el(&#39;aa-time-sl&#39;).value = sec;
        }
    });

    // --- MODE TOGGLE ---
    el(&#39;aa-mode-btn&#39;).addEventListener(&#39;click&#39;, function() {
        config.isLog = !config.isLog;
        this.textContent = config.isLog ? &quot;Mode: Logarithmic&quot; : &quot;Mode: Linear&quot;;
        this.classList.toggle(&#39;aa-active&#39;);
    });

    // --- AUDIO ENGINE ---
    function initAudio() {
        const AC = window.AudioContext || window.webkitAudioContext;
        audioCtx = new AC();
        analyser = audioCtx.createAnalyser();
        analyser.fftSize = 2048;
        gain = audioCtx.createGain();
        gain.gain.value = 0.1;
        gain.connect(analyser);
        analyser.connect(audioCtx.destination);
        draw();
    }

    function runCycle() {
        if(!config.isPlaying) return;
        
        const now = audioCtx.currentTime;
        let s = config.start;
        let e = config.end;
        const dur = config.dur;

        // Log safety
        if(config.isLog) {
            if(s &lt; 1) s = 1;
            if(e &lt; 1) e = 1;
        }

        osc.frequency.cancelScheduledValues(now);
        osc.frequency.setValueAtTime(s, now);

        if(config.isLog) {
            osc.frequency.exponentialRampToValueAtTime(e, now + (dur/2));
            osc.frequency.exponentialRampToValueAtTime(s, now + dur);
        } else {
            osc.frequency.linearRampToValueAtTime(e, now + (dur/2));
            osc.frequency.linearRampToValueAtTime(s, now + dur);
        }

        timer = setTimeout(runCycle, dur * 1000);
    }

    el(&#39;aa-play-btn&#39;).addEventListener(&#39;click&#39;, function() {
        if(!audioCtx) initAudio();

        if(config.isPlaying) {
            // Stop
            config.isPlaying = false;
            this.textContent = &quot;Start Cycle&quot;;
            this.classList.remove(&#39;aa-stop&#39;);
            clearTimeout(timer);
            if(osc) { osc.stop(); osc.disconnect(); }
        } else {
            // Start
            if(audioCtx.state === &#39;suspended&#39;) audioCtx.resume();
            config.isPlaying = true;
            this.textContent = &quot;Stop Cycle&quot;;
            this.classList.add(&#39;aa-stop&#39;);
            
            osc = audioCtx.createOscillator();
            osc.connect(gain);
            osc.start();
            runCycle();
        }
    });

    // --- VISUALIZER ---
    function draw() {
        if(!analyser) return;
        if(config.isPlaying) requestAnimationFrame(draw);

        const len = analyser.frequencyBinCount;
        const data = new Uint8Array(len);
        analyser.getByteTimeDomainData(data);

        // Clear
        ctx.fillStyle = &#39;#000000&#39;;
        ctx.fillRect(0, 0, cvs.width / dpr, cvs.height / dpr);

        ctx.lineWidth = 2;
        ctx.strokeStyle = &#39;#00e5ff&#39;;
        ctx.beginPath();

        const w = cvs.width / dpr;
        const h = cvs.height / dpr;
        const slice = w * 1.0 / len;
        let x = 0;

        for(let i = 0; i &lt; len; i++) {
            const v = data[i] / 128.0;
            const y = v * h / 2;
            if(i === 0) ctx.moveTo(x, y);
            else ctx.lineTo(x, y);
            x += slice;
        }
        ctx.stroke();
    }
})();
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/478670640396660428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/478670640396660428?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/478670640396660428'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/478670640396660428'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/12/audio-sweep-web-app.html' title='Audio sweep web app'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry><entry><id>tag:blogger.com,1999:blog-8391488493129870717.post-2520572226447472436</id><published>2025-11-30T23:44:00.000-08:00</published><updated>2025-12-02T04:00:48.441-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2025"/><category scheme="http://www.blogger.com/atom/ns#" term="audio apps"/><category scheme="http://www.blogger.com/atom/ns#" term="code playgrounds"/><category scheme="http://www.blogger.com/atom/ns#" term="Cyber Monday"/><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Granular audio web app playground.</title><content type='html'>&lt;div id=&quot;dino-sandbox-wrapper&quot;&gt;
    
    &lt;script src=&quot;https://unpkg.com/wavesurfer.js@6.6.4/dist/wavesurfer.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;https://unpkg.com/wavesurfer.js@6.6.4/dist/plugin/wavesurfer.regions.min.js&quot;&gt;&lt;/script&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Press+Start+2P&amp;amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

    &lt;style&gt;
        /* WRAPPER: Creates a safe box that stops CSS bleeding */
        #dino-sandbox-wrapper {
            all: initial; /* Resets all inherited blog styles */
            display: block;
            font-family: &#39;Press Start 2P&#39;, cursive, sans-serif; /* Only applies inside here */
            --dino-bg: #1a0d2b;
            --dino-panel: #2b1d3d;
            --dino-pink: #ff2ae3;
            --dino-green: #39ff14;
            --dino-blue: #00dbff;
            --dino-yellow: #fff01f;
            --dino-border: #000;
            
            width: 100%;
            max-width: 800px;
            margin: 30px auto;
            background-color: var(--dino-bg);
            /* Retro checkered background */
            background-image: 
                linear-gradient(45deg, #221533 25%, transparent 25%, transparent 75%, #221533 75%, #221533),
                linear-gradient(45deg, #221533 25%, transparent 25%, transparent 75%, #221533 75%, #221533);
            background-size: 20px 20px;
            background-position: 0 0, 10px 10px;
            border: 4px solid #000;
            padding: 20px;
            box-sizing: border-box;
            position: relative;
            color: #eee;
        }

        /* RESET: Ensure all elements inside use border-box */
        #dino-sandbox-wrapper * { 
            box-sizing: border-box; 
            font-family: &#39;Press Start 2P&#39;, cursive, sans-serif;
        }

        /* HEADER */
        #dino-sandbox-wrapper h2.dino-title {
            color: var(--dino-yellow);
            text-shadow: 3px 3px 0px var(--dino-pink);
            font-size: 18px;
            margin: 0 0 20px 0;
            text-align: center;
            line-height: 1.5;
            text-transform: uppercase;
        }

        /* MASCOT (Positioned safely inside) */
        .dino-mascot-container {
            display: block;
            margin: 0 auto 10px auto;
            width: 80px;
            height: 80px;
            animation: dino-bounce 3s infinite ease-in-out;
        }
        @keyframes dino-bounce { 
            0%, 100% { transform: translateY(0); } 
            50% { transform: translateY(-5px); } 
        }

        /* UI PANEL */
        .dino-panel {
            background: var(--dino-panel);
            border: 4px solid var(--dino-border);
            box-shadow: 8px 8px 0px rgba(0,0,0,0.5);
            padding: 20px;
            position: relative;
        }

        /* START OVERLAY */
        .dino-overlay {
            position: absolute; top: 0; left: 0; width: 100%; height: 100%;
            background: rgba(26, 13, 43, 0.98);
            z-index: 50;
            display: flex; flex-direction: column; 
            justify-content: center; align-items: center;
            text-align: center;
        }
        .dino-overlay h3 { color: var(--dino-green); margin-bottom: 20px; font-size: 14px; }
        
        button.dino-btn-start {
            background: var(--dino-pink); color: #fff;
            border: 4px solid #000; padding: 15px 25px;
            cursor: pointer; font-size: 12px;
            box-shadow: 4px 4px 0 #000;
        }
        button.dino-btn-start:hover { transform: scale(1.05); }

        /* WAVEFORM */
        .dino-wave-box {
            border: 4px solid #000;
            box-shadow: inset 0 0 0 2px var(--dino-green);
            background: #000;
            padding: 4px; margin-bottom: 15px;
            height: 140px;
        }
        #dino-wave-target { width: 100%; height: 100%; }

        /* CONTROLS GRID */
        .dino-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
        @media(max-width: 600px) { .dino-grid { grid-template-columns: 1fr; } }

        /* STANDARD BUTTONS */
        button.dino-btn {
            width: 100%; padding: 15px; margin-bottom: 15px;
            background: var(--dino-blue); color: #000;
            border: 3px solid #000; cursor: pointer;
            box-shadow: 4px 4px 0 rgba(0,0,0,0.5);
            font-size: 10px; line-height: 1.5;
        }
        button.dino-btn:active { box-shadow: 0 0 0; transform: translate(4px, 4px); }
        button.dino-btn.rec { background: var(--dino-pink); color: #fff; }
        button.dino-btn.rec.active { background: #ff0000; animation: dino-pulse 0.5s infinite; }
        @keyframes dino-pulse { 0%{opacity:1} 50%{opacity:0.5} 100%{opacity:1} }
        button.dino-btn.play.active { background: var(--dino-green); }

        /* SLIDERS */
        .dino-slider-group {
            background: #221533; border: 3px solid #000;
            padding: 10px; margin-bottom: 10px;
        }
        .dino-row { display: flex; align-items: center; margin-bottom: 10px; font-size: 10px; }
        .dino-row label { flex: 1; color: var(--dino-blue); }
        .dino-row span { color: var(--dino-green); }
        
        /* Custom Range Input */
        input[type=range].dino-range {
            -webkit-appearance: none; width: 100%; background: transparent;
            margin: 0;
        }
        input[type=range].dino-range::-webkit-slider-runnable-track {
            width: 100%; height: 10px; background: #000; border: 1px solid var(--dino-blue);
        }
        input[type=range].dino-range::-webkit-slider-thumb {
            -webkit-appearance: none; height: 18px; width: 18px;
            background: var(--dino-pink); border: 2px solid #000;
            margin-top: -5px; cursor: pointer;
        }

        /* XY PAD */
        .dino-xy-outer { border: 3px solid #000; background: #000; height: 180px; position: relative; }
        .dino-xy-inner {
            width: 100%; height: 100%;
            background-image: 
                linear-gradient(var(--dino-blue) 1px, transparent 1px),
                linear-gradient(90deg, var(--dino-blue) 1px, transparent 1px);
            background-size: 20px 20px;
            cursor: crosshair; touch-action: none; position: relative;
        }
        .dino-dot {
            width: 14px; height: 14px; background: var(--dino-green);
            border: 2px solid #000; position: absolute; 
            top: 50%; left: 50%; transform: translate(-50%, -50%);
            pointer-events: none;
        }
    &lt;/style&gt;

    &lt;div class=&quot;dino-mascot-container&quot;&gt;
        &lt;svg shape-rendering=&quot;crispEdges&quot; viewbox=&quot;0 0 100 100&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
             &lt;path d=&quot;M40 20 H70 V30 H80 V40 H90 V60 H70 V50 H60 V60 H50 V70 H60 V80 H30 V70 H20 V50 H30 V40 H40 V20 Z&quot; fill=&quot;#39ff14&quot; stroke-width=&quot;2&quot; stroke=&quot;#000&quot;&gt;
             &lt;rect fill=&quot;#000&quot; height=&quot;5&quot; width=&quot;5&quot; x=&quot;75&quot; y=&quot;25&quot;&gt;
             &lt;rect fill=&quot;#fff&quot; height=&quot;5&quot; width=&quot;5&quot; x=&quot;75&quot; y=&quot;45&quot;&gt;
             &lt;rect fill=&quot;#fff&quot; height=&quot;5&quot; width=&quot;5&quot; x=&quot;82&quot; y=&quot;45&quot;&gt;
        &lt;/rect&gt;&lt;/rect&gt;&lt;/rect&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;/div&gt;

    &lt;h2 class=&quot;dino-title&quot;&gt;DINO-TRACKER 9000&lt;/h2&gt;

    &lt;div class=&quot;dino-panel&quot;&gt;
        
        &lt;div class=&quot;dino-overlay&quot; id=&quot;dino-overlay&quot;&gt;
            &lt;h3&gt;SYSTEM STANDBY&lt;/h3&gt;
            &lt;button class=&quot;dino-btn-start&quot; id=&quot;dino-btn-init&quot;&gt;INSERT COIN TO START&lt;/button&gt;
            &lt;div id=&quot;dino-err&quot; style=&quot;color: #ff5555; display: none; font-size: 9px; margin-top: 10px;&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;dino-wave-box&quot;&gt;
            &lt;div id=&quot;dino-wave-target&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div style=&quot;color: var(--dino-blue); font-size: 9px; margin-bottom: 15px; text-align: center;&quot;&gt;
            DRAG GREEN BOX TO LOOP
        &lt;/div&gt;

        &lt;div class=&quot;dino-grid&quot;&gt;
            &lt;div&gt;
                &lt;button class=&quot;dino-btn rec&quot; id=&quot;dino-btn-rec&quot;&gt;RECORD ROAR&lt;/button&gt;
                &lt;button class=&quot;dino-btn play&quot; id=&quot;dino-btn-play&quot;&gt;PLAY LOOP&lt;/button&gt;
                
                &lt;div class=&quot;dino-slider-group&quot;&gt;
                    &lt;div class=&quot;dino-row&quot;&gt;&lt;label&gt;CRUSH&lt;/label&gt;&lt;span id=&quot;val-bits&quot;&gt;16&lt;/span&gt;&lt;/div&gt;
                    &lt;input class=&quot;dino-range&quot; id=&quot;in-bits&quot; max=&quot;16&quot; type=&quot;range&quot; value=&quot;16&quot; /&gt;
                    
                    &lt;div class=&quot;dino-row&quot; style=&quot;margin-top: 10px;&quot;&gt;&lt;label&gt;SPEED&lt;/label&gt;&lt;span id=&quot;val-speed&quot;&gt;1.0&lt;/span&gt;&lt;/div&gt;
                    &lt;input class=&quot;dino-range&quot; id=&quot;in-speed&quot; max=&quot;2.0&quot; type=&quot;range&quot; value=&quot;1.0&quot; /&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div&gt;
                &lt;div class=&quot;dino-xy-outer&quot;&gt;
                    &lt;div class=&quot;dino-xy-inner&quot; id=&quot;dino-pad&quot;&gt;
                        &lt;div class=&quot;dino-dot&quot; id=&quot;dino-dot&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div style=&quot;color: var(--dino-pink); font-size: 9px; margin-top: 5px; text-align: center;&quot;&gt;
                    ECHO / DELAY PAD
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
    (function() {
        // Scoped Variables
        let ctx, ws, micStream, mediaRecorder, isRecording = false;
        let inputGain, crusher, delay, feedback, wet, master;
        let p_bits = 16;

        // Elements
        const elOverlay = document.getElementById(&#39;dino-overlay&#39;);
        const elErr = document.getElementById(&#39;dino-err&#39;);
        const btnInit = document.getElementById(&#39;dino-btn-init&#39;);
        const btnRec = document.getElementById(&#39;dino-btn-rec&#39;);
        const btnPlay = document.getElementById(&#39;dino-btn-play&#39;);

        // 1. START
        btnInit.addEventListener(&#39;click&#39;, async () =&gt; {
            try {
                const AudioContext = window.AudioContext || window.webkitAudioContext;
                ctx = new AudioContext();
                if (ctx.state === &#39;suspended&#39;) await ctx.resume();

                setupAudioGraph();
                initWaveSurfer();
                
                elOverlay.style.display = &#39;none&#39;;
            } catch (e) {
                elErr.style.display = &#39;block&#39;;
                elErr.innerText = &quot;Error: &quot; + e.message;
            }
        });

        // 2. AUDIO GRAPH
        function setupAudioGraph() {
            inputGain = ctx.createGain();
            master = ctx.createGain();
            delay = ctx.createDelay(5.0);
            feedback = ctx.createGain();
            wet = ctx.createGain();

            master.gain.value = 1.0;
            delay.delayTime.value = 0.3;
            feedback.gain.value = 0.4;
            wet.gain.value = 0.5;

            // Bitcrush Logic
            crusher = ctx.createScriptProcessor(4096, 1, 1);
            crusher.onaudioprocess = (e) =&gt; {
                const input = e.inputBuffer.getChannelData(0);
                const output = e.outputBuffer.getChannelData(0);
                if (p_bits === 16) { output.set(input); return; }
                const scale = Math.pow(0.5, p_bits);
                for (let i = 0; i &lt; input.length; i++) {
                    output[i] = scale * Math.floor(input[i] / scale + 0.5);
                }
            };

            // Routing
            inputGain.connect(crusher);
            crusher.connect(master);
            crusher.connect(delay);
            delay.connect(feedback);
            feedback.connect(delay);
            delay.connect(wet);
            wet.connect(master);
            master.connect(ctx.destination);
        }

        // 3. WAVESURFER
        function initWaveSurfer() {
            if (ws) ws.destroy();
            ws = WaveSurfer.create({
                container: &#39;#dino-wave-target&#39;,
                waveColor: &#39;#ff2ae3&#39;, progressColor: &#39;#39ff14&#39;,
                backgroundColor: &#39;#000000&#39;, cursorColor: &#39;#fff01f&#39;,
                height: 140,
                backend: &#39;WebAudio&#39;, audioContext: ctx,
                plugins: [
                    WaveSurfer.regions.create({
                        regionsMinLength: 0.1,
                        colors: { regionColor: &#39;rgba(57, 255, 20, 0.3)&#39;, regionHandleColor: &#39;#fff01f&#39; }
                    })
                ]
            });

            ws.on(&#39;ready&#39;, () =&gt; {
                ws.backend.disconnectFilters();
                const wsGain = ws.backend.gainNode;
                wsGain.disconnect();
                wsGain.connect(inputGain);
                
                ws.clearRegions();
                ws.addRegion({ start: 0, end: ws.getDuration(), loop: true, color: &#39;rgba(57, 255, 20, 0.3)&#39; });
            });

            ws.on(&#39;region-click&#39;, (region, e) =&gt; {
                e.stopPropagation(); region.playLoop();
                btnPlay.classList.add(&#39;active&#39;);
            });
            ws.on(&#39;region-out&#39;, (region) =&gt; { region.play(); });
        }

        // 4. RECORD
        btnRec.addEventListener(&#39;click&#39;, async () =&gt; {
            if (isRecording) {
                mediaRecorder.stop();
                micStream.getTracks().forEach(t =&gt; t.stop());
                isRecording = false;
                btnRec.classList.remove(&#39;active&#39;);
                btnRec.innerText = &quot;RECORD ROAR&quot;;
            } else {
                try {
                    if (ctx.state === &#39;suspended&#39;) await ctx.resume();
                    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
                    micStream = stream;
                    mediaRecorder = new MediaRecorder(stream);
                    const chunks = [];
                    mediaRecorder.ondataavailable = e =&gt; chunks.push(e.data);
                    mediaRecorder.onstop = () =&gt; {
                        ws.load(URL.createObjectURL(new Blob(chunks, { type: &#39;audio/webm&#39; })));
                    };
                    mediaRecorder.start();
                    isRecording = true;
                    btnRec.classList.add(&#39;active&#39;);
                    btnRec.innerText = &quot;STOP RECORDING&quot;;
                    ws.empty();
                } catch (e) {
                    alert(&quot;Microphone Error: &quot; + e.message);
                }
            }
        });

        // 5. PLAY
        btnPlay.addEventListener(&#39;click&#39;, () =&gt; {
            if (ws.isPlaying()) {
                ws.pause(); btnPlay.classList.remove(&#39;active&#39;);
            } else {
                const regs = Object.values(ws.regions.list);
                if (regs.length &gt; 0) regs[0].playLoop(); else ws.play();
                btnPlay.classList.add(&#39;active&#39;);
            }
        });

        // 6. INPUTS
        document.getElementById(&#39;in-bits&#39;).addEventListener(&#39;input&#39;, e =&gt; {
            p_bits = parseInt(e.target.value);
            document.getElementById(&#39;val-bits&#39;).innerText = p_bits;
        });
        document.getElementById(&#39;in-speed&#39;).addEventListener(&#39;input&#39;, e =&gt; {
            ws.setPlaybackRate(parseFloat(e.target.value));
            document.getElementById(&#39;val-speed&#39;).innerText = e.target.value;
        });

        // 7. XY PAD
        const xyPad = document.getElementById(&#39;dino-pad&#39;);
        const xyDot = document.getElementById(&#39;dino-dot&#39;);
        let dragging = false;
        
        function handleXY(x, y) {
            const r = xyPad.getBoundingClientRect();
            const lx = Math.max(0, Math.min(x - r.left, r.width));
            const ly = Math.max(0, Math.min(y - r.top, r.height));
            xyDot.style.left = lx + &#39;px&#39;; xyDot.style.top = ly + &#39;px&#39;;
            
            // Map to Audio
            delay.delayTime.setTargetAtTime(0.01 + (lx / r.width) * 0.79, ctx.currentTime, 0.1);
            feedback.gain.setTargetAtTime((1 - (ly / r.height)) * 0.95, ctx.currentTime, 0.1);
        }

        xyPad.addEventListener(&#39;mousedown&#39;, e =&gt; { dragging=true; handleXY(e.clientX, e.clientY); });
        window.addEventListener(&#39;mouseup&#39;, () =&gt; dragging=false);
        window.addEventListener(&#39;mousemove&#39;, e =&gt; { if(dragging) handleXY(e.clientX, e.clientY); });
        xyPad.addEventListener(&#39;touchstart&#39;, e =&gt; { dragging=true; e.preventDefault(); handleXY(e.touches[0].clientX, e.touches[0].clientY); });
        xyPad.addEventListener(&#39;touchmove&#39;, e =&gt; { if(dragging) { e.preventDefault(); handleXY(e.touches[0].clientX, e.touches[0].clientY); }});

    })();
    &lt;/script&gt;
&lt;/div&gt;

</content><link rel='replies' type='application/atom+xml' href='https://www.ipigeon.institute/feeds/2520572226447472436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/8391488493129870717/2520572226447472436?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2520572226447472436'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/8391488493129870717/posts/default/2520572226447472436'/><link rel='alternate' type='text/html' href='https://www.ipigeon.institute/2025/11/granular-audio-web-app-playground.html' title='Granular audio web app playground.'/><author><name>Jay Ammon, Founding Director at iPigeon.institute</name><uri>http://www.blogger.com/profile/00237279769708364839</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQPnIC5hRVq-rlY0sdN85inJStN-d3-GQdd2J7QJXTgVExyhvsi43ovPV8wdsyBnFW6mNHNMXwF8B0_CpwmEdqhzSgPhqCY6pEGwQGvHCbrbFUC8-5N8fTzvViDeDgFyY/s113/IMG_20191226_181158%7E2.jpg'/></author><thr:total>0</thr:total><georss:featurename>444 S Crocker St, Los Angeles, CA 90013, USA</georss:featurename><georss:point>34.0435271 -118.2427814</georss:point><georss:box>5.7332932638211531 -153.3990314 62.353760936178844 -83.0865314</georss:box></entry></feed>