Cancel Culture, Clout Chasing & the Death of Respect in a Scene Meant for Transcendence

By PsySociety / Audionerdz Editorial

ā€œPlease STOP making war in the psy scene… we are one family! We are not enemies… hate me if you want — but not the other artists who make music in the ā€˜wrong’ place.ā€
— Tal , artist and organizerĀ 


There was a time when psytrance meant unity. Exploration. Boundary dissolution. Connection beyond ego, genre, language, or geography.
Today? Open any comment section. What you’ll often find is something far from psychedelic: a battlefield. Not of BPMs — but of egos, gossip, cancellation, and virtue signaling.

What happened to the soul of our scene?

How did the tribe of transcendence become a digital colosseum of callouts, clout-chasing, and passive-aggressive warfare?

And most importantly: how do we take it back?


šŸŖ“ From Unity to Civil War: The Subgenre Schisms

The modern psytrance scene is fractured. Not just stylistically — that’s fine — but spiritually. Instead of a celebration of diversity, we’re seeing in-fighting disguised as purity. Arguments over BPMs become gatekeeping missions. Artists who dare experiment or collaborate outside their usual niche are shunned like heretics.

Somewhere along the way, a scene rooted in mind expansion became infected with dogma. And the cost? Innovation. Courage. Joy.

We’ve forgotten the very thing that made psytrance powerful: its permission to evolve.


🧨 Cancel Culture & Callout Karma

We live in a time when one post, one booking, or one misunderstood quote can spark a firestorm. Callout culture — originally born from the need to address real harm — has metastasized into a performative, clout-driven spectacle.

Did someone play a commercial stage? Release music with a big platform? Associate with a controversial name?

They’re done.

Instead of dialogue, we get digital exile.
Instead of education, we get execution.

Worse: many of these cancellations aren’t even about justice — they’re about social capital. Engagement. Status. Visibility.
Meanwhile, artists who spend years mastering their craft are de-platformed by people who’ve never made a kick drum in their life.

We are not saying there’s no room for critique — there must be. But there’s a difference between holding someone accountable… and burning them at the stake to boost your follower count.


🧃 Gossip as Culture, Not Culture as Culture

Let’s face it: gossip is more viral than basslines.
In some parts of the scene, it’s become the main currency.

We see it in private chats, Telegram groups, backstage murmurs, and whisper networks. Who’s ā€œfake,ā€ who’s ā€œsold out,ā€ who used AI, who boosted streams, who dated whom.
What we don’t see? Constructive feedback. Technical exchange. Respectful mentorship.

This gossip isn’t just noise — it’s corrosion. It makes artists anxious, divides collectives, and turns sacred spaces into power plays.

And ironically, the loudest critics are often those not creating anything themselves.


🧘 The Virtue Signaling Illusion

There’s nothing wrong with standing for something. But when ethics become aesthetic, we enter dangerous territory.

We’ve all seen platforms using tribal imagery for likes, hashtags like #oneness alongside corporate sponsorships, and fake-deep captions masking hollow intentions.
It’s not culture. It’s marketing.

Pages like Trancentral, for example, present themselves as cultural curators — yet they operate more like content farms. Pushing algorithm-friendly playlists, recycled memes, and soulless ā€œtop 10ā€ lists that erase context, community, and creativity.

It’s not about elevation — it’s about engagement.

And we’re mistaking it for leadership.


šŸŽ›ļø Where Did the Respect for Artistry Go?

Psytrance production is hardcore alchemy.
It’s not ā€œjust pushing buttons.ā€ It’s years of sacrifice, sonic architecture, analog gear, digital precision, and endless iteration.
Many of us gave up comfort, stability, and even relationships to chase this dream — to tell stories through sound.

And yet now, producers are judged not by their ideas, their innovations, or their integrity — but by scene politics and social alliances.

We’re watching incredible artists retreat into silence, afraid of saying the wrong thing. We’re losing some of the most gifted minds to burnout, bitterness, and disengagement.

When did creativity become conditional?

When did trance become transactional?


šŸ“æ What We Forgot: Psytrance as Ritual

Psytrance wasn’t born on Instagram. It was born in forests, deserts, beaches.
It was a ritual, not a product. A spiritual rebellion, not a scene for algorithmic competition.

We danced to connect, not to posture. We produced to transform, not to trend. We gathered to dissolve boundaries — not to build new ones in cyberspace.


🌱 Where Do We Go From Here?

We’re not here to ā€œsaveā€ the scene. It doesn’t need heroes.

But it does need healing.

If you’re tired of the drama — speak up.
If you’re seeing hate — call in, not just call out.
If someone messes up — talk to them. With grace.
If someone tries something new — support it, even if it’s not your taste.

Let us remember that this was supposed to be the opposite of the mainstream — not a mirror of it.

We were the freaks. The dreamers. The dissidents.

Let’s be that again.


šŸ”Š Final Transmission: Back to the Bassline

Turn off the noise.
Turn up the music.
Stand in front of the speaker stack with your heart cracked open.

Because in that moment — under the stars, drenched in sweat, surrounded by chosen family —
none of this scene drama matters.

Just the pulse. The unity. The ancient memory that brought us all here in the first place.

No more war in the psy scene.
We are one family.
Now act like it.

```javascript /* TrackForge MVP — Vanilla JS Storage: window.localStorage under key TF_DATA_V1 */ (function () { const LS_KEY = 'TF_DATA_V1'; const THEME_KEY = 'TF_THEME'; const EL = { // Main App grid: document.getElementById('projectGrid'), form: document.getElementById('projectForm'), trackName: document.getElementById('trackName'), genre: document.getElementById('genre'), status: document.getElementById('status'), deadline: document.getElementById('deadline'), themeToggle: document.getElementById('themeToggle'), search: document.getElementById('search'), filterStatus: document.getElementById('filterStatus'), clearAll: document.getElementById('clearAllBtn'), newProjectBtn: document.getElementById('newProjectBtn'), // Modal Elements modal: document.getElementById('projectModal'), modalForm: document.getElementById('modalForm'), modalTitle: document.getElementById('modalTitle'), m_name: document.getElementById('m_name'), m_genre: document.getElementById('m_genre'), m_status: document.getElementById('m_status'), m_deadline: document.getElementById('m_deadline'), newTaskText: document.getElementById('newTaskText'), addTaskBtn: document.getElementById('addTaskBtn'), taskList: document.getElementById('taskList'), deleteProjectBtn: document.getElementById('deleteProjectBtn'), saveProjectBtn: document.getElementById('saveProjectBtn'), }; let projects = []; // Array to hold all project data let currentProjectId = null; // To track which project is open in the modal // --- Helper Functions --- const generateId = () => Date.now().toString(36) + Math.random().toString(36).substring(2); const getStatusClass = (status) => { return status.toLowerCase().replace(/\s/g, '-'); }; const formatDate = (dateString) => { if (!dateString) return 'N/A'; const date = new Date(dateString); return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); }; const calculateDaysLeft = (deadline) => { if (!deadline) return null; const today = new Date(); const deadlineDate = new Date(deadline); today.setHours(0, 0, 0, 0); // Normalize today to start of day deadlineDate.setHours(0, 0, 0, 0); // Normalize deadline to start of day const diffTime = deadlineDate.getTime() - today.getTime(); const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); return diffDays; }; // --- Local Storage Operations --- const loadProjects = () => { const data = localStorage.getItem(LS_KEY); if (data) { projects = JSON.parse(data); } else { // Initialize with some dummy data if no projects exist projects = [ { id: generateId(), name: "Nova Spektrum 01", genre: "Psytrance", status: "In Progress", deadline: "2024-07-30", tasks: [ { id: generateId(), text: "Write main bassline", completed: true }, { id: generateId(), text: "Arrange breakdown 1", completed: false }, { id: generateId(), text: "Mix kick & bass", completed: false }, ] }, { id: generateId(), name: "Dream Sequence", genre: "Ambient", status: "Idea", deadline: "", tasks: [ { id: generateId(), text: "Brainstorm chord progressions", completed: false }, { id: generateId(), text: "Gather field recordings", completed: false }, ] }, { id: generateId(), name: "Urban Pulse", genre: "Techno", status: "Finished", deadline: "2024-05-15", tasks: [ { id: generateId(), text: "Final Master", completed: true }, { id: generateId(), text: "Upload to platforms", completed: true }, ] } ]; } renderProjects(); }; const saveProjects = () => { localStorage.setItem(LS_KEY, JSON.stringify(projects)); }; const clearAllData = () => { if (confirm('Are you sure you want to clear ALL demo data? This cannot be undone.')) { localStorage.removeItem(LS_KEY); projects = []; renderProjects(); } }; // --- Project Rendering --- const createProjectCard = (project) => { const card = document.createElement('div'); card.className = 'project-card'; card.dataset.id = project.id; const daysLeft = calculateDaysLeft(project.deadline); const deadlineInfoHtml = project.deadline ? `
${daysLeft !== null && daysLeft < 0 ? 'Overdue' : ''} ${formatDate(project.deadline)} ${daysLeft !== null && daysLeft >= 0 ? ` (${daysLeft} day${daysLeft === 1 ? '' : 's'} left)` : ''}
` : '
No deadline set
'; card.innerHTML = `

${project.name}

Genre: ${project.genre || 'N/A'} ${project.status}
${deadlineInfoHtml} `; card.addEventListener('click', () => openProjectModal(project.id)); return card; }; const renderProjects = () => { EL.grid.innerHTML = ''; // Clear existing projects const searchTerm = EL.search.value.toLowerCase(); const filterStatus = EL.filterStatus.value; const filteredProjects = projects.filter(project => { const matchesSearch = project.name.toLowerCase().includes(searchTerm) || project.genre.toLowerCase().includes(searchTerm); const matchesStatus = filterStatus === '' || project.status === filterStatus; return matchesSearch && matchesStatus; }); if (filteredProjects.length === 0) { EL.grid.innerHTML = '

No projects found matching your criteria.

'; } else { filteredProjects.forEach(project => { EL.grid.appendChild(createProjectCard(project)); }); } }; // --- New Project Form --- const handleNewProjectSubmit = (e) => { e.preventDefault(); const newProject = { id: generateId(), name: EL.trackName.value.trim(), genre: EL.genre.value.trim(), status: EL.status.value, deadline: EL.deadline.value, tasks: [] }; if (newProject.name) { projects.unshift(newProject); // Add to the beginning saveProjects(); renderProjects(); EL.form.reset(); // Clear form } else { alert('Please enter a track name.'); } }; // --- Modal Logic --- const openProjectModal = (projectId) => { currentProjectId = projectId; const project = projects.find(p => p.id === projectId); if (!project) { console.error('Project not found:', projectId); return; } EL.modalTitle.textContent = project.name; EL.m_name.value = project.name; EL.m_genre.value = project.genre; EL.m_status.value = project.status; EL.m_deadline.value = project.deadline; renderTasks(project.tasks); EL.modal.showModal(); }; const closeProjectModal = () => { EL.modal.close(); currentProjectId = null; EL.modalForm.reset(); EL.taskList.innerHTML = ''; }; const handleModalSave = (e) => { e.preventDefault(); // Prevent default form submission inside dialog const projectIndex = projects.findIndex(p => p.id === currentProjectId); if (projectIndex === -1) return; const project = projects[projectIndex]; project.name = EL.m_name.value.trim(); project.genre = EL.m_genre.value.trim(); project.status = EL.m_status.value; project.deadline = EL.m_deadline.value; // Tasks are updated live via other functions if (project.name) { saveProjects(); renderProjects(); // Re-render to update card details closeProjectModal(); } else { alert('Track name cannot be empty.'); } }; const handleDeleteProject = () => { if (!currentProjectId) return; if (confirm(`Are you sure you want to delete "${EL.m_